Posted by Materi Teknik Informatika • Informasi Teknologi Informasi • Digital Marketing on 8/14/2014
Program Sorting dalam Pascal - Software house kali ini membahas tentang kumpulan
source code pascal tentang
Selection Sort,
Bubble Sort,
Quick Sort dan
Insert Sort.
Berikut ini source code sorting menggunakan compiler dev-pascal :
uses crt;
const
jml = 5000;
type
arr = array[1..jml] of integer;
var
p,q,k,i,x,ms,j,max: integer;
data: arr;
lagi,y: char;
procedure nama;
begin
clrscr;
gotoxy(33,2) ; writeln('**_Struktur Data_**');
gotoxy(1,4) ; writeln('================================================================================');
gotoxy(35,6) ; writeln('Ditujukan Kepada');
gotoxy(20,8) ; writeln('Nama Dosen : Ramdhani Hidayat, S.Kom, M.M.');
gotoxy(40,11); writeln('****');
gotoxy(20,14); writeln('Disusun oleh : ');
gotoxy(20,16); writeln('Kelompok : I (Satu)');
gotoxy(20,18); writeln('Anggota : ');
gotoxy(35,18); writeln('- Fedri Kurniawan');
gotoxy(35,20); writeln('- M. Ilma Nur Irfan');
gotoxy(35,22); writeln('- Topan Setiawan');
gotoxy(35,24); writeln('- Yuliana Dwi Eftiana');
gotoxy(20,26); writeln('Kelas : Manajemen Informatika/A');
gotoxy(20,28); writeln('Semester : II (Dua)');
gotoxy(24,32); writeln('Akademi Manajemen Informatika dan Komputer');
gotoxy(40,36); write('****');
readln;
end;
procedure menu;
begin
clrscr;
while (x > 5000) or (x < 2) do
begin
gotoxy(24,4); write('Berapa data yang akan di inputkan : '); readln(max);
if (max > 5000) or (max < 2) then
begin
gotoxy(20,8); write('Data yang dimasukan tidak boleh lebih dari 5000');
gotoxy(20,10); write('Tekan enter untuk mengulang !!!');
readln;
clrscr;
end
else
begin
clrscr;
gotoxy(30,2); write('**_Masukan data dari x1..xn');
gotoxy(1,4) ; write('================================================================================');
writeln;
for x:= 1 to max do
begin
write('Bilangan ke ',x,' = '); readln(data[x]);
writeln;
end;
end;
end;
clrscr;
gotoxy(29,2); write('**_Data sebelum diurutkan_**');
writeln;
writeln;
writeln('================================================================================');
for x:= 1 to max do
write(data[x],' ');
gotoxy(1,14) ; writeln('================================================================================');
gotoxy(3,16) ; writeln('**_Metode Sort_**' );
gotoxy(3,18) ; writeln('1. Selection Sort' );
gotoxy(3,20) ; writeln('2. Bubble Sort' );
gotoxy(3,22) ; writeln('3. Quick Sort' );
gotoxy(3,24) ; writeln('4. Insert Sort' );
gotoxy(3,26) ; writeln('5. Exit' );
gotoxy(40,39); write('****');
ms:= 0;
while (ms < 1) or (ms > 5) do
begin
gotoxy(3,28) ; write('Masukan Pilihan (1-5): ');
readln(ms);
if (ms < 1) or (ms > 5) then
clrscr;
write(^G);
end;
end;
procedure change(var a,b: integer);
var
c: integer;
begin
c:=a; a:=b; b:=c;
end;
procedure Asc_Selection;
var
pos: integer;
begin
for i:= 1 to max-1 do
begin
pos:= i;
for j:= i+1 to max do
if (data[j]) < (data[pos]) then
pos:= j;
if i <> pos then
change(data[i], data[pos]);
end;
end;
procedure Desc_Selection;
var
pos: integer;
begin
for i:= 1 to max-1 do
begin
pos:= i;
for j:= i+1 to max do
if (data[pos]) < (data[j]) then
pos:= j;
if i <> pos then
change(data[i], data[pos]);
end;
end;
procedure Asc_Bubble;
var
flag: boolean;
begin
flag:= false;
p:= 2;
while (p<max) and (not flag) do
begin
flag:= true;
for q:= max downto p do
if data[q] < data [q-1] then
begin
change (data[q], data[q-1]);
flag:= false;
end;
inc (i);
end;
end;
procedure Desc_Bubble;
var
flag: boolean;
begin
flag:= false;
p:= 2;
while (p<max) and (not flag) do
begin
flag:= true;
for q:= max downto p do
if data[q] > data [q-1] then
begin
change (data[q], data[q-1]);
flag:= false;
end;
inc (i);
end;
end;
procedure Asc_Quick(L, R: integer);
var
mid: integer;
begin
j:= L; k:= R; mid:=(L+R) div 2;
repeat
while data[j] < data[mid] do inc(j);
while data[k] > data[mid] do dec(k);
if j <= k then
begin
change (data[j], data[k]);
inc(j); dec(k);
end;
until j>k;
if L<k then Asc_Quick(L,k);
if j<R then Asc_Quick(j,R);
end;
procedure Desc_Quick(L, R: integer);
var
mid: integer;
begin
j:= L; k:= R; mid:=(L+R) div 2;
repeat
while data[j] > data[mid] do inc(j);
while data[k] < data[mid] do dec(k);
if j <= k then
begin
change (data[j], data[k]);
inc(j); dec(k);
end;
until j>k;
if L<k then Desc_Quick(L,k);
if j<R then Desc_Quick(j,R);
end;
procedure Asc_Insert;
var
temp: integer;
begin
for i:= 2 to max do
begin
temp:= data[i];
j:= i-1;
while (data[j] > temp) and (j>0) do
begin
data[j+1]:= data[j];
dec(j);
end;
data[j+1]:= temp;
end;
end;
procedure Desc_Insert;
var
temp: integer;
begin
for i:= 2 to max do
begin
temp:= data[i];
j:= i-1;
while (data[j] < temp) and (j>0) do
begin
data[j+1]:= data[j];
dec(j);
end;
data[j+1]:= temp;
end;
end;
procedure output;
begin
clrscr;
gotoxy(29,2); write('**_Data setelah diurutkan_**');
gotoxy(1,4) ; write('================================================================================');
gotoxy(35,6); write('**_Ascending_**');
writeln;
writeln;
writeln;
for x:= max downto 1 do
write(data[x],' ');
gotoxy(35,19); write('**_Descending_**');
writeln;
writeln;
writeln;
for x:= 1 to max do
write(data[x],' ');
writeln;
writeln;
writeln;
writeln;
writeln;
writeln;
writeln;
writeln;
writeln('================================================================================');
end;
begin
clrscr;
nama;
begin
lagi:='y';
while upcase(lagi)='Y' do
begin
menu;
if ms=1 then
begin
Asc_Selection;
Desc_Selection;
end
else
if ms=2 then
begin
Asc_Bubble;
Desc_Bubble;
end
else
if ms=3 then
begin
Asc_Quick(1,max);
Desc_Quick(1,max);
end
else
if ms=4 then
begin
Asc_Insert;
Desc_Insert;
end
else
exit;
output;
gotoxy(29,32); write('Coba metode yang lain [Y/T] ? ');
readln(lagi);
end;
end;
end.