Pencarian merupakan
proses fundamental dalam pengelolaan data. Proses pencarian menemukan nilai
tertentu dalam himpunan data yang bertipe sama. Apabila data yang dicari
terdapat dalam himpunan data tersebut, ditentukan pula posisi dari data yang
dicari pada himpunan.
Pada
himpunan data tidak terurut, dapat digunakan metode pencarian sekuensial (sequencial search) untuk mencari data.
Sedangkan pada himpunan data tidak terurut dapat digunakan metode pencarian
sekuensial (sequencial search) dan
biner (binary search). Berikut ini
merupakan penjelasan dari metode pencarian tersebut.
1. Pencarian
Sekuensial (Sequencial Search)
Metode pencarian sekuensial merupakan
proses membandingkan setiap elemen dalam himpunan satu per satu secara terurut,
mulai dari elemen pertama sampai dengan elemen yang dicari ditemukan atau
seluruh elemen sudah dibandingkan. Sebagai contoh, misalkan data terurut
membesar. Pencarian dimulai dari data pertama sampai dengan data terakhir.
Pencarian dihentikan apabila data yang dicari ditemukan atau data yang
dibandingkan pada proses pencarian sudah lebih besar dari data yang dicari.
Procedure sequensialSort (var
A : Tabel; N : integer; x :
tipedata; var iSearch : integer);
{IS : A adalah tabel dengan banyaknya
data N. x adalah data yang dicari dan
bertipe sama dengan elemen tabel}
{FS : iSearch <> 0 bila A[iSearch]
= x, iSearch = 0 bila x tidak ditemukan
di A}
Var
i
: integer; {counter}
Begin
if (N = 0) then iSearch := 0 {tabel data 0}
else
begin
i:=1;
while ((A[i].NIM < x) and (i < N)) do
i:=i+1;
if (A[i].NIM = x) then
iSearch
:= i;
else
iSearch
:= 0;
end;
end;
2. Pencarian
Biner (Binary Search)
Pencarian biner hanya berlaku untuk data
yang sudah terurut. Bila data terurut membesar. Pencarian dilakukan pada posisi
data yang ditengah (misal : posisi m).
Ada tida kemungkinan yang akan terjadi,
yaitu : (1) data ditengah = data yang dicari : pencarian selesai, data
ditemukan, (2) data ditengah < data yang dicari : pencarian disebelah
“kanan”, dan (3) data ditengah > data yang dicari : pencarian disebelah
“kiri”. Proses dilakukan berulang-ulang sampai data ditemukan atau himpunan
data tidak bisa dibagi lagi.
Procedure
binarySort (var A : Tabel; N : integer; x : tipedata; var iSearch : integer);
{IS : A adalah tabel dengan banyaknya
data N. x adalah data yang dicari dan
bertipe sama dengan elemen tabel}
{FS : iSearch <> 0 bila A[iSearch]
= x, iSearch = 0 bila x tidak ditemukan
di A}
Var bawah,
atas, tengah : integer;
found : Boolean;
begin
if
(N=0) then iSearch := 0 {tabel
berisi data 0}
else
begin
bawah := 1;
atas := N;
found := false;
while
((not found) and (atas > bawah)) do
begin
tengah := (bawah + atas) div 2;
if
(A[tengah].NIM = x) then
found := true
else
if
(A[tengah].NIM = x) then
atas := tengah-1
else
bawah := tengah+1;
end;
if
found then
iSearch := tengah
else
iSearch := 0;
end;
end;
*****
Program Sort_Search;
uses crt;
const
NMAX = 100
type
data =record
NIM : integer;
nama string;
end;
type
tabel = array[1.NMAX] of integer;
var
a :
tabel;
tab
: array[1..nmax] of data;
cari : longint;
i,n,p, : integer;
cr tny : char;
procedure masukan;
begin
n:=n+1;
write('NIM : ');
readln(tab[n].NIM)
write('Nama : '); readln(tab[n].nama);
end;
procedure searching(n:integer;nim:integer);
var
a:integer;
b:boolean;
label c;
begin
b:=false;
for a:=1 to n do
if tab[a].NIM=NIM then
begin
writeln('Data berdasarkan NIM yang ingin dicari ditemukan yaitu :');
writeln('NIM : ',tab[a].nim);
writeln('Nama : ',tab[a].nama);
b:=true;
end;
if b=false then writeln('Data "',NIM,'" tidak ditemukan!');
end;
procedure inputanSeq;
begin
clrscr;
repeat
clrscr;
masukan;
writeln;
write('Ingin tambah lagi (Y/T) ? ');readln(tny);
writeln;
until upcase(tny)='T';
clrscr;
writeln('Data yang anda masukkan ada ',n,' buah.');
writeln;
repeat
write('Data berdasarkan NIM yang ingin dicari : ');readln(cari);
writeln;
searching(n,cari);
write('Ingin cari data lagi [Y/T] ? ');readln(tny);
writeln;
until upcase(tny)='T';
readkey;
end;
procedure biner( x:integer);
var
bawah,atas : integer;
tengah : integer;
found : boolean;
angka:longint;
B:char;
begin
repeat
clrscr;
write('Data dari NIM yang ingin dicari : ');readln(angka);
bawah := 1;
atas := x;
found := false;
while ((not found) and (atas>=bawah)) do
begin
tengah := (bawah + atas) div 2;
if (tab[tengah].NIM = angka) then
found := true
else
if (tab[tengah].NIM > angka) then
atas := tengah-1
else bawah := tengah+1;
end;
if found then
begin
writeln;
writeln('Data telah ditemukan');
writeln('NIM : ',tAb[tengah].nim);
writeln('Nama :
',tAb[tengah].nama);
end
else
writeln('Data berdasarkan NIM "',angka,'" tidak ditemukan !');
write('Ingin mencari data lagi [Y/T] ? ');readln(B);writeln;
until upcase (B)='T';
end;
procedure msk_biner;
begin
clrscr;
write('Masukkan jumlah data : '); readln(n);
for
i:= 1 to n do
begin
clrscr;
write('NIM : ');
readln(tab[i].nim);
write('Nama : ');
readln(tab[i].nama);
writeln;
end;
clrscr;
writeln('Data masukkan ',n,' data');
biner(n);
readkey;
end;
procedure plh_search;
var
a :
integer;
label 1;
begin
1:clrscr;
writeln('======== MENU ========');
writeln('1. Sequential Search');
writeln('2. Binary Search');
writeln('3. Exit');
writeln('======================');
writeln;
write('Pilih Menu : '); readln(a);
case
a of
1 :
begin
inputanSeq;
writeln('tekan ENTER untuk menyudahi');
readln;
end;
2 :
begin
msk_biner;
writeln('tekan ENTER untuk menyudahi');
readln;
end;
3 :
begin
clrscr;
write('EXIT MODE');
end;
else
write('Inputan salah');goto 1;
end;
end;
label x;
begin
x: clrscr;
writeln('====== MENU UTAMA ======');
writeln('1. Searching');
writeln('2. Exit');
writeln('========================');
writeln;
write('Pilih Menu : '); readln(p);
clrscr;
case p of
1
: plh_search;
2
: begin clrscr;
end;
else
write('Inputan Salah');goto x;
end;
readkey;
end.
Tidak ada komentar:
Posting Komentar