SEARCHING
Disusun untuk Memenuhi Matakuliah Praktikum Algoritma dan Struktur Data
Dibimbing oleh Bapak Utomo Pujianto
Oleh :
Anidia Wulan Sari
(150533601651)
(150533600571)
S1 PTI15 OFF A
MODUL III
SEARCHING
1. TUJUAN
1. Mahasiswa dapat melakukan perancangan aplikasi menggunakan struktur
Searching (Pencarian)
2. Mahasiswa mampu melakukan analisis pada algoritma Searching yang dibuat
3. Mahasiswa mampu mengimplementasikan algoritma Searching pada sebuah
aplikasi secara tepat dan efisien
4. Mahasiswa mampu menjelaskan mengenai algoritma Searching.
5. Mahasiswa mampu membuat dan mendeklarasikan struktur algoritma
Searching.
6. Mahasiswa
mampu
menerapkan
dan
mengimplementasikan
algoritma
Searching.
2. DASAR TEORI
1. Linked List
Secara umum search dapat diartikan mencari data dengan cara menelusuri tempat
penyimpanan data tersebut. Tempat penyimpanan data dalam memory dapat berupa array
atau dapat juga dalam bentuk Linked List.
Pencarian dapat dilakukan terhadap data yang secara keseluruhan berada dalam
memory komputer ataupun terhadap data yang berada dalam penyimpanan eksternal (hard
disk).
1.1 Sequential Search
Teknik pencarian data dari array yang paling mudah adalah dengan cara sequential
search, dimana data dalam array dibaca 1 demi satu, diurutkan dari index terkecil ke index
terbesar, maupun sebaliknya.
Array
int A[5] = {12, 13, 19, 27, 28}
pencarian dimulai pada index ke-0 yaitu angka 12, kemudian dicocokan dengan
angka yang akan dicari, jika tidak sama makapencarian akan dilanjutkan ke index
selanjutnya.
Pada index ke-1, yaitu angka 13, juga bukan angka yang dicari, maka pencarian
tengah+1
e) Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi
tengah1
f) Jika data sama, berarti ketemu.
Search juga mengharuskan data yang sudah terurut baik menaik (ascending) maupun
menurun (descending).
1.4 Interpolation Search
Interpolation Search adalah pencarian sebuah elemen dalam array satu dimensi dengan
metode interpolasi atau perkiraan secara interpolasi, dimana data harus diurutkan terlebih
dahulu.
a) Jika data[posisi] > data yg dicari, high = pos 1
b) Jika data[posisi] < data yg dicari, low = pos + 1
3. Latihan Praktikum
Latihan Praktikum 1
Pemrograman C++
Nama Program
: Sequential Search
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <stdio.h>
int cari (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 data[5]={12,13,19,27,28};
int dicari=19;
printf("\tMetode Swquentian Search\n\n");
printf("Data : 12, 13, 19, 27, 28\n\n");
printf("Posisi %d berada pada index ke-:%d\n", dicari, cari(data,
5, dicari));
return 0;
}
Output Program
Algoritma
1. Mulai
2. Melihat file header
3.
4.
5.
6.
7.
Melihat Fungsi
Mlihat fungsi cari
Mendeklarasi variabel posisi, i, ketemu
Menampilkan tampilan eksekusi
Selesai
Deskripsi:
Program di atas merupakan program yang digunakan untuk mencari posisi dari 19
dengan menggunakan metode squentian search. Pertama membuat header yang akan
dipakai diprogram yaitu #include <stdio.h> yang berfungsi sebagai file header untuk
mengaktifkan printf-scanf. Pertama-tama program akan membaca fungsi cari. Kedua
fungsi utama. Lalu kemudian akan melakukan fungsi cari. Selanjutnya akan kembali ke
fungsi cari untuk mencari dan menampilkan hasil dari pencarian yaitu letak/posisi dari 19.
Latihan Praktikum 2
Pemrograman C++
Nama Program
: Binary Search
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <stdio.h>
#include <string.h>
int poskar (char st[], char m){
int i, posisi, panjang;
i=0;
posisi=-1;
panjang=strlen(st);
while((i<panjang-1)&&posisi==-1){
if(st[i]==m)
posisi=i;
i++;
}
return posisi;
}
int main(){
printf("\t Metode Binary Search\n\n");
char kalimat[]="Pendidikan Teknik Informatika";
char dicari='m';
ke-
[%d]
",
dicari,
kalimat,
poskar(kalimat,
dicari));dicari='n';
printf("\nPosisi %c dalam string %s berada pada
index ke- [%d] ", dicari, kalimat, poskar(kalimat, dicari));
return 0;
}
Output Program
Algoritma
1. Start
2. Membaca file header
3. Membaca fungsi program
4. Membaca fungsi poskar
5. Deklarasi variabel int i, posisi, panjang
6. Deklarasi Inisialisasi variabel : i = 0, posisi = -1, panjang = strlen(st)
7. Membaca rumus program
8. Membaca menu utama
9. Menampilkan hasil dari eksekusi program
10. End
Diskripsi
Program di atas merupakan program yang digunakan untuk mencari posisi dari m
dan n dari kalimat Pendidikan teknik Informatika dengan menggunakan metode binary
search. Pertama membuat header yang akan dipakai diprogram yaitu #include <stdio.h>
#include <string.h>. yang fungsi dari header stdio.h adalah untuk printf-scanf. Lalu
string untuk mendeklarasi string. Pertama fungsi poskar untuk menentukan posisi dari
data tersebut. Dari fungsi poskar tersebut akan dilakukan pendeklarasian sebuah variabel.
Setelah itu program akan membaca fungsi utamanya kemudian melaukan deklarasi
variabel dan menggunakan fungsi dari poskar lalu menampilkna hasilnya dari pencarian
letak n dan m dari kalimat pendidikan teknik informatika.
Latihan Praktikum 3
Pemrograman C++
Nama Program
: Fibonacci Search
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
int main() {
int i,j,F0,F1,Fibo,n,m,N,Flag,x;
int FK,FK1,FK2,FK3,s,p,q,t;
int A[10] = {8,15,21,28,31,37,39,46,48,50};
int fibo[8];
cout << "\t Metode FIbonacci Search \n \n";
cout << "Data : ";
for(x=0;x<10;x++) {
cout << A[x] << " ";
n = 9;
F0 = 1;F1 = 1;Fibo=1;
j=1;
}
while(Fibo<=n+1) {
fibo[j] = Fibo;
Fibo = F0+F1;F0=F1;F1=Fibo;
j++;
}
s= j-1;
FK = fibo[s];
FK1 = fibo[s-1];i=FK1;
FK2 = fibo[s-2];p=FK2;
FK3 = fibo[s-3];q=FK3;
m=(n+1)-FK;
printf("\n\nMasukkan data yang ingin dicari : ");
scanf("%d", &N);
if(N > A[i]) i = i+m;
Flag = 0;
while(i!=0 && Flag == 0) {
if(N==A[i]) Flag=1;
else if(N<A[i]) {
if(q==0) i=0;
else {i=i-q;t=p;p=q;q=t-q;}
}
else {
if(p==1) i=0;
else {i=i+q;p=p-q;q=q-p;}
}
}
if(Flag == 1) printf("\n Data ditemukan");
else printf("\nData tidak ditemukan");
}
Output Program
Algoritma
1. Start
2. Membaca file header
3. Membaca fungsi utama
4. Deklarasi dan inisialisasi variabel dan array
5. Menampilkan data dari program
6. Memasukkan data yang akan dicari pada saat eksekusi
7. Melakukan proses pencarian
8. Menampilkan hasil :
9. End
Diskripsi
Program di atas merupakan program yang digunakan untuk mencari data dengan
menggunakan metode fibbonaci search. Jika kita mencari data yang telah tertera pada data
maka hasilnya Data ditemukan dan bila data yang anda cari tidak tertera pada data maka
hasilnya Data tidakditemukan. Pertama menentukan header yang akan dipakai oleh
program tersebut yaitu #include <stdio.h> , #include <conio.h> , #include
<iostream>. Tujuan dari stdio.h adalah untuk printf dan scanf , lalu conio.h untuk
mendeklarasi getch , dan iostream untuk mendeklarasikan cout dan cin. Pertama
program akan membaca fungsi utama dari program tersebut. Lalu, akan melakukan
pendeklarasian variabel.
melakukan pencarian.
Latihan Praktikum 4
Pemrograman C++
Nama Program
: Interpolation Search
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <iostream>
#include <math.h>
using namespace std;
int main(){
int data[10]={9,17,24,25,36,49,52,54,59,60};
int low,high,cari,posisi;
float posisi2;
int n=10,tanda=0;
low=0,high=n-1;
cout<<"\tMetode Interpolation Search\n\n";
cout<<"Data : 9, 17, 24, 25, 36, 49, 52, 54, 59, 60\n";
cout<<"\nMasukkan data yang dicari : ";
cin>>cari;
do{
posisi2=(cari-data[low])/(data[high]data[low])*(high-low)+low;
posisi=floor(posisi2);//pembulatan kebawah!
if(data[posisi]==cari){
tanda=1;
break;
}
if(data[posisi]>cari)
high=posisi-1;
else if(data[posisi]<cari)
low=posisi+1;
}
while (cari>=data[low]&&cari<=data[high]);{
if(tanda==1)
cout<<"\nData ditemukan\n";
else
cout<<"\nData tidak ada\n";
}
}
Output Program
Algoritma
1. Start
2. Membaca file header
3. Membaca fungsi utama dari program tersebut
4. Deklarasi dan inisialisasi variabel dan array
Program di atas merupakan program yang digunakan untuk mencari data dengan
menggunakan metode Interpolation search. Jika kita mencari data yang telah tertera pada
data maka hasilnya Data ditemukan dan bila data yang anda cari tidak tertera pada data
maka hasilnya Data tidakditemukan.
Pertama menentukan header yang kan dibuat yaitu #include <iostream> , #include
<math.h>. Fungsi dari header iostream ini adalah untuk mendeklarasi cout dan cin ,
math.h adalah untuk mendeklarasi bilangan atau angka. Pertama program membaca
fungsi utama. Lalu, akan melakukan deklarasi variabel. Kemudian program menerima
masukan data yang telah dicari. Setelah itu program akan melakukan pencarian.
4. Tugas Praktikum
Tugas Praktikum 1
Pemrograman C++
Nama Program
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <iostream.h>
#include <conio.h>
int main() {
int data[10] = {6,7,3,5,1,7,9,6,5,8};
int masukan;
<<
"Posisi
terkanan
bilangan
"
<<
Output Program
Algoritma
1. Mulai
2. Membaca file header
3. Membaca fungsi utama dari program
4. Deklarasi dan inisialisasi array data
5. Deklarasi variabel masukan
6. Menampilkan data program
7. Memasukkan data yang akan dicari
8. Melakukan proses pencarian tempat data
9. Selesai
Diskripsi
Program di atas merupakan program yang digunakan untuk mencari data yang posisisnya
terkanan dalam array .
Pertama menenntukan header yang kan dibuat yaitu #include <iostream.h> , #include
<conio.h>. Pertama akan membaca fungsi dari program dan melakukan deklarasi variabel
masukan dan deklarasi array data. program akan menampilkan tampilan dan menerima
inputan dari user. Apabila input sesuai dengan datanya maka akan ditampilkan datanya
berada urutan ke berapa dan apabila tidak sesuai, program akan terhenti.
Tugas Praktikum 2
Pemrograman C++
Nama Program
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <iostream.h>
#include <conio.h>
int main() {
int data[10] = {4,5,3,5,1,7,9,6,5,8};
int masukan,m=0;
cout << " Menghitung jumlah bilangan dalam array" <<
endl;
cout << "Data : 4 5 3 5 1 7 9 6 5 8" << endl;
cout << "Masukkan data yang yang dicari : ";cin >>
masukan;
cout << "Jumlah bilangan " << masukan << " adalah : "
<< m;
Output Program
Algoritma
1. Start
2. Membaca file header
3. Membaca fungsi utama dari program
4. Deklarasi dan inisialisasi array dan variabel
5. Menampilkan tampilan awal
6. Memasukkan data yang akan dicari
7. Melakukan proses pencarian data dan jumlah
8. Menampilkan hasil eksekusi
9. End
Diskripsi
Program di atas merupakan program yang digunakan untuk menghitung jumlah bilangan
dalam array.
Pertama menentukan header yang kan dibuat yaitu #include <iostream.h> , #include
<conio.h>. Lalu, membaca fungsi program dan melakukan deklarasi variabel masukan.
Kemudian program akan menampilkan tampilan dan menerima inputan dari user. Terus,
Melakukan pencarian jumlah dari data yang akan dicari. Jika inputan jumlah tersebut
sesuai maka akan menampilkan jumlah sesuai, jika tidak maka jumlah yang ditampilkan =
0.
Tugas Praktikum 3
Pemrograman C++
Nama Program
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <iostream.h>
#include <conio.h>
int main() {
char data[100] = "Universitas Negeri Malang";
int mantan=0;
cout << " Mengganti karakter a menjadi A" << endl;
for(int i = 0;;i++) {
mantan++;
if(data[i] == '\0') {
break;
}
}
for(int i =0;i < mantan;i++) {
if(data[i] == 'a') {
data[i] = 'A';
}
}
cout << data;
}
Output Program
Algoritma
1. Start
2. Membaca file header
3. Membaca fungsi utama dari program
4. Deklarasi dan inisialisasi array dan variabel
Program di atas merupakan program yang digunakan untuk merubah karakter a menjadi
A pada kalimat Universitas Negeri Malang.Pertama menentukan header yang kan
dibuat yaitu #include <iostream.h> , #include <conio.h>. Kemudian membaca fungsi.
Setelah itu program akan mencari karakter a dari array data. Kemudian program akan
mengubah a menjadi huruf kapital A dan menampilkan hasil dalam bentuk kalimat yang
sudah ditentukan tadi.
Tugas Praktikum 4
Pemrograman C++
Nama Program
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <iostream.h>
#include <string.h>
using namespace std;
int main() {
char kata[5][100] = {"ayuningtyas", "ayung", "rahayu",
"bayu", "diah"};
char kunci[] = "ayu";
int exists;
cout << "\t\tProgram Pencarian Nama \n";
cout << "Daftar nama : ";
for(int i = 0;i < 5;i++) cout << kata[i] << " ";
cout << "\n";
cout << "Nama yang mengandung nama 'ayu' adalah : " <<
endl;
for(int i = 0;i < 5;i++) {
exists = strstr(kata[i],kunci)!=NULL;
if(exists == 1) {
cout << kata[i] << endl;
}
}
Output Program
Algoritma
Start
End
Diskripsi
Program di atas merupakan program yang digunakan untuk mencari nama yang
mengandung kata ayu dari data yang disediakan .
Pertama menentukan header yang kan dibuat yaitu #include <iostream.h> ,
#include <conio.h>. yang fungsinya iostream adalah untuk mendeklarasikan cout
dan cin. Lalu, fungsi dari conio.h adalah untuk mendeklarasikan getch. Kemudian
fungsi utama dari program tersebut. Kemudian, program menampilkan data yaitu
data array kata. Kemudian akan mencari kata ayu. Dan menampilkanya pada saat
dieksekusi.
5. Tugas Rumah
Tugas Rumah
Pemrograman C++
Nama Program
: Program Supermarket
Bahasa Pemrogramam
: C++
Compiler
Script program
#include <iostream.h>
#include <conio.h>
using namespace std;
void tambah_barang();
void edit_barang();
void hapus_barang();
void melihat_barang();
struct barang {
char kb[10];
char nb[50];
char h[50];
char s[50];
};
int jml_brg = 5;
char barang[4][50][100] =
{
{"KB101",
"KB102",
"KB103",
"KB104",
"KB105"}, //KodeBarang
{"Kopi Luak", "Kopi Arabik", "Kopi putih", "Kopi
susu", "Kopi hitam"}, //NamaBarang
{"10000",
"15000",
"20000",
"25000",
"100000"}, //Harga
{"44", "32", "66", "23", "1"}, //Stok
};
int main() {
int masukan;
cout << "\tSelamat Datang Di Admin Panel Supermarket A
& D \n\n";
cout << "Main Menu : \n\n";
cout << "+----+------------------------------+\n";
cout << "| NO | Main Menu
|\n";
|\n";
|\n";
|\n";
|\n";
<<
"Masukkan
Nooer
Pilihan
Menu
";cin
masukan;
switch(masukan) {
case 1:
tambah_barang();
break;
case 2:
edit_barang();
break;
case 3:
hapus_barang();
break;
case 4:
melihat_barang();
break;
}
}
void tambah_barang() {
system("cls");
struct barang brg;
char ulang;
cout << "\t Menu Menambah Barang \n \n";
cout << "Masukkan Kode Barang : ";cin >> brg.kb;
cout << "Masukkan Nama Barang : ";cin >> brg.nb;
cout << "Masukkan Harga : ";cin >> brg.h;
cout << "Masukkan Stock : ";cin >> brg.s;
cout << "\n \n";
cout << "Data Yang Anda Inputkan : \n";
cout << "Kode Barang : " << brg.kb << endl;
cout << "Nama Barang : " << brg.nb << endl;
cout << "Harga Barang : " << brg.h << endl;
cout << "Stock Barang : " << brg.s << endl;
jml_brg++;
strcpy(barang[0][jml_brg-1], brg.kb);
strcpy(barang[1][jml_brg-1], brg.nb);
strcpy(barang[2][jml_brg-1], brg.h);
strcpy(barang[3][jml_brg-1], brg.s);
cout << "Data yang anda masukkan sukses \n";
while(1) {
>>
| Stock
| Kode Barang
| Nama Barang
|\n";
" << barang[1][i] << "\t\t" << barang[2][i] << "\t\t" << barang[3]
[i] << endl;
}
cout << "\n \n";
cout << "Masukkan E untuk kembali ke main menu \n";
cout << "\n\n\n";
cout << "Masukkan kode barang : ";
cin >> masukan;
if(strcmp("E", masukan) == 0) {
system("cls");
main();
}
else {
for(int i = 0;i < jml_brg;i++) {
if(strcmp(barang[0][i], masukan)==0) {
no_array = i;
}
}
if(no_array == -1) {
cout << "Data tidak ada yang cocok, Tekan
keyboard untuk kembali";
getch();
system("cls");
edit_barang();
}
else {
system("cls");
cout << "\n";
cout << "Data yang diedit : " << barang[0]
[no_array] << endl << endl;
cout << "Kode Barang (Data lama : " <<
barang[0][no_array] << ") : ";cin >> brg.kb;
cout << "Nama Barang (Data lama : " <<
barang[1][no_array] << ") : ";cin >> brg.nb;
cout << "Harga Barang (Data lama : " <<
barang[2][no_array] << ") : ";cin >> brg.h;
cout << "Stock Barang (Data lama : " <<
barang[3][no_array] << ") : ";cin >> brg.s;
strcpy(barang[0][no_array], brg.kb);
strcpy(barang[1][no_array], brg.nb);
strcpy(barang[2][no_array], brg.h);
strcpy(barang[3][no_array], brg.s);
cout << "Barang " << brg.nb << " berhasil
di update, Tekan keyboard untuk kembali ke menu";
getch();
edit_barang();
}
}
}
void hapus_barang() {
system("cls");
char masukan[10];
int no_array=-1;
struct barang brg;
cout << "\t Menu delete barang \n \n";
cout << "Daftar barang : \n";
cout << "+-----+-----------------+-------------------+-------------+-----------+\n";
cout << "| No
Harga
| Stock
| Kode Barang
| Nama Barang
|\n";
" << barang[1][i] << "\t\t" << barang[2][i] << "\t\t" << barang[3]
[i] << endl;
}
cout << "\n \n";
cout << "Masukkan E untuk kembali ke main menu \n";
cout << "\n\n\n";
cout << "Masukkan kode barang : ";cin >> masukan;
if(strcmp("E", masukan) == 0) {
system("cls");
main();
}
else {
for(int i = 0;i < jml_brg;i++) {
if(strcmp(barang[0][i], masukan)==0) {
no_array = i;
}
}
if(no_array == -1) {
cout << "Data Tidak Ada Yang Cocok, Tekan
Keyboard Untuk Kembali";
getch();
system("cls");
hapus_barang();
}
else {
int dta = no_array;
cout << " Batasan " << jml_brg << " Dengan
" << no_array << endl;
for(int i = jml_brg;i > no_array;i--) {
strcpy(barang[0][dta],
barang[0]
strcpy(barang[1][dta],
barang[1]
strcpy(barang[2][dta],
barang[2]
strcpy(barang[3][dta],
barang[3]
[dta+1]);
[dta+1]);
[dta+1]);
[dta+1]);
dta++;
}
jml_brg--;
cout
<<
"Barang
Berhasil
Dihapus,
Tekan
| Stock
| Kode Barang
| Nama Barang
|\n";
" << barang[1][i] << "\t\t" << barang[2][i] << "\t\t" << barang[3]
[i] << endl;
}
cout << "\n";
cout << "Tekan Keyboard Untuk Kembali Ke Main Menu \n";
getch();
system("cls");
main();
Output Program
Kemudian > misalnya kita pilih no. 4 untuk melihat data barang yang sudah diisikan.
Algoritma
1. Start
2. Menampilkan fungsi menu utama
3. Inputkan angka 1 maka akan keluar menu Menambah Barang pada program saat
Dieksekusi
4. Pada menu ini diminta inputan kode barang
5. Inputan nama barang
6. Inputan harga barang
7. Inputan stock barang
8. Jika ingin mengulang untuk menginput data lagi tekan Y
9. Jika ingin tidak mengulang untuk menginput data tekan N
10. masukkan inputan 2 maka akan muncul Menu Edit barang
11. Pada menu ini diminta memasukkan inputan kode barang
12. Memasukkan kode barang baru
KESIMPULAN
1. Sequential Search adalah teknik pencarian data dimana data dicari secara urut
dari depan ke belakang atau dari awal sampai akhir.
2. Tempat penyimpanan data dalam memory dapat berupa array atau dapat juga
dalam bentuk Linked List.
DAFTAR RUJUKAN
1. Tim Asisten Dosen. 2016. Modul III, Searching. Malang: Unversitas Negeri
Malang.