Anda di halaman 1dari 17

LAPORAN PRAKTIKUM

MODUL VIII
SEARCHING

Disusun Oleh :

NAMA : Markus Wahid Sabel Hansen Situmorang


NIM : 21102133

Dosen :
Ipam Fuaddina Adam, ST., M.Kom.

PROGRAM STUDI S1 TEKNIK INFORMATIKA


FAKULTAS TEKNOLOGI INDUSTRI DAN INFORMATIKA
INSTITUT TEKNOLOGI TELKOM
PURWOKERTO
2022
BAB I
TUJUAN PRAKTIKUM

1. Memahami dan menerapkan beberapa algoritma pencarian (searching) dalam


menyelesaikan berbagai studi kasus
BAB II
DASAR TEORI

1. Konsep Dasar Searching


• Searching adalah proses mendapatkan (retrieve) informasi berdasarkan kunci
tertentu dari sejumlah informasi yang telah disimpan
2. Sequential Search
Konsep dasar algoritma Sequential Search :
• Terdapat sebuah larik yang berisi n buah data ( L[0], L[1], … , L[n-1])
• i adalah bilangan indeks terkecil , yang memenuhi kondisi 0 ≤ k ≤ n-1
• k adalah data yang dicari -> L[i]=k
Algoritma Sequential Serach:
▪ Berikut ini merupakan implementasi algoritma pencarian secara sekuensial.
▪ Subrutin akan menghasilkan nilai balik berupa:
a. -1 jika data yang dicari tidak ditemukan dan
b. Bilangan antara 0 sampai dengan n-1 (dengan n adalah jumlah elemen
larik) jika data yang dicari ditemukan

Pseudocode Algoritma Sequential Search:


SUBRUTIN cari (L, n, k)
JIKA n ≤ 0 MAKA
posisi ← - 1
SEBALIKNYA
ketemu ← SALAH
i←0
ULANG SELAMA (i<n-1) DAN (TIDAK ketemu)
JIKA K = L[i] MAKA
posisi ← i
ketemu ← BENAR
SEBALIKNYA
i←i+1
AKHIR-JIKA
AKHIR ULANG
JIKA TIDAK ketemu MAKA
posisi ← -1
AKHIR-JIKA
AKHIR-JIKA
NILAI-BALIK posisi
AKHIR-SUBRUTIN
Dengan: L=larik; n= jml elemen larik; dan k= data yang dicari
Fungsi Sequential Search dalam Bahasa C++;
int sequential_search(int data [], int n, int k) {
int posisi, i, ketemu;
if (n <= 0)
posisi = -1;
else {
ketemu = 0;
i = 1;
while ((i < n -1) && ! ketemu) {
if (data [i] == k) {
posisi = i;
ketemu = 1;
} else {
i++;
}
if (!ketemu) {
posisi = -1;
}
}
}
return posisi;
}
Dari fungsi tersebut dapat diketahui jika program menemukan kunci yang dicari maka fungsi
akan mengembalikan posisi indeks dari kunci tersebut pada array. Sedangkan jika program
tidak menemukan kunci maka program akan mengembalikan nilai -1.
Contoh :
Diketahui array suatu integer terdiri dari 7 elemen sebagai berikut; {1, 0, 3, 2, 5, 7, 9}.
Contoh program untuk mencari angka/kunci 6 pada array tersebut adalah sebagai berikut:
#include <iostream>
using namespace std;
int sequential_search(int data [], int n, int k) {
int posisi, i, ketemu;
if (n <= 0)
posisi = -1;
else {
ketemu = 0;
i = 1;
while ((i < n -1) && ! ketemu) {
if (data [i] == k) {
posisi = i;
ketemu = 1;
} else {
i++;
}
if (!ketemu) {
posisi = -1;
}
}
}
return posisi;
}
int main() {
int n = 7;
int data[] = {1, 0, 3, 2, 5, 7, 9};
int k = 4;
int posisi = sequential_search(data, n, k);
if(posisi != -1) {
cout << "kunci " << k << " ditemukan pada posisi indeks ke-"
<< posisi << endl;
} else {
cout << "kunci " << k << " tidak ditemukan" << endl;
}
return 0;
}

3. Binary Search
Konsep dasar Algoritma Binary Search
• Apabila kumpulan data sudah dalam keadaan terurut, pencarian data dengan
menggunakan pencarian sekuensial akan memakan waktu yang lama jika
jumlah data dalam kumpulan data tersebut sangat banyak.
• Pencarian biner dilakukan dengan membagi larik menjadi dua bagian dengan
jumlah yang sama atau berbeda 1 jika jumlah data semula ganjil
• Data yang dicari kemudian dibandingkan dengan data tengah pada bagian
pertama
• Dalam hal ini akan terjadi 3 kemungkinan yang terjadi :
o Data yang dicari sama dengan elemen tengah pada bagian pertama dalam
larik. Jika kondisi ini terpenuhi, data yang dicari berarti ditemukan.
o Data yang dicari bernilai kurang dari nilai elemen tengah pada bagian
pertama dalam larik. Pada keadaan ini, pencarian diteruskan pada bagian
pertama.
o o Data yang dicari bernilai lebih dari nilai elemen tengah pada bagian
pertama dalam larik. Pada keadaan ini, pencarian diteruskan pada bagian
kedua.
Pseudocode Algoritma Sequential Search:
SUBRUTIN cari_biner (L, n, k)
ada ← SALAH
bawah ← 0
atas ← n – 1
ULANG SELAMA atas ≥ bawah
tengah ← (atas + bawah) / 2 // Pembagi Bulat
JIKA k >L[tengah] MAKA // Data dicari dikanan
bawah ← tengah + 1
SEBALIKNYA
JIKA k >L[tengah] MAKA // Data dicari dikiri
atas = tengah – 1
SEBALIKNYA
ada ← BENAR
posisi ← tengah
bawah ← atas + 1 // Supaya perulangan berakhir
AKHIR-JIKA
AKHIR-JIKA
AKHIR-ULANG
JIKA TIDAK ada MAKA
posisi ← -1
AKHIR-JIKA
NILAI-BALIK posisi
AKHIR-SUBRUTIN

Fungsi Binary Search dalam Bahasa c++


int function_binary_search (int data [], int n, int k) {
int atas, bawah, tengah, posisi;
bool ada;
ada = false;
bawah = 0;
atas = n - 1;
posisi = -1;
while (bawah <= atas) {
tengah = (atas + bawah)/2;
if(k == data[tengah]) {
posisi = tengah;
break;
}
else if(k < data[tengah]) atas = tengah - 1;
else if(k > data[tengah]) bawah = tengah + 1;
}
return posisi;
}

BAB III
LATIHAN & TUGAS
I. LATIHAN
1. Pencarian data numerik bertipe double menggunakan Algoritma
Sequential Serach :
#include <iostream>
using namespace std;
int sequential_search(double data [], int n, double k) {
int posisi, i, ketemu;
if (n <= 0)
posisi = -1;
else {
ketemu = 0;
i = 1;
while ((i < n -1) && ! ketemu) {
if (data [i] == k) {
posisi = i;
ketemu = 1;
} else {
i++;
}

if (!ketemu) {
posisi = -1;
}
}
}
return posisi;
}
int main() {
int n = 7;
double data[] = {1.3, 0.9, 3.2, 2.1, 5.8, 7.7, 9.2};
double k = 0.9;
int posisi = sequential_search(data, n, k);
if(posisi != -1) {
cout << "kunci " << k << " ditemukan pada posisi indeks ke-" <<
posisi << endl;
} else {
cout << "kunci " << k << " tidak ditemukan" << endl;
}
return 0;
}

Output :

2. Pencarian data karakter menggunakan Algoritma Binary Search


#include <iostream>
using namespace std;
void insertion_sort(char arr[], int length) {
int i, j;
char tmp;
for (i = 1; i < length; i++) {
j = i;
while (j > 0 && arr[j - 1] < arr[j]) {
tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
j--;
}//end of while loop
}//end of for loop
}
void print_array(char a[], int length) {
for(int i=0; i<length; i++) {
cout << a[i] << "\t";
}
cout << endl;
}

int main() {
int length = 6;
char a[length] = {'c', 'f', 'a', 'z', 'd', 'p'};
cout << "Urutan karakter sebelum sorting: " << endl;
print_array(a, length);
insertion_sort(a, length);
cout << "\nUrutan karakter setelah sorting: " << endl;
print_array(a, length);
}
Output :
II. TUGAS
1. Pak Polisi memiliki database plat nomor mobil. Terdapat 10 nomor dalam database
tersebut, yaitu sebagai berikut: R 300 SR, R 1234 DJ, R 3218 RR, R 701 LP, R 007
TU, R 3 ST, R 999 RT, R 210 RO, R 1111 II, dan R 4987 LH. Pada suatu hari Pak
Polisi tersebut melihat kendaaraan ber-nomor R 999 RS berada di area dilarang
parkir. Bantulah Pak Polisi tersebut untuk mengecek apakah nomor tersebut terdapat
di dalam database atau tidak! Gunakan Algoritma Sequential Search!
Source Code :

//Tugas 1
//Searching
//Nama : Markus Wahid Sabel Hansen Situmorang
//NIM : 21102133
//Kelas: S1-IF-09-D

//Kepala Program
#include <iostream>
#include <iomanip>
using namespace std;

int Sequential_Search(string array[], int lenght, string key) //deklarasi tipe data
integer sequential search
//didalamnya ada string array, tipe ada integer dan tipe data string key.
{
int posisi, idx, found; //deklarasi posisi, idx, found yang bertipe integer

if (lenght <= 0) //kondisi ketika panjang index kurang dari sama dengan 0
{
posisi = -1; //maka posisi =-1
}

else //ketika kondisi diatas tidak terpenuhi maka


{
found = 0; //tipe data found = 0
idx = 0; //idx 0

while ((idx < lenght) && !found) //perulangan dengan kondisi idx<lenght
dan tidak sama dengan found
{

if (array[idx] == key) //percabangan dimana array[idx] sama dengan key


{

posisi = idx; //maka posisi sama dengan idx dan

found = 1; //found sama dengan 1


}

else
{
idx++;
}

if (!found)
{
posisi = -1;
}
}
}
return posisi; //mengembalikan posisi ke data posisi
}

void print(string array[], int lenght) //mencetak array kelayar


{

for (int idx = 0; idx < lenght; idx++) //perulangan untuk menghitung jumlah
data yang akan ditampilkan
{
cout <<"|" << idx << "| " << array[idx]<< endl; //mencetak jumlah index
dan data
}

cout <<"================================"<<endl;
cout << endl;
}

int main() //program utama


{
int length = 10, keyPosition; //deklarasi tipe data integer
string key = "R 999 RS"; //deklarasi tipe data string yang bertujuan untuk
mencari data nantinya

//deklarasi database dengan tipe data string.


string database[] = {"R 300 SR", "R 1234 DJ", "R 3218 RR", "R 701 LP", "R
007 TU",
"R 3 ST", "R 999 RT", "R 210 RO", "R 1111 II", "R 4987 LH"};

cout<<" ==============================="<<endl;
cout<<"| DATABASE POLISI LALU LINTAS |" << endl;
cout<<" ===============================" << endl;

print(database, length); //mencetak kelayar database dan panjang index

cout << "Mencari..." << endl;


cout <<endl;
cout << "\nHasil : "<<endl;
cout<<endl;

// mencetak paramater sequential_search, database, lenght, key.


keyPosition = Sequential_Search(database, length, key);

if (keyPosition == -1) //kondisi dimana keyPosition samadengan -1 maka


{
cout << "Maaf, Nomor Polisi " << key << " Tidak Ada Di Dalam Database
Sistem!" << endl; //komputer akan mencetak ini kelayar.
}
else //ketika kondisi diatas tidak terpenuhi maka
{
cout << "Nomor Polisi " << key << " Ada Di Dalam Database Sistem!" <<
keyPosition << endl; //komputer akan mencetak ini kelayar
}
return 0;
}

Output :
2. Dalam satu kelas terdapat 13 mahasiswa yang memiliki nim sebagai berikut:
12102001, 12102002, 12102003, 12102004, 12102005, 12102006, 12102007,
12102008, 12102009, 12102010, 12102011, 12102012, dan 12102013. Dengan
menggunakan Algoritma Binary Search, carilah NIM 12102011 apakah berada
di kelas tersebut atau tidak.
Source Code :
//Tugas 2
//Searching
//Nama : Markus Wahid Sabel Hansen Situmorang
//NIM : 21102133
//Kelas: S1IF09-D

//Kepala Program
#include <iostream>
#include <iomanip>
using namespace std;
void f_binary_search (int data[], int key, int length) {
int atas, bawah, tengah, posisi;
bawah = 0;
atas = length - 1;
posisi = -1;
while(bawah <= atas ) {
tengah = (atas + bawah )/2;
if(key == data[tengah]) {
posisi = tengah;
break;
} else if (key < data[tengah]) {
atas = tengah - 1;
} else if (key > data[tengah]) {
bawah = tengah +1;
}
}
if (posisi != -1) {
cout<<endl;
cout <<
"====================================================="
<<endl;
cout << "|NIM [" << key << "] Ditemukan Pada Posisi Indeks Ke = " << posisi
<<"|"<< endl;
cout <<
"====================================================="
<<endl;
} else {
cout << "NIM '" << key << "' Data Tidak Ditemukan " <<
endl;
}
}
void print_array (int arr[], int length) {
for(int i=0; i < length; i++) {
cout << "|" << i << "|\t=> " << arr[i] << endl;
}
cout<<"===============================" << endl;
}
int main() {
system("title BINARY SEARCH");
int length;
int data[] = {12102001, 12102002, 12102003, 12102004,
12102005, 12102006, 12102007, 12102008, 12102009,
12102010, 12102011, 12102012, 12102013};
length = sizeof(data)/sizeof(data[0]);
int key = 12102011 ;
cout<<" ================================"<<endl;
cout<<" | DATA NIM MAHASISWA ITTP |" << endl;
cout<<" ================================" << endl;
cout<<endl;
print_array(data, length);
cout << endl << "DATA YANG ANDA CARI : " <<"["<< key <<"]"<< endl;
cout <<endl;
cout <<"Mencari..."<<endl;
f_binary_search(data, key, length);
return 0;
}

Output :

Penjelasan :
Program ini akan mengecek apakah NIM yang dicari terdapat di dalam database
atau tidak dengan menggunakan Algoritma Binary Search. Tipe data yang
digunakan untuk arraynya adalah integer. Library iostream harus disertakan agar
cout (output) bisa digunakan.
3. Pak Anto membuat program untuk men-generate bilangan acak. Saat program
dijalankan, program memberikan daftar bilangan acak sebagai berikut: 21, 61, 28,
72, 44, 68, 37, 52, 75, dan 75. Bantulah Pak Anto membuat program pencarian untuk
bilangan acak tersebut dengan menggunakan Algoritma Binary Search. Angka yang
dicari adalah 71
Source Code :
//Tugas 3
//Searching
//Nama : Markus Wahid Sabel Hansen Situmorang
//NIM : 21102133
//Kelas: S1IF09-D

//Kepala Program
#include <iostream>
#include <iomanip>
using namespace std;
void selectSort(int data[], int length) {
int pos_min;
float temp;
for (int i=0; i < length-1; i++) {
pos_min = i;
for (int j=i+1; j < length; j++) {
if (data[j] < data[pos_min])
pos_min=j;
}
if (pos_min != i) {
temp = data[i];
data[i] = data[pos_min];
data[pos_min] = temp;
}
}
}
void f_binary_search (int data[], int key, int length) {
int atas, bawah, tengah, posisi;
bawah = 0;
atas = length - 1;
posisi = -1;
while(bawah <= atas ) {
tengah = (atas + bawah )/2;
if(key == data[tengah]) {
posisi = tengah;
break;
} else if (key < data[tengah]) {
atas = tengah - 1;
} else if (key > data[tengah]) {
bawah = tengah +1;
}
}
if (posisi != -1)
{
cout << "Angka [" << key << "] Ditemukan Pada Indeks Ke = " << posisi <<
endl;
}
else
{
cout << "Angka ["<< key << "] Tidak Ada Di Daftar " <<
endl;
}
}
void print_array (int arr[], int length) {
for(int i=0; i < length; i++) {
cout << "[" << i << "]\t=> " << arr[i] << endl;
}
cout<<"===============================" << endl;
}
int main() {
system("title BILANGAN ACAK");
int length;
int data[] = {21, 61, 28, 72, 44, 68, 37, 52, 75, 75};
length = sizeof(data)/sizeof(data[0]);
int key = 71 ;
cout<<" ================================"<<endl;
cout<<" | DAFTAR BILANGAN ACAK |" << endl;
cout<<" ================================" << endl;
cout<<endl;
print_array(data, length);
cout << endl;
cout << endl << "ANGKA YANG DICARI : [" << key <<"]"<< endl;
cout << endl;
cout << "Mencari..."<<endl;
cout << endl;
cout << "Hasil : "; f_binary_search(data, key, length);
return 0;
}

Output :
Penjelasan :
Program ini akan mengurutkan bilangan acak dan mengecek apakah bilangan yang
dicari terdapat di dalam database atau tidak dengan menggunakan Algoritma Binary
Search. Tipe data yang digunakan untuk arraynya adalah integer. Library iostream
harus disertakan agar cout (output) bisa digunakan.
BAB IV
KESIMPULAN
1. Pencarian adalah proses menemukan data tertentu di dalam sekumpulan data yang
bertipe sama (tipe dasar atau tipe bentukan).
2. Salah satu metode yang dapat kita gunakan adalah metode Pencarian Beruntun
(sequential search).
3. Metode pencarian beruntun (sequential search) adalah metode yang paling sederhana
dari sejumlah metode pencarian.
4. Secara singkat Metode pencarian beruntun (sequential search) dapat dijelaskan
sebagai berikut :
Dari elemen-elemen yang di ketahui, data yang dicari di bandingkan satu persatu
sampai data tersebut ditemukan atau tidak di temukan.

Anda mungkin juga menyukai