Program Pengurutan (Sorting) dan Pencarian (Searching) Data
1.
1
Program Pengurutan Data
1.Buble Sort
Program Buble_Sort;
USES Crt;
Type MATRIX= Array [1..30] of integer ;
var i,j,n : integer;
FUNCTION INPUTDATA(var m : matrix):integer;
BEGIN
clrscr;
Write ('Masukkan banyak data : '); Readln (n);
For i:= 1 to n do
BEGIN
Write ('Input Data ke- ',i,' : ') ;
Readln (m[i]);
End;
END;
Procedure Tukardata(var a,b : integer);
var c : integer;
Begin
c:= a; a:=b; b:=c;
End;
{Proses Mengurutkan Data Descending}
PROCEDURE DESC(DATA:MATRIX; VAR HASIL:matrix);
var x : integer;
BEGIN
Writeln;
For i:= 1 to n do
2.
2
Begin
For j:= 1to n do
If Data[i]>data[j] then
tukardata(data[i],data[j]);
End;
hasil:=data;
END;
{Proses Mengurutkan Data Ascending}
FUNCTION ASC(DATA:MATRIX; VAR H:MATRIX):INTEGER;
var x : integer;
BEGIN
For i:= 1 to n do
Begin
For j:= 1 to n do
If data[j]>Data[i] then
tukardata(data[j],data[i])
End;
H:=data;
END;
FUNCTION CETAK(m:MATRIX):INTEGER;
BEGIN
For i:= 1 to n do
Write(' ', m[i]);
writeln;
END;
{PROGRAM UTAMA}
VAR DATA,DES,AS:MATRIX;
BEGIN
CLRSCR;
INPUTDATA(data);
3.
3
DESC(DATA,DES);
ASC(DATA,AS);
write('Data Masukan :');
CETAK(DATA); {Cetak data input}
write('Data Descending : ');
CETAK(DES); {Cetak data Des}
write('Data Ascending : ');
Cetak(AS); {Cetak data Ascending}
READKEY;
END.
2. Insertion Sort
Program Insertion_sort;
uses crt;
var A,D:array[1..10] of integer;
i,j,n,temp:integer;
Begin
clrscr;
randomize;
write('Tentukan banyaknya data = ');
readln(n);
write('Data masukan :');
for i:=1 to n do
Begin
a[i]:=random(100);
write(' ',a[i],' ');
End;
D:=A;
{Proses Ascending}
4.
4
For i :=2 to n do
Begin
Temp :=a[i];
j := i-1;
while (a[j] > temp) and (j>0) do
begin
a[j+1] := a[j];
dec(j);
end;
a[j+1]:=temp;
end;
{Proses Descending}
for i:=2 to n do
Begin
temp:=D[i];
j:=i-1;
while (D[j]<temp) and (j>0) do
Begin
D[j+1]:=D[j];
dec(j);
End;
D[j+1]:= temp;
End;
writeln;
write('Ascending : ');
for i:=1 to n do
write(' ',a[i],' ');writeln;
write('Descending : ');
for i:=1 to n do
write(' ',d[i],' ');writeln;writeln;
5.
5
writeln('Tekan sebarang tombol');
readkey;
End.
3.Selection Sort
program Selection_sort;
uses crt;
type matrix = array[1..50] of integer;
Procedure input( var n: integer; var data: matrix);
var i: integer;
Begin
clrscr;
randomize;
write('Input banyaknya data = ');readln(n);
write('Input data : ');
FOR i:=1 TO n DO
Begin
data[i]:=RANDOM(100);
write(' ',data[i],' ');
End;writeln;
End;
Procedure tukardata(var a,b : integer);
var c : integer;
Begin
c:=a; a:=b; b:=c;
End;
{Lakukan pengurutan/sorting}
Procedure Ascending(n: integer; data : matrix; var B: matrix);
Var i,j, pos : byte;
6.
6
Begin
For i:= 1to n-1 do
Begin
Pos:=i;
For j:= i+1 to n do
If data[j] < data[pos] then pos:=j;
If i <> pos then tukardata(data[i],data[pos]);
end;
B:=data;
end;
Procedure Descending(n: integer; data : matrix; var B: matrix);
Var i,j, pos : byte;
Begin
For i:= 1 to n-1 do
Begin
Pos:=i;
For j:= i+1 to n do
If data[j] > data[pos] then pos:=j;
If i <> pos then tukardata(data[i],data[pos]);
end;
B:=data;
end;
{Tampilkan data setelah diurutkan}
Procedure Cetak(n:integer; data :matrix);
var i:integer;
Begin
for i:=1 to n do
begin
write(' ', data[i],' ');
end;writeln;
End;
7.
7
{Program Utama}
var n: integer; A,B,D : matrix;
Begin
clrscr;
input(n,A);
Ascending(n,A,B);
Descending(n,A,D);
write('Data Ascending : ');
cetak(n,B);
write('Data Descending: ');
Cetak(n,D);
readkey;
end.
Program Pencarian Data
1. Metode Binary Search
program Binary_Search;
uses crt;
Var
data : array [1..50] of integer;
i,j,n,x, kiri,tengah,kanan,cari :integer;
ketemu :boolean;
ulang : char;
Begin
clrscr;
randomize;
ulang :='y';
write('Tentukannya banyaknya data (Maks 50) = ');
readln(x);
write('Data input = ');
8.
8
for i :=1 to x do
Begin
data[i]:=random(50);
write(' ',data[i],' ');
End; writeln;
while ulang='y' do
Begin
{Urutkan data}
for i:=1 to x do
for j:=1 to x do
Begin
if data[i]<data[j] then
Begin
n:=data[i];
data[i]:=data[j];
data[j]:=n;
ENd;
End;
{Cetak Data}
write('Data Sorting = ');
for i:=1 to x do
write(' ',data[i],' ');writeln;
writeln;
write('Masukan data yang dicari (dgn Binary Serach) : ');
readln(cari);
kiri:=x;
kanan:=1;
ketemu:=false;
while not(ketemu) do
begin
tengah:=(kiri + kanan) div 2;
If data[tengah]=cari then
begin
9.
9
ketemu:=true;
writeln('Data ditemukan padaindex ke ',tengah);
end
else if (cari < data[tengah]) then
kiri := tengah - 1
else kanan:= tengah+1;
if (kanan > kiri) then
begin
ketemu:=true;
writeln('Data tidak ditemukan !');
end;
End;writeln;
write('Ulangi (y/t)?? ');readln(ulang);writeln;
End;
end.
2. Metode Binary Search Dengan Fungsi dan
Prosedur
program Binary_Search;
uses crt;
type matrix = array [1..50] of integer;
Procedure input(var n:integer; var data: matrix);
var i: integer;
Begin
clrscr;
randomize;
write('Input Banyaknya Data (Maks 50) : ');readln(n);
write('Data input = ');
for i := 1 to n do
Begin
10.
10
data[i]:=random(50);
write(' ',data[i],' ');
End;
writeln;
End;
Proceduretukardata(var a,b :integer);
var c:integer;
Begin
c:=a; a:=b; b:=c;
End;
{Urutkan data}
Procedure sort(n : integer; data:matrix; var urut:matrix);
var i,j,x: integer;
Begin
for i:=1 to n do
for j:=1 to n do
Begin
if data[i]<data[j] then
tukardata(data[i],data[j]);
End;
urut:=data;
End;
{Cetak Data}
Procedure Cetak(n : integer;data :matrix);
var i: integer;
Begin
write(' Data Sort = ');
for i:=1 to n do
write(' ',data[i],' ');writeln;
ENd;
Function Cari:integer;
11.
11
var n :integer;
Begin
write('Masukandata yang dicari (dgn Binary Serach) : ');
readln(n);
Cari:=n;
End;
Function Caridata(n : integer; cari :integer; data:matrix):integer;
var kiri,tengah,kanan,i :integer;
ketemu :boolean;
Begin
writeln;
kiri:=1;
kanan:=n;
ketemu:=false;
while not(ketemu) do
begin
tengah:=(kiri + kanan) div 2;
If data[tengah]=cari then
begin
ketemu:=true;
writeln('Data ditemukan pada index ke ',tengah);
end
else if (cari < data[tengah]) then
kanan := tengah - 1
else kiri:= tengah+1;
if (kiri > kanan) then
begin
ketemu:=true;
writeln('Data tidak ditemukan !');
end;
end;
End;
12.
12
{Program Utama}
var A,B:matrix;
c,n:integer;
ya : char;
Begin
clrscr;
ya:='y';
input(n,A);
while ya='y' do
Begin
sort(n,A,B);
cetak(n,B);
c:=cari;
Caridata(n,c,B);
Write('Ulangi? (Y/T) :');
readln(ya);
End;
end.
3. Metode Pencarian Interpolasi
Program Intrpolasi;
uses crt;
Type matrix = array[1..50] of integer;
Procedure input(var n: integer; var data:matrix);
var i:integer;
Begin
randomize;
Write ('Masukkan banyak data : '); Readln (n);
write('Data input = ');
For i:= 1 to n do
BEGIN
13.
13
data[i]:=random(50);
write(' ',data[i],' ');
End;writeln;
End;
ProcedureTukardata(var a,b :integer);
var c:integer;
Begin
c:=a; a:=b; b:=c;
End;
Function Urutkan(n: integer; data :matrix; var urut:matrix):integer;
var i,j,y: integer;
Begin
For i:= 1 to n do
Begin
For j:= 1 to n do
If Data[i]<Data[j] then
tukardata(data[i],data[j]);
End;
urut:=data;
End;
Procedure Cetak(n : integer; data : matrix);
var i: integer;
Begin
write('Data Ascending = ');
for i:=1 to n do
write(' ',data[i], ' ');
writeln;
End;
Function Cari(var cari:integer):integer;
Begin
write('Tentukan Data yang dicari = ');readln(cari);
14.
14
writeln;
End;
Procedure Caridata(n,cari: integer;data:matrix);
var l,h,t,pos : integer; p:real;
label Selesai;
Begin
l:=1; h:=n; t:=0;
while (data[l]<=cari) and (data[h]>=cari) do
Begin
p:=l+((cari-data[l])/(data[h]-data[l]))*(h-l);
pos:= round(p);
if data[pos]=cari then
Begin
t:=1;
goto selesai;
End;
Begin
if data[pos]>cari then
h:=pos-1
else
l:=pos+l;
End;
if l>h then goto selesai;
End;
Selesai:
if t=1 then write('Data ditemukan')
else write('Data tidak ditemukan');
writeln;
End;
{Program Utama}
var A,B : matrix;
n,c: integer;
15.
15
ya : char;
Begin
clrscr;
ya:='y';
input(n,A);
whileya='y' do
Begin
Urutkan(n,A,B);
Cetak(n,B);
cari(c);
Caridata(n,c,B);
write('Ulangi?? (y/t) : ');readln(ya);
End;
End.
4. Metode Pencarian Sekuensial
Program Sequensial_Cari;
uses crt;
var data:array[1..10] of integer;
i,j,n,d,t : integer;
ya : char;
Begin
clrscr;
randomize;
ya:= 'y';
write('Tentukan banyaknya data = ');
readln(n);
for i:=1 to n do
Begin
data[i]:=random(100);
End;clrscr;
16.
16
while ya='y' do
Begin
t:=0;j:=1;
write('Datainput : ');
for i:=1 to n do
write(data[i],' ');
writeln;
{cari data}
writeln;
write('Tentukan data yang akan dicari = ');
readln(d);
while (t=0) and (j<= n) do
Begin
if data[j]= d then t:=1;
inc(j);
End;
if t= 1 then
writeln(d,' ada di posisi urutan ke ',j-1)
else
writeln('Data tidak ditemukan');
write('Ulangi?? (y/t) ');readln(ya);
End;
End.