Anda di halaman 1dari 26

LAPORAN AKHIR PRAKTIKUM

STRUKTUR DATA

NAMA

: SUPRIYANDI

NIM

: DBC 113 170

KELAS

:B

MODUL

: V (PENCARIAN DATA)

JURUSAN TEKNIK INFORMATIKA


FAKULTAS TEKNIK
UNIVERSITAS PALANGKA RAYA
2014

BAB I
TUJUAN DAN LANDASAN TEORI

A. Tujuan Praktikum
1. Mengetahui beberapa metode pencarian data.
2. Mampu menggunakan metode pencarian data pada sebuah program
untuk menyelesaikan masalah.
B. Landasan Teori
Pencarian data (searching) merupakan proses fundamental
dalam pengelolaan data. Proses pencarian adalah menemukan nilai
(data) tertentu di dalam sekumpulan data yang bertipe sama (baik
bertipe dasar atau bertipe bentukan).
Pada himpunan yang tidak terurut, dapat digunakan metode
pencarian sekunsial (Sequential Search) untuk mencari data.
Sedngkan pada himpunan data tidak terurut dapat digunakan metode
pencarian sekuensial (Sequential Search) dan biner (Binary Search).
Berikut ini merupakan penjelasan dari metode pencarian tersebut.
1. Pencarian Sequensial (Sequensial Search)
Sequential Searching adalah Metoda pencarian linier secara
berurutan.

Metode

pencarian

linier

cukup

mudah

untuk

di

implementasikan di dalam penulisan sebuah program. Metoda ini


menggunakan cara dengan diawali dari ujung sebelah kiri lalu
melakukan perbandingan masing masing dari elemen yang ada dengan
elemen pencarian. Jika sudah ditemukan, maka pencarian segera
berakhir dan fungsi akan menghasilkan nilai True. Sementara jika
elemen yang dicari tidak ditemukan hingga akhir dari suatu larik maka
pencarian akan berakhir dengan tidak adanya elemen dalam larik
tersebut dan fungsi akan menghasilkan nilai False.
Dalam melakukan pencarian dalam metoda ini larik atau
deretan nilai harus diurutkan terlebih dahulu karena telah terurut maka

kita tahu bahwa elemen yang kita cari nilainya sudah lebih besar dari
elemen pada array list yang ditunjuk oleh index. Kita tidak perlu
melakukan pencarian lebih lanjut karena elemen yang kita cari pasti
tidak akan kita temukan di bagian sisa array yang ada. Ini
memungkinkan pencarian berlangsung secara lebih cepat saat elemen
yang kita cari berada di bagian depan array list yang ada. Tentu saja
berlawanan yaitu jika elemen yang dicari berada di ujung bagian array
list.

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 berisi 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;

iSearch

:= 0;

Else
End;
End;

2. Pencarian Biner (Binary Search)


Binary Search adalah suatu metode dalam Searching dengan
cara konvensional yaitu pencarian selalu mulai dari ujung kiri larik
dimana hal itu di tunjukan oleh inisiasi objek index dengan nilai 0.
Selanjutnya kita lakukan penelusuran larik untuk melakukan pencarian
larik hingga ke ujung larik tercapai. Untuk memahami bagaimana
Binary Search bekerja, bayangkan saat kita mencoba menebak bilangan
diantara rentang 1 100 secara terurut yang diberikan salah seorang
teman kepada kita.misalkan untuk setiap tebakan yang kita buat, teman
kita akan mengatakan tebakan kita benar,terlalu kecil atau terlalu
besar.tebakan terbaik saat awal tentu nya 50 jika tebakan tersebut
terlalu tinggi selanjutnya kita sebaiknya menebak 25 , sementara jika
terlalu besar tebakan kita selanjutnya 75. Setiap kali menebak kita
selalu memilih di tengah tengah dengan menyesuaikan batas bawah dan
batas atas bilangan.
Ada tiga kemungkinan yang akan terjadi, yaitu : (1) data
ditengah = data yang dicari : pencarian selesai, data ditemukan, (2) data
ditengah < data yang dicari : pencarian data di sebelah kanan, dan (3)
data di tengah > data yang dicari : pencarian di sebelah 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 t6idak ditemukan pada 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;

BAB II
LANGKAH KERJA

Buatlah sebuah program dengan ketentuan sebagai berikut :


1. Pencarian (searching) data dengan menggunakan kedua metode :
a. Pencarian Sekuensial
b. Pencarian Biner
2. Masukan awal adalah data bertipe record Pegawai Perusahaan yang
telah terurut membesar (ascending) dengan elemen :
Nomor_Pegawai

: integer;

Nama_Pegawai

: string[30];

Bagian

: string[20];

Gaji

: integer;

3. Pencarian data didasarkan pada Nomor_Induk pegawai yang dicari.


Perintah untuk melakukan pencarian tidak hanya sekali, bisa
dilakukan berulang-ulang sesuai keinginan pengguna/user.
4. Keluaran/hasil berupa data yang dicari untuk setiap perintah
pencarian.

BAB III
PEMBAHASAN

Pada Modul V (Pencarian Data) ini, kita disuruh membuat sebuah


program untuk menampilkan data pegawai dengan metode pencarian
Sekuensial dan metode pencarian biner.
Pencarian data didasarkan pada Nomor Pegawai yang dicari.
Perintah untuk melakukan pencarian bisa dilakukan berulang-ulang
sesuai keinginan pengguna/user.
Output/keluaran berupa data yang dicari untuk perintah pencarian.
Listing programnya sebagai berikut:
program searching;
uses crt;
const
nmax = 100;
type
rdata = record
nip

: integer;

nama : string[30];
bag

: string[20];

gaji : longint;
end;
adata = array [1..nmax] of rdata;
var
data : adata;
n : integer;
plh, ch : char;

procedure inputData(var A:adata; var ndata:integer);


var

i : integer;
begin
clrscr;
writeln('INPUTKAN DATA PEGAWAI');
writeln;
write('Banyaknya data pegawai : ');
readln(ndata);
writeln;
for i:=1 to ndata do
begin
writeln('Pegawai Ke-',i);
write('Nomor pegawai

: '); readln(A[i].nip);

write('Nama pegawai

: '); readln(A[i].nama);

write('Bagian

: '); readln(A[i].bag);

write('Gaji

: '); readln(A[i].gaji);

writeln;
end;
writeln;
write('TEKAN ENTER UNTUK MENU');
readkey;
end;

function menu : char;


var
c : char;
begin
clrscr;
writeln('MENU SEARCHING');
writeln;
writeln('1. Pencarian Sekuensial');

writeln('2. Pencarian Biner');


writeln('3. Keluar Program');
repeat
writeln;
write('Pilih 1, 2 atau 3 = ');
c := readkey;
writeln(c);
if not (c in ['1','2','3']) then
writeln('Input Salah !!!');
until(c in ['1','2','3']);
menu := c;
end;

procedure sekuensial(var A:adata; ndata: integer);


var
i : integer;
nomor : integer;
begin
clrscr;
writeln('--- Pencarian Sekuensial ---');
writeln;
write('Masukkan Nomor Pegawai yang dicari : ');
readln(nomor);
writeln;
writeln('Hasil Pencarian :');
writeln;
i:=1;
while ((A[i].nip < nomor) and (i<=ndata)) do
i := i + 1;
if (A[i].nip=nomor) then

begin
writeln('Data ditemukan !!!');
writeln('Nomor pegawai

: ',A[i].nip);

writeln('Nama pegawai

: ',A[i].nama);

writeln('Bagian

: ',A[i].bag);

writeln('Gaji

: ',A[i].gaji);

end
else
writeln('Maaf! Data tidak bisa ditemukan !!!');
end;

procedure biner(var A:adata; ndata: integer);


var
bawah, atas, nomor : integer;
tengah : integer;
found : boolean;
begin
clrscr;
writeln('--- Pencarian Biner ---');
writeln;
write('Masukkan Nomor Pegawai yang dicari : ');
readln(nomor);
writeln;
writeln('Hasil Pencarian :');
writeln;

bawah := 1;
atas := ndata;
found := false;

while (not found) and (atas>=bawah) do


begin
tengah := (bawah+atas) div 2;
if (A[tengah].nip=nomor) then
found := true
else
if (A[tengah].nip>nomor) then
atas := tengah - 1
else
bawah := tengah + 1;
end;

if found then
begin
writeln('Data ditemukan !!!');
writeln('Nomor pegawai

: ',A[tengah].nip);

writeln('Nama pegawai

: ',A[tengah].nama);

writeln('Bagian

: ',A[tengah].bag);

writeln('Gaji

: ',A[tengah].gaji);

end
else
writeln('Maaf! Data tidak bisa ditemukan !!!');
end;

{program utama}
begin
inputData(data,n);
writeln;
repeat
plh := menu;

case plh of
'1' : sekuensial(data,n);
'2' : biner(data,n);
'3' : exit;
end;
writeln;
repeat
writeln;
write('mau cari lagi..???(Y/T)');
ch := readkey;
if not (ch in ['Y','T']) then
writeln(' >> Input Salah !!!');
until(ch in ['Y','T']);
until(ch='0');
end.

Pembahasan :
program searching;
uses crt;
const
nmax = 100;
var
data : adata;
n : integer;
plh, ch : char;

Bagian diatas adalah bagian awal dari program ini. Pada bagian awal ini
dibuat sebuah konstanta yaitu nmax dengan nilai 100, ini berfungsi
untuk menetapkan variabel baru ( const Max ) dengan panjang karakter
100 (yang berarti bernilai konstan).
type
rdata = record
nip

: integer;

nama : string[30];
bag

: string[20];

gaji : longint;
end;
adata = array [1..nmax] of rdata;

Coding diatas merupakan penentuan type yang akan kita gunakan.


Penentuan ini hampir sama seperti penentuan pada variable yaitu
dengan menetapkan tipe data yang tepat.
Saya menggunakan variabel longint karena jika menggunakan integer
rentang nilainya hanya (-32768 s/d 32767) apabila melebihi 32767
maka akan bernilai (-) sehingga tidak cocok untuk memasukkan nilai gaji
yang bisa saja melebihi angka tersebut. Sedangkan longint memiliki rentang

nilai

(2147483648

s/d

2147483647)

mendeklarasikan suatu gaji seseorang.

sehingga

cocok

untuk

rdata = array[1..NMAX] of rdata;


fungsi array tersebut adalah bermaksud bahwa data yang dimasukan
memiliki jumlah karakter maksimum yaitu setara dengan definisi yang
telah ditentukan sebelumnya pada const NMAX.
var
data : adata;
n : integer;
plh, ch : char;

Coding diatas merupakan variabel global, sedangkan coding program


yang berada di dalam fungsi atau prosedure adalah merupakan sebuah
variabel local. Variable inilah yang berpengaruh terhadap keseluruhan
program. Semua sub program dapat mengakses, mempergunakan, dan
memodifikasi variable tersebut.Namun pada setiap procedure akan
diberikan lagi variabelnya selain pada penentuan variable globalnya.
procedure inputData(var A:adata; var ndata:integer);
var
i : integer;
begin
clrscr;
writeln('INPUTKAN DATA PEGAWAI');
writeln;
write('Banyaknya data pegawai : ');
readln(ndata);
writeln;
for i:=1 to ndata do
begin
writeln('Pegawai Ke-',i);
write('Nomor pegawai

: '); readln(A[i].nip);

write('Nama pegawai

: '); readln(A[i].nama);

write('Bagian

: '); readln(A[i].bag);

write('Gaji

: '); readln(A[i].gaji);

writeln;
end;
writeln;
write('TEKAN ENTER UNTUK MENU');
readkey;
end;

Procedure ini berfungsi untuk melakukan penginputan data. Dalam


penginputan data, procedure ini tidak menggunakan implementasi pada
pointer. Sesuai dengan ketentuan tugas pada modul ini, pengguna
diminta untuk memasukan nominal/jumlah data yang kira-kira akan
dimasukan. Setelah itu, barulah data dapat diinputkan sebanyak n data
yang disesuaikan dengan rumus

for i:=1 to ndata do.

function menu : char;


var
c : char;
begin
clrscr;
writeln('MENU SEARCHING');
writeln;
writeln('1. Pencarian Sekuensial');
writeln('2. Pencarian Biner');
writeln('3. Keluar Program');
repeat
writeln;
write('Pilih 1, 2 atau 3 = ');
c := readkey;
writeln(c);
if not (c in ['1','2','3']) then
writeln('Input Salah !!!');

until(c in ['1','2','3']);
menu := c;
end;

Pada bagian ini, merupakan sebuah fungsi yang digunakan untuk


membuat sebuah menu utama yang nantinya akan akan tampil pada saat
program dijalan, sehingga pengguna akan menjadi lebih mudah pada
saat melakukan pemakaian pada programnya.
procedure sekuensial(var A:adata; ndata: integer);
var
i : integer;
nomor : integer;
begin
clrscr;
writeln('--- Pencarian Sekuensial ---');
writeln;
write('Masukkan Nomor Pegawai yang dicari : ');
readln(nomor);
writeln;
writeln('Hasil Pencarian :');
writeln;
i:=1;
while ((A[i].nip < nomor) and (i<=ndata)) do
i := i + 1;
if (A[i].nip=nomor) then
begin
writeln('Data ditemukan !!!');
writeln('Nomor pegawai

: ',A[i].nip);

writeln('Nama pegawai

: ',A[i].nama);

writeln('Bagian

: ',A[i].bag);

writeln('Gaji

: ',A[i].gaji);

end
else
writeln('Maaf! Data tidak bisa ditemukan !!!');
end;

Procedure ini merupakan sebuah procedur pencarian data sequential.


Pada procedure ini, pernyataan yang digunakan adalah pernyataan yang
mnggunakan while-do. While-do dapat digunakan apabila bilangan
cacah perulangan masih belum diketahui. While-do memerlukan
inisialisasi

nilai

awal

terlebih

dahulu

dan

besarnya

nilai

penambahan/penurunan pada variable pencacah yang digunakan


sebagai pengendali untuk menghentikan perulangan. Pada procedure ini
terdapat suatu keadaan/kondisi dimana while

((A[i].nip

<

nomor) dan (i<=ndata)) do. apabila kondisi tersebut terpenuhi,

maka rumus yang akan dijalankan adalah i:= i+1.


procedure biner(var A:adata; ndata: integer);
var
bawah, atas, nomor : integer;
tengah : integer;
found : boolean;
begin
clrscr;
writeln('--- Pencarian Biner ---');
writeln;
write('Masukkan Nomor Pegawai yang dicari : ');
readln(nomor);
writeln;
writeln('Hasil Pencarian :');
writeln;

bawah := 1;

atas := ndata;
found := false;

while (not found) and (atas>=bawah) do


begin
tengah := (bawah+atas) div 2;
if (A[tengah].nip=nomor) then
found := true
else
if (A[tengah].nip>nomor) then
atas := tengah - 1
else
bawah := tengah + 1;
end;

if found then
begin
writeln('Data ditemukan !!!');
writeln('Nomor pegawai

: ',A[tengah].nip);

writeln('Nama pegawai

: ',A[tengah].nama);

writeln('Bagian

: ',A[tengah].bag);

writeln('Gaji

: ',A[tengah].gaji);

end
else
writeln('Maaf! Data tidak bisa ditemukan !!!');
end;

Procedure ini adalah procedure yang menjalankan fungsi pencarian


secara biner. Pada procedure ini, penentuan terhadap variable kembali
dilakukan yaitu untuk membuat variable lokal yang akan digunakan
pada procedure fungsi yang terdapat pada bagian procedure ini. Pada
procedure ini juga terdapat sebuah rumus untuk melakukan pencarian

data. Kondisi yang ada adalah while ((not found) and (atas>=bawah))
do.. maka jika kondisi tersebut terpenuhi langkah yang akan
dikerjakan adalah dengan menggunakan rumus tengah:=(atas+bawah)
dan data ditemukan, berarti hasilnya akan ada/dianggap benar (true).
Namun jika tidak maka tahapan yang akan dikerjakan adalah dengan
menggunakan rumus atas:=tengah-1, dan apabila tetap tidak terpenuhi
akan menggunakan bawah:=tengah+1.
{program utama}
begin
inputData(data,n);
writeln;
repeat
plh := menu;
case plh of
'1' : sekuensial(data,n);
'2' : biner(data,n);
'3' : exit;
end;
writeln;
repeat
writeln;
write('mau cari lagi..???(Y/T)');
ch := readkey;
if not (ch in ['Y','T']) then
writeln(' >> Input Salah !!!');
until(ch in ['Y','T']);
until(ch='0');
end.

Berikut ini merupakan program utama, dimana nantinya akan akan


tampil pada saat program dijalan, sehingga pengguna akan menjadi
lebih mudah pada saat melakukan pemakaian pada programnya.

fungsi yang dipakai adalah case pilih of.


Apabila kita memasukkan input 1 maka metode pencarian yang
digunakan adalah Sequensial.
Apabila kita memasukkan input 2 maka metode pencaran yang
digunakan adalah Biner.
Jika memasukkan input 3, maka program untuk keluar dari program
utama.
Ketika program sudah berhasil dijalankan, maka program akan meminta
inputan jumlah data, kemudian meminta inputan Nomor Pegawai,
Nama Pegawai, Bagian, dan Gaji sebanyak data yang diinputkan.
Ketika selesai penginputan data, program akan meminta nilai yang
ingin dicari, kemudian program akan menjalankan procedure pencarian
dengan metode Sequential search/Binary search. Kemudian program
akan menghasilkan hasil berdasarkan Nomor Pegawai yang ingin dicari.

BAB IV
KESIMPULAN

Kesimpulan dari hasil praktikum ini adalah sebagai berikut :


Pencarian data adalah prosedur atau cara untuk mencari suatu nilai
dalam sekumpulan data yang bertipe data sama (tipe dasar atau tipe
bentukan).
Metode Pencarian data ada bermacam-macam, sebagiannya adalah
Sequential search dan Binary Search.
Sequential search adalah melakukan suatu perbandingan nilai yang
dicari dengan setiap elemen pada array mulai dari indeks terkecil
sampai indeks terbesar. Sequential search tidak dipengaruhi oleh urutan
data.
Metode Sequential Search adalah metode paling sederhana dari
sejumlah metode pencarian.
Binary search adalah metode pencarian untuk data sudah terurut.
Pertama-tama pencarian dilakukan di tengah indeks, jika nilai yang
dicari lebih besar dari nilai indeks tengah nya maka ia akan mencari ke
bagian kanan dari indeks tengah, dan jika lebih kecil maka sebaliknya.

BAB V
DAFTAR PUSTAKA

2014.Modul

Praktikum

Struktur

Data.

Palangkaraya:Universitas

Palangkaraya.
http://hendra-ryuka.blogspot.com/2010/05/searching.html
http://pelajarimemahami.blogspot.com/2012/04/searching-dalam-strukturdata.html

BAB VI
LAMPIRAN
Input

Output
1. Menu Inputan Data Pegawai :

2. Menu Searching :

3. Pencarian Dengan Metode Pencarian Sekuensial

4. Pencarian Dengan Metode Pencarian Biner

Anda mungkin juga menyukai