Anda di halaman 1dari 29

LEMBAR ASISTENSI

PRAKTIKUM STRUKTUR DATA


LABORATORIUM TEKNIK KOMPUTER
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK
UNIVERSITAS LAMPUNG

Judul Praktikum : SEARCHING


Praktikan (NPM) : Habib Nurul Fajri Khoir (2255061013)
Asisten (NPM) : Dimas Ardhi Kusuma (2115061110)
Chelly Sabrina (2115061042)
Kelas : PSTI D
No Catatan Tanggal Paraf

Bandar Lampung, 2023

. ………………………………………………………………
NPM.
I. JUDUL PERCOBAAN

SEARCHING

II. TUJUAN PERCOBAAN

Adapun tujuan percobaan adalah sebagai berikut.

1.Memahami penggunaan searching

2. Dapat memahami dan menggunakan searching

III. TEORI DASAR

PENGERTIAN SEARCHING

Searching adalah tindakan mengambil data dari kumpulan data berdasarkan kunci
(key) atau referensi data. Di kehidupan sehari-hari, kita sering berurusan dengan
pencarian. Misalnya, mencari nomor telepon seseorang di buku telepon, atau mencari
kata pada kamus, dan masih banyak lagi. Pencarian sering dilakukan dalam aplikasi
komputer. Misalnya, jika ingin menghapus atau mengubah data/record tertentu dalam
suatu file, harus terlebih dahulu menentukan apakah data tersebut ada dalam file. Jika
ada, maka data dapat dihapus atau diubah.

SEQUENTIAL SEARCH PADA C++

Sequential search adalah metode pencarian paling sederhana. Proses pencarian


sequential yaitu dengan membandingkan setiap elemen array satu per satu secara
beruntun, dimulai dengan elemen pertama, sampai elemen yang dicari ditemukan atau
sampai elemen terakhir dari array. Pencarian sekuensial dapat dilakukan pada elemen
array yang tidak diurutkan atau pada elemen array yang diurutkan. Perbedaan antara
keduanya terletak pada efisiensi operasi perbandingan yang dilakukan. Dengan
begitu, proses pencarian sequential akan singkat jika data yang diolah sedikit, dan
jika data yang diolah banyak, prosesnya akan lama. Maka, metode ini
direkomendasikan untuk data yang sedikit

Gambar 3.1 contoh sequential search

Algoritma ini mencari angka 2 dengan mengecek setiap elemen pada array. Ketika
sudah ditemukan maka proses pencarian dapat diakhiri.

Binary Search,

Binary search adalah Data yang ada harus diurutkan terlebih dahulu berdasarkan
suatu urutan tertentu yang dijadikan kunci pencarian. Adalah teknik pencarian data
dalam dengan cara membagi data menjadi dua bagian setiap kali terjadi proses
pencarian. Prinsip pencarian biner adalah:

Data diambil dari posisi 1 sampai posisi akhir N Kemudian cari posisi data tengah
dengan rumus: (posisi awal + posisi akhir) / 2. Kemudian data yang dicari
dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih
besar? Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi
tengah + 1 Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah
posisi tengah - 1 Jika data sama, berarti ketemu.

Contoh Binary Search:

Gambar 3.2 Data yang belum di susun

Langkah pertama yang akan kita lakukan adalah menyusun value dari array tersebut
agar tersusun secara ascending, pada kasus ini menggunakan algoritma bubble
sort untuk menyusunnya, sehingga didapatlah susunan array seperti ini

Gambar 3.3 data yang telah tersusun

selanjutnya, kita baru akan memulai algoritma binary search, langkah pertama kita
perlu menentukan 4 hal yaitu left,right,mid,key.

Left digunakan sebagai batas bawah pencarian. Pada langkah ini nilai left adalah
index ke 0.
Right digunakan sebagai batas atas pencarian. Pada langkah ini nilai right adalah
index ke 5.

Mid ditentukan otomatis dari panjang array yang kita punya, pada contoh ini ada 6
index array yang berarti nilai mid adalah 3 dan mengacu pada index ke 2 dari array
yang kita punya.

Sedangkan KEY adalah nilai yang akan kita cari, anggap saja kita akan mencari
angka 4 dari value array tsb.

Langkah selanjutnya kita akan menentukan apakah value array index ke mid (3) sama
dengan key (4)? ternyata tidak.

lanjut, apakah array index ke mid (3) lebih kecil dari key (4)? jika iya maka kita akan
mengubah parameter left menjadi mid +1. Namun jika tidak kita akan mengubah
right menjadi mid -1.

pada kasus ini value array ke mid lebih kecil dibanding key jadi kita akan mengubah
left menjadi mid+1 yaitu 2+1 = 3.

Jadi saat ini array kita tinggal tersisa

Gambar 3.4 data indeks array

akan mengulang lagi algoritmanya, kali ini nilai tengahnya adalah array index ke 4.

apakah array index ke 4 (5) sama dengan key (4)? ternyata tidak.

lanjut,apakah array index ke 4 (5) lebih kecil daripada key (4)? ternyata tidak, jadi
kita akan mengubah nilai right menjadi mid-1 yaitu 3. sehingga sisa List kita hanya
tersisa 1 yaitu array index ke 3 dengan value 4.
saat ini right dan left berada di satu tempat, sehingga nilai left,right dan mid berada
pada satu posisi.

sampai di tahap ini kita akan kembali mengecek, apakah array index ke mid (4) sama
dengan key (4). jika iya maka algoritma selesai dijalankan dan hasil pencarian
bernilai true.

namun jika ternyata sampai di sini key masih belum ketemu, maka posisi left atau
right akan kembali berubah, dan pastinya left menjadi lebih besar daripada right maka
algoritma akan berhenti dan hasil pencarian dianggap false (tidak ketemu).
IV. PROSEDUR PERCOBAAN

4.1 Percobaan Sequencial Searching


4.1.1 Percobaan 3-1 Sequencial Searching

Gambar 4.1.1 Source Code Percobaan 3-1 Sequencial Searching


4.1.2 Percobaan 3-1 Sequencial Searching Counter

Gambar 4.1.2Source code Percobaan 3-1 Sequencial Searching Counter


4.1.3 Percobaan 3-1 Sequencial Searching Sentinel

Gambar 4.1.3Source code Percobaan 3-1 Sequencial Searching Sentinel


4.2 Percobaan Binary Searching
4.2.1 Percobaan 3-2 Binary Searching

Gambar 4.2.1 Source Code Percobaan 3-2 Binary Searching


4.2.2 Percobaan 3-2 Binary Searching

Gambar 4.2.2 Source Code Percobaan 3-2 Binary Searching


V. PEMBAHASAN

Adapun Pembahasan Percobaan ini adalah sebagai berikut.


5.1 Percobaan 1 Sequential Searching
5.1.1 Percobaan 1-1 Sequential searching
5.1.1.a Source Code Percobaan berapa 3-1 Sequential Searching

Gambar 5.1.1.a Source Code Percobaan 3-1 Sequential Searching

Berdasarkan Gambar 5.1.1.a Source Code Percobaan 3-1 Sequential Searching


menggunakan c++ ,pada baris ke 6 terdapat deklarasi variabel n dengan tipe data
integer dan nilai awalnya adalah 8 ,pada baris ke 7 terdapat deklarasi int data[n] yang
di gunakan untuk mendeklarasi dan menginisiasi array “data” dengan panjang “n” 8,
pada baris ke 8 mendeklarasikan variabel “cari” yang di gunakan untuk menyimpan
array ,pada baris ke 9 mendeklarasi variabel ‘i’ yang di gunakan sebagai indeks untuk
melakukan perulangan hingga kondisi tercapai,pada baris ke 10 mendeklarasikan
variabel ‘flag’ yang di gunakan untuk menentukan apakah nilai di temukan atau
tidak,pada baris ke 11 terdapat perulangan while (i<n) yang di gunakan untuk
mengetahui apakah kondisinya nilai I kurang dari n,pada baris ke 12 terdapat
pernyataan ‘ if ’ yang akan memeriksa apakah nilai dari indeks ‘i’ sama dengan nilai
yang di cari,pada baris ke13 terdapat flag yang di gunakan untuk menandai apa bila
nilai yang di cari telah di temukan,pada baris ke 14 terdapat break yang di gunakan
untuk keluar dari perulangan jika data yang di cari telah di temukan,pada baris ke 16
terdapat incremen i(i++),pada baris ke 18 terdapat if (flag= 1) yang di gunakan untuk
memeriksa apakah variabel flag adalah 1,pada baris ke 19 terdapat fungsi cout yang
akan menampilkan kata ‘ketemu’ jika elemen yang di cari telah di temukan ,pada
baris ke 20 terdapat fungsi ‘else’,pada baris ke 21 terdapat fungsi cout yang akan
menampilkan ‘tidak ketemu’ jika elemen yang di cari tidak di temukan,pada baris ke
22 terdapat return 0 yang berfungsi untuk mengakhiri program.
5.1.1.b Output Percobaan 3-1 Sequential Searching

Gambar 5.1.1.b Output Percobaan 3-1 Sequential Search

Berdasarkan Gambar 5.1.1.b Output Percobaan 3-1 Sequential Search ,yang di


tampilkan pada output adalah “ ketemu “ ini di karenakan program akan menginisiasi
nilai dari {3,6,3,8,5,9,1,4} program akan mencari nilai 5 dengan menggunakan
while,kemudian while akan melakukan pencarian nilai 5 pada source code baris ke
7 ,ketika program menemukan nilai yang sama maka akan mengubahnya menjadi
“flag” untuk menandakan data telah di temukan dan mengubahnya menjadi ‘1’ dan
akan keluar dari perulangan, pada source code baris ke 14, dan kemudian program
akan memeriksa nilai flag apakah adalah 1 jika iya maka akan mencetak “ ketemu “
pada baris ke 18 dan 19 pada source code.
5.1.2 Percobaan 3-1 Sequential Searching Counter
5.1.2.a Source Code Percobaan 3-1 Sequential Seacrhing counter

Gambar 5.1.2.a Source Code Percobaan 3-1 Sequential Searching counter

Berdasarkan Gambar 5.1.2.a Source Code Percobaan 3-1 Sequential Searching


counter pada c++ ,pada baris ke 6 deklarasi variabel ‘int n = 100’ yang berguna untuk
menyimpan panjang array sebanyak 100,pada baris ke 7 terdapat deklarasi int data[n]
yang di gunakan untuk mendeklarasi dan menginisiasi array “data” dengan panjang
“n” ,pada baris ke 8 mendeklarasikan variabel int “cari” yang di gunakan untuk
menyimpan array,pada baris ke 9 deklarasi int counter yang bertujuan untuk
menghitung berapa kali nilai yang di cari muncul , ,pada baris ke 10 mendeklarasikan
int ‘flag’ yang di gunakan untuk menentukan apakah nilai di temukan atau tidak, pada
baris ke 9 terdapat fungsi perulangan for dengan deklarasi i=0 dengan syarat i<n
dengan di ikuti increment i i++,pada baris ke12 terdapat data[i] = rand() % 100 + 1;
berfungsi sebagai pernyataan yang mengisi nilai array dengan angka acak 1 hingga
100 rand berfungsi untuk menghasilkan angka acak,pada baris ke 13 terdapat fungsi
cout yang berfungsi untuk mencetak nilai,pada baris ke 15 terdapat fungsi cout endl
yang berfungsi untuk mengakhiri baris 16 terdapat perulangan for (int i=0; i < n; i++)
yang berfungsi untuk mencari nilai yang sama dengan ‘cari’ pada baris ke 8, pada
baris ke 17 terdapat pernyataan ‘ if ’ yang akan memeriksa apakah nilai dari indeks ‘i’
sama dengan nilai yang di cari,pada baris ke 18 terdapat counter yang berfungsi untuk
jika nilai yang di cari di temukan maka counter akan di tambah 1 sebagi
penghitung,pada baris ke 19 terdapat flag yang berfungsi untuk menandai bahwa nilai
telah di temukan,pada baris ke pada baris ke 23 terdapat if (flag= 1) yang di gunakan
untuk memeriksa apakah variabel flag adalah 1,pada baris ke 24 terdapat fungsi cout
yang akan menampilkan kata ‘ketemu’ jika elemen yang di cari telah di
temukan ,pada baris ke 25 terdapat fungsi ‘else’,pada baris ke 26 terdapat fungsi cout
yang akan menampilkan ‘tidak ketemu’ jika elemen yang di cari tidak di
temukan,pada baris ke 27 terdapat return 0 yang berfungsi untuk mengakhiri
program.
5.1.2.b Output Percobaan 3-1 Sequential Searching counter

Gambar 5.1.2.b Output Percobaan 3-1 Sequential Searching counter

Berdasarkan gambar 5.1.2.b Output Percobaan 3-1 Sequential searching counter


dapat di lihat bahwa output yang di hasilkan angkanya acak ini di karenakan
merupakan fungsi rand dari baris ke12 pada source code ,angka yang di cari adalah
angka 28 dan di tampilkan di output bahwa di temukan sebanyak 2 angka 28 ini
merupakanhasil dari perulangan for pada baris ke 16
5.1.3 Percobaan 3-1 Sequential Searching sentinel
5.1.3.a. Source Code Percobaan 3-1 Sequential Searching sentinel

Gambar 5.1.3.a Source Coode Percobaan 3-1 Sequential Searching sentinel

Berdasarkan Gambar 5.1.3.a Source Coode Percobaan 1-3 Sequential Searching


sentinel pada c++, pada baris ke 6 terdapat deklarasi variabel n dengan tipe data
integer dan nilai awalnya adalah 10 ,pada baris ke 7 terdapat deklarasi int data[n]
yang di gunakan untuk mendeklarasi dan menginisiasi array “data” dengan panjang
“n” 8, pada baris ke 8 mendeklarasikan variabel “cari” yang di gunakan untuk
menyimpan array ,pada baris ke 9 mendeklarasi variabel ‘i’ yang di gunakan sebagai
indeks untuk melakukan perulangan hingga kondisi tercapai,pada baris ke 10 terdapat
data[5] = cari adalah pernyataan yang menganti nilai pada indeks 5 dengan nilai yang
di simpan pada variabel cari ,pada baris ke 11 terdapat perulangan while yang di
gunakan untuk mencari nilai hingga di temukan ,pada baris ke 12 terdapat incremen
i++ pada baris ke 15 terdapat perulangan if (i<5) yang menyatakan apakah variabel i
tidak kurang dari 5 ,pada baris ke 16 terdapat fungsi cout yang akan menampilkan
kata ketemu jika nilai i kurang dari 5,pada baris ke 17 dan 18 terdapat fungsi else
jika nilai I tidak kurang dari 5 maka akan menampilkan kata tidak ketemu,pada baris
ke 19 terdapat return 0 yang berfungsi bahwa program telah selesai di jalankan,
5.1.3.b Output Percobaan 3-1 Sequential Search

Gambar 5.1.3.b Percobaan 3-1 Sequntial Searching

Berdasarkan Gambar 5.1.3.b Percobaan 1-3 Sequntial Searching dapat di lihat bahwa
output yang di tampilkan adalah “ tidak ketemu” yang merupakan hasil dari fungsi
cout pada baris ke 18 pada source code , output tidak ketemu di karenakan nilai yang
di hasilkan lebih besar dari 5
5.2 Binary Search

5.2.1 Percobaan 3-2 Binary Searching

5.2.1.a Source Code Percobaan 3-2 Binary Searcing

Gambar 5.2.1.a Source Code Percobaan 3-2 Binary Searching

Berdasarkan Gambar 5.2.1.a Source Code Percobaan 3-2 Binary Searching pada
baris ke 6 terdapat deklarasi variabel n dengan tipe data integer dan nilai awalnya
adalah 10 ,pada baris ke 7 terdapat deklarasi int data[n] yang di gunakan untuk
mendeklarasi dan menginisiasi array “data” dengan panjang “n” 8,pada baris ke 8
mendeklarasikan int l,r,m,pada baris ke 9 variabel l di inisiasi dengan nila 0,pada
baris ke 10 variabel r di inisiasi dengan n-1, pada baris ke 11 mendeklarasikan int
‘flag’ yang di gunakan untuk menentukan apakah nilai di temukan atau tidak,pada
baris ke 12 mendeklarasikan int cari yang akan menyimpan nilai yang akan di
cari,pada baris ke 14 terdapat tedapat perulangan while yang akan terus berjalan
selama l kurang dari r dan flag adalah 0 yang berarti nilai yang di cari belum di
temukan,pada baris ke 15 terdapat m = (l+r)/2; yang merupakan indeks tengah,pada
baris ke 16 terdapat cout yang akan mencetak indekstengah ‘m’ pada baris ke 17
terdapat perulangan if yang akan memeriksa apakah elemen yang di temukan di
indeks m sama dengan nilai yang di cari,pada baris ke 18 terdapat flag = 1 jika
elemen yang di cari di temukan maka flag akan di ubah menjadi 1,pada baris ke 19
dan 20 terdapat pernyataan else if yang akan di gunakan untuk memeriksa apakah
nilai yang di cari kurang dari indeks m jika iya maka program akan mencetak cari
dari kiri dan mengubah nilai r menjadi m-1 ,pada baris ke 23hingga ke 25 terdapat
else yang jika kondisi sebelumny memenuhi maka akan mecnetak dari kanan dan
mengubah nilai l menjadi m+1,pda baris ke 28 terdapat if (flag= 1) yang di gunakan
untuk memeriksa apakah variabel flag adalah 1,pada baris ke 29 terdapat fungsi cout
yang akan menampilkan kata ‘ketemu’ jika elemen yang di cari telah di
temukan ,pada baris ke 30 terdapat fungsi ‘else’,pada baris ke 31 terdapat fungsi cout
yang akan menampilkan ‘tidak ketemu’ jika elemen yang di cari tidak di
temukan,pada baris ke 32 terdapat return 0 yang berfungsi untuk mengakhiri
program.
5.2.1.b Output Percobaan 3-2 Binary Searching

Gambar 5.2.1.b Output Percobaan 3-2 Binary Searching

Berdasarkan Gambar 5.2.1.b Output Percobaan 3-2 Binary Searching dapat di lihat bahwa
output yang di hasilkan adalah cari data dari kanan data tengah : 4,cari data ari kiri ,data
tengah 7 ,data dari tengah ketemu, ,pada output di atas di tampilkan proses pencarian data di
mana sebelumya data dibagi dua dan ditentukan nilai tengahnya, lalu program menentukan
lokasi data hingga pada akhirnya data ketemu. Adapun source code yang melaksanakan
fungsi pencarian ini adalah pada baris ke – 14 hingga baris ke – 31.
5.2.2 Percobaan 3-2: Binary Searching interpolation
5.2.2.a. Source Code Percobaan 3-2 Binary Searching interpolation

Gambar 5.2.2.a Source Code Percobaan 3-2 Binary Search interpolation

Berdasarkan Gambar 5.2.2.a Source Code Percobaan 3-2 Binary Searching


interpolation dapat di lihat bahwa Berdasarkan Gambar 5.2.1.a Source Code
Percobaan 2-1 Binary Searching pada baris ke 6 terdapat deklarasi variabel n dengan
tipe data integer dan nilai awalnya adalah 10 ,pada baris ke 7 terdapat deklarasi int
data[n] yang di gunakan untuk mendeklarasi dan menginisiasi array “data” dengan
panjang “n” 8,pada baris ke 8 terdapat deklarasi variabel int low,high,pada baris ke9
terdapat inisiasi variabel low dengan nilai 0 ,pada baris ke 10 menginisiasi variabel
high dengan nilai n-1 ,pada baris ke 11 mendeklarasi variabel pos yang akan di
gunakan sebagai untuk menyimpan posisi saat melakukakan searching,pada baris ke
12 mendeklarasi variabel cari 81 dan menginisisasinya dengan nilai yang akan di
cari,pada baris ke 14 terdapat perulangan while yang akan berjalan selama kondisi
cari masih termasuk dalam nilai array yaitu cari harus lebih besar dari nilai terkecil
atau kurang dari nilai terbesar,pada baris ke 15 terdapat pos =
(static_cast<double>(cari - data[low]) / (data[high] - data[low])) * (high - low) + low;
dan menghitung nilai ,pada baris ke 16 terdapat fungsi cout yang akan mencetak pos,
pada baris ke17 dan 18 terdapat perulangan if (cari > data[pos]) yang akan memeriksa
apakah nilai yang di cari lebih besar dari nilai yang di tentukan jik iya maka variabel
low di perbarui dengan pos + 1 ,pada baris ke 19 dan 20 terdapat else if (cari < data
[pos]) ini akan memeriksa apakah nilai yang di cari lebih kecil dari nilai yang di
tentukan jiak iya maka variabel high di perbarui dengan pos -1 ,pada baris ke 21 dan
22 terdapat else ,low=pos yang mana variabel low di ganti dengan variabel pos,pada
baris ke 25 hingga 28 terdapat perulangan while yang akan memeriksa program
apakah nilai yang di ‘cari’ sama dengan nilai di posisi low jika iya program akan
mencetak ‘ketemu’ jika tidak program akan mencetak ‘tidak ketemu’.
5.2.2.b Output Percobaan 3-2 Binary Search interpolation

Gambar 5.2.2.b Output Percobaan 3-2 Binary Sarch interpolation

Berdasarkan Gambar 5.2.2.b Output Percobaan 3-2 Binary Sarch interpolation dapat
di lihat bahwa output yang di hasilkan adalah 6,7,dan ketemu,pada angka 6 di
dapatkan dari source code baris ke 14 dengan kondisi while (cari > data[low]
&& cari <= data[high]) , selanjutnya angka 7 ngan kondisi percabangan if yang
terpenuhi sehingga nilai low yang dari 0 berubah menjadi pos + 1 atau 7….
VI. KESIMPULAN

Adapun kesimpulan yang didapatkan berdasarkan percobaan diatas adalah sebagai


berikut.
1. Berdasarkan Pada source code 5.1.1 pada baris ke 13 flag yang di gunakan untuk
menandai apa bila nilai yang di cari telah di temukan,
2. Berdasarkan pada source code 5.1.2 pada baris ke 12 dapat di lihat bahwa fungsi
‘rand’ adalah untuk membuat nilai acak
3. n/a
4. n/a
DAFTAR PUSTAKA

Muhammad Taufik Dwi Putra, Munawir, Ana Rahma Yuniarti,2023,belajar


pemrograman lanjut dengan c++.Jawa Barat. penerbit media utama.

Fatta., H. 2006. Dasar Pemrograman C++. Yogyakarta: Penerbit Andi.


TUGAS AKHIR

SEGERA

Anda mungkin juga menyukai