• Tidak ada hasil yang ditemukan

LAPORAN AKHIR PRAKTIKUM STRUKTUR DATA

N/A
N/A
Protected

Academic year: 2021

Membagikan "LAPORAN AKHIR PRAKTIKUM STRUKTUR DATA"

Copied!
26
0
0

Teks penuh

(1)

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

(2)

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

(3)

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; Else iSearch := 0; End; End;

(4)

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}

(5)

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

(6)

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.

(7)

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

(8)

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;

(9)

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;

(10)

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;

(11)

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;

(12)

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.

(13)

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 untukmenetapkan 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) sehingga cocok untuk mendeklarasikan suatu gaji seseorang.

(14)

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

(15)

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 !!!');

(16)

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

(17)

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;

(18)

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

(19)

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.

(20)

 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.

(21)

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.

(22)

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-struktur-data.html

(23)

BAB VI

LAMPIRAN

(24)
(25)

Output

1. Menu Inputan Data Pegawai :

2. Menu Searching :

(26)

Referensi

Dokumen terkait

Zahir Accounting versi 5.1 adalah software akuntansi yang digunakan untuk membuat laporan keuangan, dengan bahasa yangmudah dipahami dan dimengerti.. Penggunaan Zahir

Penelitian ini bertujuan untuk mengetahui tingkat infestasi protozoa saluran pencernaan (Eimeria sp.) pada kerbau lumpur (Bubalus bubalis Linn.) di Kecamatan Jati

Sebagai perbandingan bangunan fasilitas cottage, ada beberapa kawasan wisata dengan fasilitas akomodasinya yang memanfaatkan lingkungan sekitarnya sehingga fasilitas wisata

Skripsi berjudul Penerapan Laporan Biaya Kualitas Terhadap Kualitas Produk (Studi Kasus Pada UD. Dua Dewi Keripik Nangka Q-Ecco di Puger), telah diuji dan disahkan

Jumlah Pertemuan : 1 (satu) kali pertemuan Pertemu an Tujuan Pembelajaran Khusus Sub-pokok Bahasan dan rincian materi Proses Pembelajara n Tugas dan Evaluasi Media dan

Zhang (2007) mengajukan model pertumbuhan ekonomi dua sektor dalam waktu diskret, di mana dalam sistem produksi, produsen akan menghasilkan dua output (dua jenis produk)

Menurut klausul ini, pada tahap-tahap yang tepat dari desain dan pengembangan, verifikasi harus dilakukan untuk menjamin bahwa output desain dan pengembangan itu

Menurut Gordon dalam Silalahi (2011:189) menjelaskan pengertian pembagian kerja, sebagai berikut : “Pembagian kerja adalah kegiatan mengurai pekerjaan dalam