Laporan Praktikum Resmi Searching
Transcript of Laporan Praktikum Resmi Searching
LAPORAN PRAKTIKUM RESMI
SEARCHING
Disusun oleh :
Albert Sugihartono
201301018
Dosen pengampu :
Yosef Murya Kusuma Ardhana.S.T., M.Kom
JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO
PURWOKERTO 2014
BAB I
TEORI DASAR
1. Pengantar
Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen
kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut.
Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan,
yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful). Menurut
Tenenbaum dan Augenstein, algoritma pencarian yaitu algoritma yang menerima sebuah
argument X dan mencoba untuk menemukan sebuah rekaman yang memiliki kunci X.
Contoh dalam sebuah NIM dapat dicari dengan record yang kemungkinan berisikan nama,
alamat, tempat tanggal lahir dan program studi mahasiswa terkait. Untuk pencarian dapat
dibagi menjadi 2 jenis metode yaitu Pencarian Berurutan (sequential search) dan Pencarian
Biner (binary search).
1. Pencarian Berurutan (sequential search)
Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang
paling sederhana. Pencarian berurutan menggunakan prinsip sebagai berikut : data yang ada
dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut
ditemukan atau tidak ditemukan.
Pada dasarnya, pencarian ini hanya melakukan pengulangan dari 1 sampai dengan jumlah
data. Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari. Apabila sama,
berarti data telah ditemukan. Sebaliknya apabila sampai akhir pengulangan tidak ada data
yang sama, berarti data tidak ada. Pada kasus yang paling buruk, untuk N elemen data harus
dilakukan pencarian sebanyak N kali pula. Maka dari itu rumus : L[i]=k dimana k adalah
data yang dicari dan i adalah bilangan index terkecil yang berkondisikan 0≤ k ≤ n-1.
L = [10, 9, 6, 4, 7, 5, 4, 1]
0 1 2 3 4 5 6 7 Indeks
Misalkan elemen data yang dicari adalah 4 (untuk posisi pertama).
2
Dalam hal ini k = 4 dan k ditemukan diposisi indeks ke 3. Subrutin(perintah) tersebut
merupakan implementasi algoritma secara sekuensial/berurutan, dalam hal ini menghasilkan
nilai balik :
a. -1 jika data yang dicari tidak diketemukan.
b. Bilangan antara 0 hingga n-1 dengan n jumlah elemen larik apabila data yang dicari
ditemukan.
2. Pencarian biner (binary search)
Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam keadaan
urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak
dapat dilakukan. Pencarian biner digunakan untuk kebutuhan pencarian data dalam waktu
yang cepat. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan
pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus. Kita tidak akan
membuka kamus dari halaman awal hingga akhir satu persatu untuk mencari beberapa
arti kata, namun dengan cara membelah atau membagi halaman kamus tersebut. Jika
tidak ditemukan pada halaman tengah tersebut, maka akan dicari pada belahan sebelah
kiri atau kanan hingga ditemukan arti kata yang dicari. Prinsip pencarian biner adalah
pencarian bagi dua.
3. Pencarian pada string
Pencarian pada string yaitu pencarian suatu huruf pada sebuah kalimat. Sebagai contoh
terdapat kalimat “halo stikom yos sudarso”, didalam kalimat tersebut yang dicari adalah
huruf ‘y’. Maka yang akan ditampilkan posisi dari huruf ‘y’ tersebut yaitu di posisi ke 13.
3
BAB IIPENJELASAN PROGRAM
1. Latihan Praktikum
Pada bab latihan praktikum ini membahas tentang listing program yang digunakan pada
praktikum ini yaitu listing program_praktikum_5.1.cpp; program_praktikum5.2.cpp;
program_praktikum_5.3.cpp; dan program praktikum 5.1; 5.2; 5.3 yang masing-masing data
yang dicari oleh input user.
Listing program_praktikum_5.1.cpp /*
* program_praktikum_5.1.cpp *
* Created on: Apr 1, 2014 * Author: ALBERT
*/ #include <iostream>using namespace std;
int cari(int data[],int n,int k){
int posisi, i, ketemu;
if(n<=0)
posisi=-1;else{
ketemu=0;i=1;
while ((1<n-1) && !ketemu)
if(data[i]==k){
posisi=i;
ketemu=i;}else
i++;if(!ketemu)
4
posisi=-1;}return posisi;
}int main()
{int
data[8]={10,9,6,4,7,5,4,1};
int dicari=4;cout<<"Posisi
"<<dicari<<" Ada dalam larik data ke : "<<cari(data,8,dicari)<<"\n";
return 0;
}
Output program_praktikum_3.1.cpp
Hasil output dari program_praktikum_5.1.cpp adalah sebagai berikut :
Penjelasan program_praktikum_5.1.cpp
Berikut penjelasan dari Listing program_praktikum_3.1.cpp :
1. Program pertama kali membuat fungsi yang ditujukan untuk proses pencarian.yaitu
fungsi int cari dengan parameternya yaitu int data, int n dan int k dimana n
mengindikasikan jumlah indeks, dan k adalah data yang dicari.
2. Pada awal fungsi dideklarasikan variable posisi untuk posisi data yang dicari, dan i
sebagai variable untuk indeks terkecil.
5
3. Pada fungsi if pertama dimaksudkan apabila jumlah indeks yang ada yaitu n kurang
dari atau sama dengan 0, maka nilai balik yaitu posisi bernilai -1 jika tidak variable
ketemu bernilai 0.
4. Kemudian i di assignmentkan bernilai 1. Pada bagian ini digunakan fungsi perulangan
while. Pada while, jika kondisi indeks terkecil kurang dari jumlah indeks -1 maka akan
dijalankan fungsi logika yang mana jika data berindekkan i (i = i pada while) dan i
bernilai sama dengan data yang dicari, maka posisi dan ketemu akan diassignmentkan
sama dengan i. Jika tidak, i akan bertambah 1 guna untuk menambah jumlah indeks
sehingga dapat mengakses indeks selanjutnya dan menemukan data yang dicari.
5. Dalam int main, dideklarasikan sebuah data berjumlah 8 indeks dan diassignmentkan
valuenya kemudian dideklarasikan variable dicari untuk data yang dicari
diassignmentkan value 4. Pada cout, dipanggil fungsi dengan menulis nama fungsi yaitu
cari dan diikuti parameternya. Pada bagian parameter ditempatkan variabel yang telah
dideklarasikan sebelumya dan merujuk tepat pada satu domain ke kodomain.
Listing program_praktikum_5.2.cpp
/*
* program_praktikum_5.2.cpp
*
* Created on: Apr 1, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int caribiner(int data[], int n, int k)
{
int ada, atas, bawah, tengah, posisi;
ada=0;
bawah=0;
6
atas=n-1;
while (atas>=bawah)
{
tengah=(atas+bawah)/2;
if(k>data[tengah])
bawah=tengah+1;
else
if(k<data[tengah])
atas=tengah-1;
else
{
ada=1;
posisi=tengah;
bawah=atas+1;
}
}
if(!ada)
posisi=-1;
return posisi;
}
int main() {
int data[]={10,9,7,6,5,4,3,1};
int dicari=6;
cout<<"Posisi "<<dicari<<" dalam larik data : "<<caribiner(data,8,dicari)<<"\n";
return 0;
}
7
Output program_praktikum_5.2.cpp
Penjelasan program_praktikum_5.2.cpp
Berikut penjelasan listing program_praktikum_5.2.cpp :
1. Pertama kali program membuat fungsi untuk pencarian biner dengan nama fungsi
caribiner dan parameternya yaitu data, n, dan k.
2. Dalam fungsi caribiner, dideklarasikan int ada, atas, bawah, tengah, dan posisi. Variable
ada mengindikasikan 1 apabila data diketemukan. Variable atas, bawah dan tengah
mengindikasikan pembagian yaitu prinsip pencarian biner dimana tengah ditentukan
dengan cara kedua belahan (atas dan bawah) digabungkan kemudian dibagi menjadi dua.
3. Pada awal fungsi, variable ada dan bawah diassignmentkan 0 dan variable atas
diassignmentkan n-1. Kemudian dilakukan perulangan while dimana jika jumlah belahan
atas sama atau lebih banyak dengan belahan bawah, maka dicari pada bagian tengah.
Untuk bagian tengah, dilakukan fungsi logika yang mana jika data yang dicari lebih
banyak daripada tengah, maka akan dicari pada belahan atas. Jika kondisi tidak terpenuhi,
berarti data yang dicari diketemukan da nada diassignmentkan 1.
4. Dalam int main, pada cout, dipanggil fungsi dengan menulis nama fungsi pencarian biner
yaitu caribiner dan diikuti parameternya. Pada bagian parameter ditempatkan variabel
yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke kodomain.
8
Listing program_praktikum_5.3.cpp
/*
* program_praktikum_5.3.cpp
*
* Created on: Apr 8, 2014
* Author: ALBERT
*/
#include <iostream>
#include <cstring>
using namespace std;
int string_kar(char st[], int k)
{
int i,posisi,panjang;
i=0;
posisi=-1;
panjang=strlen(st);
while ((i<panjang-1) && posisi==-1)
{
if(st[i]==k)
posisi=i;
i++;
}
return posisi;
}
int main() {
char kalimat[]="Hallo stikom yos sudarso";
char dicari='y';
9
cout<<"Posisi "<<dicari<<" dalam string "<<kalimat<<" : "<<string_kar(kalimat,dicari)<<"\n";
return 0;
}
Output program_praktikum_5.3.cpp
Penjelasan listing program_praktikum_5.3.cpp
Berikut penjelasan listing program dari program_praktikum_5.3.cpp :
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string. Pada program fungsi manipulasi string
adalah strlen yang digunakan untuk mengetahui panjang string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
10
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat bersinggungan dengan data yang dicari.
Listing program_praktikum_cin_5.1.cpp
/*
* program_praktikum_cin_5.1.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int cari(int data[],int n,int k)
{
int posisi, i, ketemu;
if(n<=0)
posisi=-1;
else
{
ketemu=0;
i=1;
while ((1<n-1) && !ketemu)
if(data[i]==k)
{
posisi=i;
11
ketemu=i;
}
else
i++;
if(!ketemu)
posisi=-1;
}
return posisi;
}
int main()
{
int data[8]={10,9,6,4,7,5,4,1};
int dicari;
cout<<"Masukkan angka yang dicari : ";
cin>>dicari;
cout<<"Posisi "<<dicari<<" Ada dalam larik data ke : "<<cari(data,8,dicari)<<"\n";
return 0;
}
Output program_praktikum_cin_5.1.cpp
Penjelasan listing program_praktikum_cin_5.1.cpp
Berikut penjelasan dari listing program_praktikum_cin_5.1.cpp :
12
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi untuk
memunculkan fungsi manipulasi string, dalam hal ini adalah strlen untuk menghitung
panjang string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan indeks,
posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan panjang yang
mengindikasikan panjang karakter dari sebuah string diukur dengan menggunakan fungsi
manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah 0.
Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i sebanyak
1, dapat bersinggungan dengan data yang dicari.
6. Pada program, sebenarnya fungsi beserta isinya berfungsi sama dengan
program_praktikum_5.1.cpp hanya saja program ini menggunakan cin dimana dapat
dilihat di dalam int main yaitu variable dicari dimasukkan ke dalam input stream cin. Hal
ini menjadikan bahwa data yang dicari tidak ditentukan program melainkan di inpukan
oleh user.
Listing program_praktikum__cin_5.2.cpp
/*
* program_praktikum_cin_5.2.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
13
int caribiner(int data[], int n, int k)
{
int ada, atas, bawah, tengah, posisi;
ada=0;
bawah=0;
atas=n-1;
while (atas>=bawah)
{
tengah=(atas+bawah)/2;
if(k>data[tengah])
bawah=tengah+1;
else
if(k<data[tengah])
atas=tengah-1;
else
{
ada=1;
posisi=tengah;
bawah=atas+1;
}
}
if(!ada)
posisi=-1;
return posisi;
}
int main()
{
int data[]={10,9,7,6,5,4,3,1};
int dicari;
cout<<"Masukkan data yang dicari : ";
cin>>dicari;
cout<<"Posisi "<<dicari<<" dalam larik data :
14
"<<caribiner(data,8,dicari)<<"\n";
return 0;
}
Output program_praktikum_cin_5.2.cpp
Penjelasan listing program_praktikum_cin_5.2.cpp
1. Program menggunakan fungsi untuk pencarian biner dengan nama fungsi caribiner
beserta parameternya yaitu data, n, dan k.
2. Dalam fungsi caribiner, didapat pendeklarasian variable int ada, atas, bawah, tengah,
dan posisi. Variable ada mengindikasikan 1 apabila data diketemukan. Variable atas,
bawah dan tengah mengindikasikan pembagian yaitu prinsip pencarian biner dimana
tengah ditentukan dengan cara kedua belahan (atas dan bawah) digabungkan
kemudian dibagi menjadi dua.
3. Pada awal fungsi, variable ada dan bawah diassignmentkan 0 dan variable atas
diassignmentkan n-1. Kemudian dilakukan perulangan while dimana jika jumlah
belahan atas sama atau lebih banyak dengan belahan bawah, maka dicari pada bagian
tengah. Untuk bagian tengah, dilakukan fungsi logika yang mana jika data yang
dicari lebih banyak daripada tengah, maka akan dicari pada belahan atas. Jika kondisi
tidak terpenuhi, berarti data yang dicari diketemukan da nada diassignmentkan 1.
4. Dalam int main, pada cout, dipanggil fungsi dengan menulis nama fungsi pencarian
biner yaitu caribiner dan diikuti parameternya. Pada bagian parameter ditempatkan
variabel yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke
kodomain.
15
5. Pada program didalam int main, variable dicari dimasukkan ke dalam cin dimana
variable dicari merupakan variable digunakan untuk menampung data yang akan
dicari. Dengan memasukkannya kedalam cin, akan menjadikan data yang dicari
bukan ditentukan oleh program melainkan ditentukan oleh user.
Listing program_praktikum_cin_5.3.cpp
/*
* program_praktikum_cin_5.3.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
#include <cstring>
using namespace std;
int string_kar(char st[], int k)
{
int i,posisi,panjang;
i=0;
posisi=-1;
panjang=strlen(st);
while ((i<panjang-1) && posisi==-1)
{
if(st[i]==k)
posisi=i;
i++;
}
return posisi;
16
}
int main() {
char kalimat[]="Hallo stikom yos sudarso";
char dicari;
cout<<"Masukkan huruf yang dicari : ";
cin>>dicari;
cout<<"Posisi "<<dicari<<" dalam string "<<kalimat<<" : "<<string_kar(kalimat,dicari)<<"\n";
return 0;
}
Output program_praktikum_cin_5.3.cpp
Penjelasan listing program_praktikum_cin_5.3.cpp
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
17
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat bersinggungan dengan data yang dicari.
6. Pada program, string yang dijadikan sumber sudah ditentukan di dalam program
yaitu pada saat pendeklarasian variable kalimat : Hallo stikom yos sudarso. Hanya
saja untuk pencarian huruf pada string tersebut diinput oleh pengguna dengan cara
memasukkan variable dicari sebagai wadah karakter yang dicari kedalam input
stream cin.
Tugas Praktikum
Pada tugas praktikum ini akan dijelaskan program praktikum 5.1; 5.2; 5.3 yang masing-
masing program menggunakan fungsi struct, typedef dan gabungan keduanya yaitu typedef
struct.
Listing program_praktikum_struct_5.1.cpp
/*
* program_praktikum_struct_5.1.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int cari(int data[],int n,int k)
{
int posisi, i, ketemu;
if(n<=0)
posisi=-1;
else
18
{
ketemu=0;
i=1;
while ((1<n-1) && !ketemu)
if(data[i]==k)
{
posisi=i;
ketemu=i;
}
else
i++;
if(!ketemu)
posisi=-1;
}
return posisi;
}
struct apa
{
int dicari;
};
struct apa angka;
int main()
{
int data[8]={10,9,6,4,7,5,4,1};
angka.dicari;
cout<<"Masukkan angka yang dicari : ";
cin>>angka.dicari;
cout<<"Posisi "<<angka.dicari<<" Ada dalam larik data ke : "<<cari(data,8,angka.dicari)<<"\n";
return 0;
}
Output program_praktikum_struct_5.1.cpp
19
Penjelasan program_praktikum_struct_5.1.cpp
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string, dalam hal ini adalah strlen untuk
menghitung panjang string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat berpapasan dengan data yang dicari.
6. Pada program digunakan struct dengan nama struct apa. Member struct bertipe
integer yaitu variable dicari dimana variable tersebut digunakan untuk menampung
data yang dicari.
7. Struct “apa” untuk memudahkan penggunaannya dalam int main main, struct apa
digantikan dengan angka dengan cara struct apa angka;. Dalam hal ini, variable
angka variable penghubung untuk menghubungkan variable lain dengan member
struct apa yaitu variable dicari.
20
8. Pada pendeklarasian di dalam int main, struct dihubungkan dengan menggunakan dot
yaitu angka.dicari dan digunakan dalam input user sebagai satu kesatuan variable
baru.
Listing program_praktikum_struct_5.2.cpp
/*
* program_praktikum_struct_5.2.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int caribiner(int data[], int n, int k)
{
int ada, atas, bawah, tengah, posisi;
ada=0;
bawah=0;
atas=n-1;
while (atas>=bawah)
{
tengah=(atas+bawah)/2;
if(k>data[tengah])
bawah=tengah+1;
else
if(k<data[tengah])
atas=tengah-1;
else
21
{
ada=1;
posisi=tengah;
bawah=atas+1;
}
}
if(!ada)
posisi=-1;
return posisi;
}
struct apa
{
int dicari;
};
struct apa angka;
int main()
{
int data[]={10,9,7,6,5,4,3,1};
angka.dicari;
cout<<"Masukkan data yang dicari : ";
cin>>angka.dicari;
cout<<"Posisi "<<angka.dicari<<" dalam larik data : "<<caribiner(data,8,angka.dicari)<<"\n";
return 0;
}
22
Output program_praktikum_struct_5.2.cpp
Penjelasan program_praktikum_struct_5.2.cpp
1. Program menggunakan fungsi untuk pencarian biner dengan nama fungsi caribiner
beserta parameternya yaitu data, n, dan k.
2. Dalam fungsi caribiner, didapat pendeklarasian variable int ada, atas, bawah, tengah,
dan posisi. Variable ada mengindikasikan 1 apabila data diketemukan. Variable atas,
bawah dan tengah mengindikasikan pembagian yaitu prinsip pencarian biner dimana
tengah ditentukan dengan cara kedua belahan (atas dan bawah) digabungkan
kemudian dibagi menjadi dua.
3. Pada awal fungsi, variable ada dan bawah diassignmentkan 0 dan variable atas
diassignmentkan n-1. Kemudian dilakukan perulangan while dimana jika jumlah
belahan atas sama atau lebih banyak dengan belahan bawah, maka dicari pada bagian
tengah. Untuk bagian tengah, dilakukan fungsi logika yang mana jika data yang
dicari lebih banyak daripada tengah, maka akan dicari pada belahan atas. Jika kondisi
tidak terpenuhi, berarti data yang dicari diketemukan da nada diassignmentkan 1.
4. Dalam int main, pada cout, dipanggil fungsi dengan menulis nama fungsi pencarian
biner yaitu caribiner dan diikuti parameternya. Pada bagian parameter ditempatkan
variabel yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke
kodomain.
5. Pada program digunakan struct dimana nama struct adalah apa dengan membernya
yang bertipe integer yaitu variable dicari. Variable dicari di gunakan sebagai variable
penampung value untuk data yang dicari.
6. Nama struct apa diganti dengan variable angka pada struct apa angka; dalam
program. Ini menjadikan angka sebuah penghubung untuk menghubungkan variable
23
lain dengan member dalam struct apa. Dalam int main, dideklarasikan dengan
angka.dicari sehingga menjadikan satu kesatuan variable baru yang digunakan untuk
menampung input user untuk informasi yang dicari.
Listing program_praktikum_struct_5.3.cpp
/*
* program_praktikum_struct_5.3.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
#include <cstring>
using namespace std;
int string_kar(char st[], int k)
{
int i,posisi,panjang;
i=0;
posisi=-1;
panjang=strlen(st);
while ((i<panjang-1) && posisi==-1)
{
if(st[i]==k)
posisi=i;
i++;
}
return posisi;
}
struct apa
{
24
char dicari;
};
struct apa panggil;
int main()
{
char kalimat[]="Stikom Yos Sudarso";
panggil.dicari;
cout<<"Masukkan posisi huruf yang dicari dari Stikom Yos Sudarso : ";
cin>>panggil.dicari;
cout<<"Posisi "<<panggil.dicari<<" dalam string "<<kalimat<<": "<<string_kar(kalimat,panggil.dicari)<<"\n";
return 0;
}
Output program_praktikum_struct_5.3.cpp
Penjelasan listing program_praktikum_struct_5.3.cpp
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
25
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat bersinggungan dengan data yang dicari.
6. Pada program digunakan fungsi struct dengan nama struct yaitu apa. Member struct
adalah variable bertipe character yaitu dicari dimana variable ini difungsikan sebagai
penampung value informasi yang dicari.
7. Apa yang merupakan nama struct diganti dengan variable baru panggil digunakan
sebagai penghubung variable dengan member struct. Hal ini dapat dilihat pada
pendeklarasian variable panggil.dicari di dalam int main yang mana menjadi entity
variabel baru digunakan sebagai cin input user.
Listing program_praktikum_typedef_5.1.cpp
/*
* program_praktikum_typedef_5.1.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int cari(int data[],int n,int k)
{
int posisi, i, ketemu;
if(n<=0)
26
posisi=-1;
else
{
ketemu=0;
i=1;
while ((1<n-1) && !ketemu)
if(data[i]==k)
{
posisi=i;
ketemu=i;
}
else
i++;
if(!ketemu)
posisi=-1;
}
return posisi;
}
typedef int apa;
int main()
{
apa Data[]={10,9,6,4,7,5,4,1};
apa Dicari;
cout<<"Masukkan angka yang dicari : ";
cin>>Dicari;
cout<<"Posisi "<<Dicari<<" Ada dalam larik data ke : "<<cari(Data,8,Dicari)<<"\n";
return 0;
}
27
Output program_praktikum_typedef_5.1.cpp
Penjelasan program_praktikum_typedef_5.1.cpp
1. Program pertama kali membuat fungsi yang ditujukan untuk proses pencarian.yaitu
fungsi int cari dengan parameternya yaitu int data, int n dan int k dimana n
mengindikasikan jumlah indeks, dan k adalah data yang dicari.
2. Pada awal fungsi dideklarasikan variable posisi untuk posisi data yang dicari, dan i
sebagai variable untuk indeks terkecil.
3. Pada fungsi if pertama dimaksudkan apabila jumlah indeks yang ada yaitu n kurang
dari atau sama dengan 0, maka nilai balik yaitu posisi bernilai -1 jika tidak variable
ketemu bernilai 0.
4. Kemudian i di assignmentkan bernilai 1. Pada bagian ini digunakan fungsi
perulangan while. Pada while, jika kondisi indeks terkecil kurang dari jumlah indeks
-1 maka akan dijalankan fungsi logika yang mana jika data berindekkan i (i = i pada
while) dan i bernilai sama dengan data yang dicari, maka posisi dan ketemu akan
diassignmentkan sama dengan i. Jika tidak, i akan bertambah 1 guna untuk
menambah jumlah indeks sehingga dapat mengakses indeks selanjutnya dan
menemukan data yang dicari.
5. Dalam int main, dideklarasikan sebuah data berjumlah 8 indeks dan diassignmentkan
valuenya kemudian dideklarasikan variable dicari untuk data yang dicari
diassignmentkan value 4. Pada cout, dipanggil fungsi dengan menulis nama fungsi
yaitu cari dan diikuti parameternya. Pada bagian parameter ditempatkan variabel
yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke
kodomain.
28
6. Pada program digunakan typedef yang berfungsi sebagai alias. Pada program
pendefinisian ada diluar program yaitu typedef int apa yang nantinya digunakan
sebagai tipe data baru bertipe integer. Cara penggunaannya terlihat di dalam int main
dimana adanya pedefinisian variable Data dan variable Dicari dengan menggunakan
tipe data baru bertipe integer yaitu apa. Variable Data digunakan untuk memberikan
data yang akan dicari dan variable Dicari digunakan untuk menampung value inputan
user yang akan dicari informasinya.
Listing program_praktikum_typedef_5.2.cpp
/*
* program_praktikum_typedef_5.2.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int caribiner(int data[], int n, int k)
{
int ada, atas, bawah, tengah, posisi;
ada=0;
bawah=0;
atas=n-1;
while (atas>=bawah)
{
tengah=(atas+bawah)/2;
if(k>data[tengah])
bawah=tengah+1;
else
if(k<data[tengah])
atas=tengah-1;
29
else
{
ada=1;
posisi=tengah;
bawah=atas+1;
}
}
if(!ada)
posisi=-1;
return posisi;
}
typedef int apa;
int main()
{
apa Data[]={10,9,7,6,5,4,3,1};
apa Dicari;
cout<<"Masukkan data yang dicari : ";
cin>>Dicari;
cout<<"Posisi "<<Dicari<<" dalam larik data : "<<caribiner(Data,8,Dicari)<<"\n";
return 0;
}
Output program_praktikum_typedef_5.2.cpp
Penjelasan program_praktikum_typedef_5.2.cpp
30
1. Pertama kali program membuat fungsi untuk pencarian biner dengan nama fungsi
caribiner dan parameternya yaitu data, n, dan k.
2. Dalam fungsi caribiner, dideklarasikan int ada, atas, bawah, tengah, dan posisi.
Variable ada mengindikasikan 1 apabila data diketemukan. Variable atas, bawah dan
tengah mengindikasikan pembagian yaitu prinsip pencarian biner dimana tengah
ditentukan dengan cara kedua belahan (atas dan bawah) digabungkan kemudian
dibagi menjadi dua.
3. Pada awal fungsi, variable ada dan bawah diassignmentkan 0 dan variable atas
diassignmentkan n-1. Kemudian dilakukan perulangan while dimana jika jumlah
belahan atas sama atau lebih banyak dengan belahan bawah, maka dicari pada bagian
tengah. Untuk bagian tengah, dilakukan fungsi logika yang mana jika data yang
dicari lebih banyak daripada tengah, maka akan dicari pada belahan atas. Jika kondisi
tidak terpenuhi, berarti data yang dicari diketemukan da nada diassignmentkan 1.
4. Dalam int main, pada cout, dipanggil fungsi dengan menulis nama fungsi pencarian
biner yaitu caribiner dan diikuti parameternya. Pada bagian parameter ditempatkan
variabel yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke
kodomain.
5. Dalam program ini digunakan fungsi dari typedef yaitu typedef in tapa yang
menjadikan variable apa merupakan tipe data baru yang sama dengan integer.
6. Di dalam int main, terdapat pendeklarasian variable dengan menggunakan tipe data
baru yaitu apa pada variable Data dan variable Dicari dimana variable dicari
digunakan sebagai penampung value untuk informasi yang dicari yang akan
diinputkan oleh user melalui input stream cin.
Listing program_praktikum_typedef_5.3.cpp
/*
* program_praktikum_typedef_5.3.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
31
#include <iostream>
#include <cstring>
using namespace std;
int string_kar(char st[], int k)
{
int i,posisi,panjang;
i=0;
posisi=-1;
panjang=strlen(st);
while ((i<panjang-1) && posisi==-1)
{
if(st[i]==k)
posisi=i;
i++;
}
return posisi;
}
typedef char setering;
int main()
{
setering Kalimat[]="Stikom Yos Sudarso";
setering Dicari;
cout<<"Masukkan huruf yang ingin dicari posisinya pada Stikom Yos Sudarso : ";
cin>>Dicari;
cout<<"Posisi "<<Dicari<<" dalam string "<<Kalimat<<": "<<string_kar(Kalimat,Dicari)<<"\n";
return 0;
}
32
Output program_praktikum_typedef_5.3.cpp
Penjelasan program_praktikum_typedef_5.3.cpp
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string. Pada program fungsi manipulasi string
adalah strlen yang digunakan untuk mengetahui panjang string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat bersinggungan dengan data yang dicari.
6. Didalam program digunakan fungsi typedef yaitu pendefinisiannya typedef char
setering yang menjadikan variable setering tipe data baru yang sama dengan tipe data
character.
7. Di dalam int main, terdapat pendeklarasian menggunakan tipe data baru setering pada
variable Kalimat dan variable Dicari. Variabel Dicari yang digunakan sebagai
penampung value informasi yang dicari, diinputkan oleh user dengan
memasukkannya ke dalam input stream cin.
33
Listing program_praktikum_typedef_struct_5.1.cpp
/*
* program_praktikum_typedef_struct_5.1.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
using namespace std;
int cari(int data[],int n,int k)
{
int posisi, i, ketemu;
if(n<=0)
posisi=-1;
else
{
ketemu=0;
i=1;
while ((1<n-1) && !ketemu)
if(data[i]==k)
{
posisi=i;
ketemu=i;
}
else
i++;
if(!ketemu)
posisi=-1;
34
}
return posisi;
}
typedef struct apa
{
int dicari;
};
struct apa angka;
int main()
{
int data[8]={10,9,6,4,7,5,4,1};
angka.dicari;
cout<<"Masukkan angka yang dicari : ";
cin>>angka.dicari;
cout<<"Posisi "<<angka.dicari<<" Ada dalam larik data ke : "<<cari(data,8,angka.dicari)<<"\n";
return 0;
}
Output program_praktikum_typedef_struct_5.1.cpp
35
Penjelasan program_praktikum_typedef_struct_5.1.cpp
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string. Pada program fungsi manipulasi string
adalah strlen yang digunakan untuk mengetahui panjang string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat bersinggungan dengan data yang dicari.
6. Untuk program digunakan fungsi gabungan typedef struct dengan nama apa yang
memiliki member int dicari. Untuk memudahkan nama typedef struct apa diganti
dengan variable angka yang menjadikan variable tersebut penghubung variable lain
dengan member pada typedef struct. Penggunaannya terlihat pada int main, yaitu
pendeklarasian variable angka.dicari yang menjadi variable baru untuk value inputan
user.
Listing program_praktikum_typedef_struct_5.2.cpp
/*
* program_praktikum_typedef_struct_5.2.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
36
#include <iostream>
using namespace std;
int caribiner(int data[], int n, int k)
{
int ada, atas, bawah, tengah, posisi;
ada=0;
bawah=0;
atas=n-1;
while (atas>=bawah)
{
tengah=(atas+bawah)/2;
if(k>data[tengah])
bawah=tengah+1;
else
if(k<data[tengah])
atas=tengah-1;
else
{
ada=1;
posisi=tengah;
bawah=atas+1;
}
}
if(!ada)
posisi=-1;
return posisi;
}
typedef struct apa
{
int dicari;
};
37
struct apa angka;
int main()
{
int data[]={10,9,7,6,5,4,3,1};
angka.dicari;
cout<<"Masukkan data yang dicari : ";
cin>>angka.dicari;
cout<<"Posisi "<<angka.dicari<<" dalam larik data : "<<caribiner(data,8,angka.dicari)<<"\n";
return 0;
}
Output program_praktikum_typedef_struct_5.2.cpp
Penjelasan program_praktikum_typedef_struct_5.2.cpp
1. Pertama kali program menjalankan fungsi untuk pencarian biner dengan nama fungsi
caribiner dan parameternya yaitu data, n, dan k.
2. Dalam fungsi caribiner, dideklarasikan int ada, atas, bawah, tengah, dan posisi.
Variable ada mengindikasikan 1 apabila data diketemukan. Variable atas, bawah dan
tengah mengindikasikan pembagian yaitu prinsip pencarian biner dimana tengah
ditentukan dengan cara kedua belahan (atas dan bawah) digabungkan kemudian
dibagi menjadi dua.
3. Pada awal fungsi, variable ada dan bawah diassignmentkan 0 dan variable atas
diassignmentkan n-1. Kemudian dilakukan perulangan while dimana jika jumlah
belahan atas sama atau lebih banyak dengan belahan bawah, maka dicari pada bagian
38
tengah. Untuk bagian tengah, dilakukan fungsi logika yang mana jika data yang
dicari lebih banyak daripada tengah, maka akan dicari pada belahan atas. Jika kondisi
tidak terpenuhi, berarti data yang dicari diketemukan da nada diassignmentkan 1.
4. Dalam int main, pada cout, dipanggil fungsi dengan menulis nama fungsi pencarian
biner yaitu caribiner dan diikuti parameternya. Pada bagian parameter ditempatkan
variabel yang telah dideklarasikan sebelumya dan merujuk tepat pada satu domain ke
kodomain.
5. Program menggunakan fungsi gabungan typedef struct bernama apa dengan
membernya yaitu int dicari. Untuk memudahkan, nama struct apa diganti dengan
variable angka dengan menuliskan struct apa angka; sebagai penghubung variable
lain dengan member typedef struct. Penggunaannya terlihat di dalam int main dimana
pendeklarasian variable baru dihubungkan dengan dot (.) yaitu angka.dicari dimana
digunakan sebagai penampung value inputan user guna mencari informasi.
Listing program_praktikum_typedef_struct_5.3.cpp
/*
* program_praktikum_typedef_struct_5.3.cpp
*
* Created on: Apr 18, 2014
* Author: ALBERT
*/
#include <iostream>
#include <cstring>
using namespace std;
int string_kar(char st[], int k)
{
int i,posisi,panjang;
i=0;
posisi=-1;
panjang=strlen(st);
while ((i<panjang-1) && posisi==-1)
39
{
if(st[i]==k)
posisi=i;
i++;
}
return posisi;
}
typedef struct apa
{
char dicari;
};
struct apa panggil;
int main()
{
char kalimat[]="Stikom Yos Sudarso";
panggil.dicari;
cout<<"Masukkan posisi huruf yang dicari dari Stikom Yos Sudarso : ";
cin>>panggil.dicari;
cout<<"Posisi "<<panggil.dicari<<" dalam string "<<kalimat<<": "<<string_kar(kalimat,panggil.dicari)<<"\n";
return 0;
}
Output program_praktikum_typedef_struct_5.3.cpp
40
Penjelasan program_praktikum_typedef_struct_5.3.cpp
1. Pada program digunakan pengarah preprosessor #include <cstring> yang berfungsi
untuk memunculkan fungsi manipulasi string. Pada program fungsi manipulasi string
adalah strlen yang digunakan untuk mengetahui panjang string.
2. Pada awal program di bentuk sebuah fungsi bernama string_kar diikuti parameternya
yaitu char st[], dan char k dengan k adalah data yang dicari.
3. Dideklarasikan variable di dalam fungsi string_kar yaitu i yang mengindikasikan
indeks, posisi mengindikasikan posisi data yang dicari berdasarkan indeks, dan
panjang yang mengindikasikan panjang karakter dari sebuah string diukur dengan
menggunakan fungsi manipulasi string strlen.
4. Sebelum masuk fungsi perulangan while, i diset 0 dikarenakan indeks terkecil adalah
0. Posisi di set -1 dan panjang diukur dengan menggunakan strlen.
5. Pada while jika i berjumlah kurang dari panjang kurang 1 dan posisi -1 maka akan
dijalankan fungsi if. Panjang harus dikurang 1 agar mengurangi total jumlah karakter
sehingga saat i (indeks) naik dikarenakan fungsi if (setelah while) menambah i
sebanyak 1, dapat bersinggungan dengan data yang dicari.
6. Program menggunakan fungsi typedef struct dengan nama apa beserta membernya
variabel bertipe character yaitu dicari dimana variable ini digunakan untuk
menampung value untuk data yang akan dicari.
7. Untuk memudahkan, nama typedef struct apa diganti dengan variable panggil dengan
menuliskan struct apa panggil; yang digunakan untuk menghubungkan variable lain
dengan member di dalam typedef struct.
8. Di dalam int main, terdapat pendeklarasian sebuah variable baru yaitu panggil.dicari
dimana dicari merupakan variable pada member typedef struct apa dan panggil
menghubungkannya dengan menggunakan tanda dot atau titik. Variable
panggil.dicari merupakan variable baru yang digunakan sebagai penampung value
untuk inputan user terhadap data yang dicari.
41
BAB III
KESIMPULAN
Kesimpulan yang dapat diambil adalah pencarian sekuensial digunakan untuk mencari data pada
sekumpulan data atau rekaman yang masih acak. Pencarian biner digunakan untuk mencari data
pada sekumpulan data atau rekaman yang sudah dalam keadaan terurut. Yang menarik adalah
masing-masing pencarian memanfaatkan akses indeks sebagai record data yang dicari, hanya
saja metode yang digunakan berbeda. Untuk mencari data dalam waktu yang relative cepat,
dapat digunakan pencarian biner sedangkan pencarian sekuensial dilakukan secara bertahap.
Pada kasus struct, typedef dan typedef struct variable hanya dapat dideklarasikan saja tidak
dapat didefinisikan. Hal ini akan menyebabkan error karena tidak diperkenankan untuk
mendefinisikannya didalam fungsi struct, typedef maupun typedef struct. Sebagai gantinya,
pendefinisian dapat dilakukan apabila didalam int main atau diluar fungsi.
42
Sumber Referensi
Ardhana. YM Kusuma. 2013. Struktur Data Dalam Ilustrasi Eclipse Indigo C++
Yogyakarta : CAPS (Center of Academic Publishing Service)
43