laporan akhir praktikum (sd) v

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

Upload: supriyandi-andy

Post on 25-Sep-2015

246 views

Category:

Documents


7 download

DESCRIPTION

Modul 5

TRANSCRIPT

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

    Else

    iSearch := 0;

    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

  • 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) sehingga cocok untuk

    mendeklarasikan suatu gaji seseorang.

  • 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

  • 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

  • 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-struktur-

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