SEARCHING (PENCARIAN)
Disusun Oleh :
Septian Adi Pratama
150533604474
1. Tujuan
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).
Array
int A[5] = {12, 13, 19, 27, 28}
Misalkan, dari data diatas angka yang akan dicari adalah angka 19 dalam
array A, maka proses yang akan terjadi pada proses pencarian adalah sebagai
berikut.
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 juga akan dilanjutkan pada index selanjutnya.
Pada index ke-2, yaitu angka 19, ternyata angka 19 merupakan angka
yang dicari. Pencarian angka telah ditemukan, maka pencarian akan
dihentikan dan keluar dari looping pencarian.
3. Latihan Praktikum
Percobaan 1
Algoritma dan Struktur Data
Nama Program : Sequential Searching
Syntax :
#include <stdio.h>
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;
return 0;
Tampilan Output :
Algoritma :
1. Mulai
2. Melihat file header
3. Melihat Fungsi
4. Mlihat fungsi cari
5. Mendeklarasi variabel posisi, i, ketemu
6. Menampilkan tampilan eksekusi
7. Selesai
Penjelasan Program :
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 dari situ kita akan melakukan fungsi
cari. Selanjutnya akan kembali ke fungsi cari untuk mencari dan menampilkan hasil yaitu
letak/posisi.
Percobaan 2
Algoritma dan Struktur Data
Nama Program : Binary Searching
Syntax :
#include <stdio.h>
#include <string.h>
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");
dicari = 'n';
printf("\nPosisi %c dalam string %s berada di index ke- [%d]
", dicari, kalimat, poskar(kalimat, dicari));
return 0;
}
Tampilan Output :
Algoritma :
1. Mulai
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. Selesai
Penjelasan Program :
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. Kemudian 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
Percobaan 3
Algoritma dan Struktur Data
Nama Program : Fibonacci Searching
Syntax :
#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<<"\tMetode 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;
}
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\nMasukan data yang ingin dicari : ");
scanf("%d", &N);
Tampilan Output :
Algoritma :
1. Mulai
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. Selesai
Penjelasan Program :
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. Program akan menerima data yang
akan dicari. Setelah itu melakukan pencarian.
Percobaan 4
Algoritma dan Struktur Data
Nama Program : Interpolation Searching
Syntax :
#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 posisi1;
int N = 10, tanda = 0;
low = 0, high = N - 1;
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";
}
}
Tampilan Output :
Algoritma :
1. Mulai
2. Membaca file header
3. Membaca fungsi utama dari program tersebut
4. Deklarasi dan inisialisasi variabel dan array
5. Menampilkan data program
6. Memasukkan data yang akan dicari
7. Melakukan pencarian
8. Menampilkan hasil
9. Selesai
Penjelasan Program :
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.
Tugas Praktikum 1
Algoritma dan Struktur Data
Nama Program : Pencarian bilangan terkanan dalam Array
Syntax :
#include <iostream.h>
#include <stdio.h>
i = 9;
panjang = 10;
while (i>0)
{
if (st[i] ==m)
{
posisi = n;
i=0;
}
n++;
i--;
}
return posisi;
}
int main()
{
int cari [10] = {6,7,3,5,1,7,9,6,5,8};
int dicari;
cout<<"\nMencari Posisi Terkanan Bilangan dalam Array"<<endl;
cout<<"\nData : 6 7 3 5 1 7 9 6 5 8"<<endl;
cout<<"\nMasukan posisi data yang dicari : "; cin>>dicari;
printf ("\nPosisi terkanan bilangan %d berada pada index ke- %d",
dicari, poscar (cari,dicari));
return 0;
}
Tampilan Output :
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
Penjelasan Program :
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
Algoritma dan Struktur Data
Nama Program : Penghitungan jumlah bilangan dalam Array
Syntax :
#include <stdio.h>
int main()
{
int data[10] = {4, 5, 3, 5, 1, 7, 9, 6, 5, 8};
int dicari, jumlah;
printf("\n Menghitung Jumlah Bilangan dalam Array\n");
printf(" Data : 4 5 3 5 1 7 9 6 5 8\n\n");
printf(" Masukkan data yang dicari : ");
scanf("%d",&dicari);
printf(" Jumlah bilangan %d dalam array adalah : %d", dicari,
cari(data, 10, dicari));
}
Tampilan Output :
Algoritma :
1. Mulai
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. Selesai
Penjelasan Program :
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
Algoritma dan Struktur Data
Nama Program : Pengubah karakter dari kecil menjadi Kapital
Syntax :
#include <iostream.h>
#include <conio.h>
int main() {
char data[100] = "Universitas Negeri Malang";
int a=0;
cout << " Mengganti karakter 'a' menjadi 'A'" << endl;
Algoritma :
1. Mulai
2. Membaca file header
3. Membaca fungsi utama dari program
4. Deklarasi dan inisialisasi array dan variabel
5. Menampilkan tampilan awal
6. Melakukan toupper pada a menjadi A
7. Menampilkan hasil
8. Selesai
Penjelasan Program :
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
Algoritma dan Struktur Data
Nama Program : Pencarian Nama
Syntax :
#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\n";
cout << "Daftar nama : ";
for(int i = 0;i < 5;i++) cout << kata[i] << " ";
cout << "\n\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;
}
}
}
Tampilan Output :
Algoritma :
1. Mulai
2. Membaca header program
3. Membaca fungsi utama program
4. Deklarasi array dan variabel
5. Menampilkan tampilan awal dan daftar nama
6. Melakukan pencarian untuk kata ‘ayu’
7. Menampilkan data hasil yang dicari
8. Selesai
Penjelasan Program :
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.
Tugas Rumah
Algoritma dan Struktur Data
Nama Program : Program Kassir Supermarket Idaman Anak Kost
Syntax :
#include <iostream.h>
#include <conio.h>
using namespace std;
void tambah_barang();
void edit_barang();
void delete_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] =
{
{"301", "102", "103", "104", "505"}, //KodeBarang
{"Mie", "Kopi", "Teh", "Susu", "Gelas"}, //NamaBarang
{"3000", "15000", "12000", "16000", "20000"}, //Harga
{"12", "15", "20", "22", "5"}, //Stok
};
int main() {
int masukan;
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) {
cout << "Apakah anda ingin mengulang menginput data (Y /
N) ?";cin >> ulang;
if(ulang == 'Y' || ulang == 'y') {
system("cls");
tambah_barang();
break;
}
else if(ulang == 'N' || ulang == 'n') {
system("cls");
main();
break;
}
else {
continue;
cout << "\n";
}
}
}
void edit_barang() {
system("cls");
char masukan[10];
int no_array=-1;
struct barang brg;
cout << "\t Menu edit barang \n \n";
cout << "Daftar barang : \n";
cout << "+-----+-----------------+--------------------
+-------------+-----------+\n";
cout << "| No | Kode Barang | Nama Barang | Harga
| Stock |\n";
cout << "+-----+-----------------+--------------------
+-------------+-----------+\n";
for(int i = 0;i < jml_brg;i++) {
cout << " " << i+1 << " " << barang[0][i] << " "
<< 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 {
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 delete_barang() {
system("cls");
char masukan[10];
int no_array=-1;
cout << "\t Menu delete barang \n \n";
cout << "Daftar barang : \n";
cout << "+-----+-----------------+--------------------
+-------------+-----------+\n";
cout << "| No | Kode Barang | Nama Barang | Harga
| Stock |\n";
cout << "+-----+-----------------+--------------------
+-------------+-----------+\n";
for(int i = 0;i < jml_brg;i++) {
cout << " " << i+1 << " " << barang[0][i] << " "
<< 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 {
if(no_array == -1) {
cout << "Data tidak ada yang cocok, Tekan keyboard
untuk kembali";
getch();
system("cls");
delete_barang();
}
else {
int coeg = no_array;
cout << " batasan " << jml_brg << " dengan " <<
no_array << endl;
for(int i = jml_brg;i > no_array;i--) {
strcpy(barang[0][coeg], barang[0][coeg+1]);
strcpy(barang[1][coeg], barang[1][coeg+1]);
strcpy(barang[2][coeg], barang[2][coeg+1]);
strcpy(barang[3][coeg], barang[3][coeg+1]);
coeg++;
}
jml_brg--;
cout << "Barang berhasil di delete, Tekan keyboard
untuk kembali ke menu";
getch();
delete_barang();
}
}
}
void melihat_barang() {
system("cls");
cout << "\t Menu lihat barang \n \n";
cout << "Daftar barang : \n";
cout << "+-----+---------------+----------------+-----------------
+-----------+\n";
cout << "| No | Kode Barang | Nama Barang | Harga |
Stock |\n";
cout << "+-----+---------------+----------------+-----------------
+-----------+\n";
for(int i = 0;i < jml_brg;i++) {
cout << " " << i+1 << "\t" << barang[0][i] << "\t\t" << 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();
}
Tampilan Output :
Algoritma :
1. Mulai
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 tidak ingin 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
13. Memasukkan nama barang baru
14. Memasukkan harga barang baru
15. Memasukkan stock barang baru
16. Tekan sambarang pada keyboard untuk kembali ke Manu
17. Jika ingin edit barang lagi, masukkan inputan kode barang
18. Jika ingin kembali ke main menu tekan E
19. Apabila memasukkan inputan 3 maka akan masuk pada Menu delete barang
20. Pada menu ini ini diminta memasukkan inputan kode barang
21. Jika ingin kembali ke main menu tekan E
22. Apabila memasukkan inputan 4 maka akan masuk pada Menu lihat barang
23. Tekan sambarang pada keyboard untuk kembali ke manu
24. Selesai
Penjelasan Program :
Pertama menentukan file header yang akan dibuat yaitu #include <iostream.h> ,
#include <conio.h>. Fungsi dari iostream adalah untuk mendeklarasikan cout dan cin,
Fungsi dari conio.h adalah untuk memdeklarasikan getch. Di program ini, selain
menambahkan dan mengurangi stok barang , juga dapat merubah harga dan menghapus
data serta menampilkan data barang
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.
3. Binary Search data harus diurutkan terlebih dahulu. Algoritma binary search :
a. Data diambil dari posisi 1 sampai posisi akhir N
b. Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
c. 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.
4. Kelibihan utama dari algoritma binary search adalah kompleksitas algoritmanya yang
lebih kecil daripada kompleksitas algoritma sequential search.
5. Interpolation search. Seperti pada binary search, data yang harus diurutkan terlebih
dahulu, sebelum dapat dilakukan pencarian dengan metode ini. Pada metode pencarian
ini, kita mencoba menebak letak data yang kita cari, dengan perhitungan
Jika data[posisi] > data yg dicari, high = pos – 1
Jika data[posisi] < data yg dicari, low = pos + 1
DAFTAR RUJUKAN
1. Tim Asisten Dosen. 2016. Modul 3 Searching (Pencarian). Malang: Unversitas
Negeri Malang.
2. Suprapto. 2008. Bahasa Pemrograman Untuk SMK. Jakarta: Penerbit Departemen
Pendidikan Nasional
3. Kadir, Abdul. 2003. Pemrograman C++. Yogyakarta: Penerbit ANDI.