Rabu, 30 April 2014

PENCARIAN DATA


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:

Domo-kun Staring