Halaman

Halaman

Minggu, 27 Mei 2018

Searching Pada Bahasa C++

Searching Pada Bahasa C++

Pengertian Searching

Searching adalah mencari data yang dibutuhkan. Searching dalam pemrograman bisa dilakukan untuk mencari data yang ada di dalam memory komputer.Dalam kehidupan sehari-hari kita juga sering melakukan kegiatan searching seperti mencari data/informasi yang ada dalam internet. Ada beberapa metode yang dapat digunakan untuk searching, ada yang dinamakan:
  1.  Sequential Search
  2.  Binary Search

Sequential Search

Sequential Search merupakan metode pencarian data dalam array dengan cara membandingkan data yang dicari dengan data yang ada di dalam array secara berurutan. Pencarian data dengan Metode Sequential Search efektif untuk mencari data yang dalam posisi yang tidak terurut atau acak.

Algoritmanya dijelaskan seperti berikut:
  1. Menentukan data yang dicari
  2. Membaca data array satu per satu secara sekuensial
  3. Mulai dari data pertama sampai dengan data terakhir, kemudian data yang dicari tadi dibandingkan dengan masing-masing data yang ada di dalam array.
    a. Jika data yang dicari ditemukan maka kita dapat membuat statement bahwa data telah temukan.
    b. Jika data yang dicari tidak ditemukan maka kita dapat membuat statement bahwa data telah temukan.
 Ilustrasi:
Ilustrasi Sequential Search








data yang dicari yaitu 7 disimpan di variabel x, kemudian akan dibanding satu per satu secara sekuensial terhadap data yang ada dalam array. Jika ditemukan data di dalam array yang sama dengan data yang dicari artinya data ditemukan.

Sequential Searching memiliki Kelebihan dan Kekurangan yaitu:
  • Kelebihan Sequential Searching bisa dikatakan lebih mudah dalam implementasinya dalam pemrograman.
  • Kekurangannya jika data yang terdapat dalam suatu array itu sangat banyak, maka akan diperlukan waktu yang lebih lama untuk membandingkan data yang dicari dengan jumlah data yang sangat banyak dalam suatu array.

Contoh Program 

a. Pseudocode Program
#include <iostream>
#include <conio.h>
using namespace std;

int main()

{
    cout<<"==============================================="<<endl;
    cout<<"=========PROGRAM PENCARIAN DATA ARRAY============"<<endl;
    cout<<"======DENGAN TEKNIK SEQUENTIAL SEARCHING========="<<endl;
    cout<<"==========================================="<<endl<<endl;

    int n,bil_cari,Data[10];

    int i,ketemu;
    cout<<" Inputan Jumlah Data Dalam Array : "; cin>>n;
    cout<<endl;
    for(int c=0; c<n; c++)
    {
        cout<<" Elemen Data Array Ke - "<<c<<" = "; cin>>Data[c];
    }
    i=0;
    
    cout<<" \n\n Inputkan Bilangan Yang Dicari = "; cin>>bil_cari;
    ketemu = 0;

while((i<10) && (ketemu==0))

{
    if(Data[i] == bil_cari)
    {
    ketemu=1;
    cout<<" \n Pencarian sequential "<<bil_cari<<" Ada Pada Indeks ke - " <<i;
    }
    else
    i=i+1;
}
if(ketemu == 1)
cout<<"\n Adalah Data Yang Anda Cari "<<endl;
else
cout<<"\n Data Tidak Ditemukan"<<endl;

}

b. Output Program





















Binarry Search


Binary search adalah metode pencarian suatu data atau elemen di dalam suatu array dengan kondisi data dalam keadaan terurut. Proses pencarian binary search hanya dapat dilakukan pada sekumpulan data yang sudah diurutkan terlebih dahulu. 

Prinsip dari binary search terhadap N elemen dapat dijelaskan seperti berikut:
  • Tentukan posisi awal = 0 dan posisi akhir = N-1.
  • Hitung posisi tengah = (posisi awal + posisi akhir)/2
  • Bandingkan data yang dicari dengan elemen posisi tengah.
  1. Jika sama maka catat posisi dan cetak kemudian berhenti.
  2. Jika lebih besar maka akan dilakukan pencarian kembali kebagian kanan dengan posisi awal  = posisi tengah +1 dan posisi akhir tetap kemudian ulangi mulai poin 2.
  3. Jika lebih kecil maka akan di lakukan pencarian kembali ke bagian kiri dengan nilai posisi awal tetap dan nilai posisi akhir  = posisi tengah-1 kemudian ulangi mulai poin 2.

Misalkan kita mempunyai sederatan data dalam array nilai sebanyak 10 elemen dan akan dilakukan pencarian data 87 terhadap array.

  • Nilai[0..9] = 12,45,23,87,90,55,15,25,40,21
  • Urutkan elemen array secara menaik, sehingga diperoleh:
  • Nilai[0..9] = 12,15,21,23,25,40,45,55,87,90
  • Data yang akan dicari = 87(bilangan)
  • Tentukan nilai awal = 0, akhir = N-1=9
  • Hitung tengah = (9+0)/2=4
  • Bandingkan Bilangan < Nilai[tengah]->87=25->false
  • Bandingkan Bilangan < Nilai[tengah]->87<25->false
  • Bandingkan Bilangan < Nilai[tengah]->87>25->true maka pencarian dilakukan ke sebelah kanan dengan nilai awal = tengah+1 = 5
  • Karena awal masih lebih kecil dari akhir maka ulangi kembali mulai menghitung tengah
  • Hitung tengah = (9+5)/2=7
  • Bandingkan Bilangan  < Nilai[tengah] ->87=55->false
  • Bandingkan Bilangan < Nilai[Tengah]->87<55->false
  • Bandingkan Bilangan < Nilai[tengah]->87>55->true maka pencarian dilakukan ke sebelah kanan dengan nilai awal = tengah+1 = 8
  • Karena awal masih lebih kecil dari akhir maka ulangi kembali mulai menghitung tengah
  • Hitung tengah = (9+8)/2 = 8
  • Bandingkan Bilangan < Nilai[tengah]->87=87->true
  • Karena sudah di tentukan hasilnya maka proses pencarian berhenti.

Contoh Program 

a. Pseudocode Program

#include <iostream>
#include <conio.h>
#include <iomanip>

using namespace std;

int main()
{
    //Pendeklarassian variabel
    int nilai[20];
    int i,j,n;
    int temp, awal, akhir, tengah, bilangan;

    //Proses penginputan data
    cout<<"Masukkan Banyak Data/n : ";
    cin>>n;
    for(i=0;i<n;i++)
    {
        cout<<"\nMasukkan Nilai Elemen ke-"<<i<<" = ";
        cin>>nilai[i];
    }
    cout<<"\n\nBerikut Adalah Nilai Elemen Sebelum diurutksn  \t= ";
    for(i=0;i<n;i++)
    {
        cout<<setw(3)<<nilai[i];
    }

    //Proses pengurutan data
    for(i=0;i<n-1;i++)
    {
        for(j=i+1;j<n;j++)
        {
            if(nilai[i]>nilai[j])
            {
                temp = nilai[i];
                nilai[i]=nilai[j];
                nilai[j]=temp;
            }
        }
    }

    cout<<"\n\nBerikut Adalah Nilai Elemen Setelah dirutkan \t= ";
    for(i=0;i<n;i++)
    {
        cout<<setw(3)<<nilai[i];
    }

    cout<<"\n\nIndeks Elemen           \t\t\t= ";
    for(i=0;i<n;i++)
    {
        cout<<setw(3)<<i;
    }

    cout<<"\n\nMasukan data Yang Akan Anda Cari : ";
    cin>>bilangan;

    //Proses pencarian data
    awal = 0;
    akhir =n-1;

    do
    {
        tengah = (akhir+awal)/2;
        if(bilangan < nilai[tengah])
        {
            akhir = tengah -1;
        }
        else
        {
            awal = tengah +1;
        }
    }

    while((akhir>=awal)&&(nilai[tengah] !=bilangan));
    {
        if (nilai[tengah]==bilangan)
        {
            cout<<"\nData "<<bilangan<<" Ada dalam Array";
            cout<<"Pada posisi "<<tengah;
        }
        else
        {
            cout<<"\nData "<<bilangan<<" tidak ada dalam array\n";
        }
    }

    getch();
    return 0;

}


b. Output Program


Minggu, 13 Mei 2018

Stack


Stack dapat diartikan sebagai tumpukan dari benda atau data yang seolah-olah diletakkan di atas data yang lain dimana data yang pertama kali masuk akan terakhir. Secara sederhana sebuah stack bisa digambarkan sebagai tumpukan buku yang disimpan dengan cara ditumpuk keatas. Dimana buku yang pertama kali disimpan atau ditumpuk ada di paling bawah dan yang selanjutnya ditumpuk diatasnya. Dan ketika kita melakukan pengambilan buku ototmatis buku yang terkahir ditumpuk atau disimpan terakhir akan mejadi yang pertama diambil, istilah ini kemudian disebut FILO (First In Last Out) dan bertambah atau berkurangnya data melalui satu ujung yang sama yaitu ujung atas tumpukan (Top of Stack). 


Ada 2 operasi dasar dari stack yang dapat dilakukan, yaitu : 

  1. Operasi push yaitu operasi menambahkan elemen pada urutan terakhir (paling atas).
  2. Operasi pop yaitu operasi mengambil sebuah elemen data pada urutan terakhir dan menghapus elemen tersebut dari stack.
Selain operasi dasar stack (push dan pop), ada lagi operasi lain yang dapat terjadi dalam stack yaitu : 
  1. Proses deklarasi yaitu proses pendeklarasian stack.
  2. Proses inisialisasi yaitu proses pembuatan stack kosong, biasanya dengan pemberian nilai untuk top.
  3. Proses cek kosong yaitu proses pemeriksaan apakah stack dalam keadaan kosong.
  4. Proses cek penuh yaitu proses pemeriksaan apakah stack telah penuh.


Operasi-operasi stack secara lengkap adalah sebagai berikut : 
Pendeklarasian stack dengan array 
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori. Karena stack dapat direpresentasikan dalam 2 cara, maka pendeklarasian stack pun ada 2 yaitu: 
Suatu stack memiliki beberapa bagian yaitu 

  1. top yang menunjuk posisi data terakhir (top)
  2. elemen yang berisi data yang ada dalam stack. Bagian ini lah yang berbentuk array. Deklarasi stack dengan array:

struct stack 
int elemen[10]; //elemen int top; 
}; 
Inisialisasi 
Inisialisasi stack adalah proses pembuatan suatu stack kosong. Proses inisialisasi untuk stack yang menggunakan array adalah dengan mengisi nilai field top dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan 0 maka top diisi dengan nilai -1. 
p->top=-1 
Operasi Cek Kosong Stack 
Operasi ini digunakan untuk memeriksa apakah stack dalam keadaan kosong. Operasi ini penting dilakukan dalam proses pop. Ketika suatu stack dalam keadaan kosong, maka proses 
pop tidak bisa dilakukan. Operasi ini dilakukan hanya dengan memeriksa field top. Jika top top bernilai -1, maka berarti stack dalam keadaan empty (kosong). 
if (p->top==-1) 
cout<<"STACK kosong";
return -1; 
Operasi Cek Penuh 
Operasi ini berguna untuk memeriksa keadaan stack apakah sudah penuh atau belum. Operasi ini akan memberikan nilai true (1) jika field top sama dengan size-1. 
if(p->top==size-1)
cout<<"STACK penuh "; 
Operasi Push
Operasi ini berguna untuk menambah suatu elemen data baru pada stack dan disimpan pada posisi top yang akan mengakibatkan posisi top akan berubah. Langkah operasi ini adalah :

  • Periksa apakah stack penuh. Jika tidak penuh maka proses push dilaksanakan dan jika stack penuh, maka proses push digagalkan.
  • Proses push-nya sendiri adalah dengan menambah field top dengan 1, kemudian elemen pada posisi top diisi dengan elemen data baru. if(p->top==size-1)
    cout<<"STACK penuh ";
    else
    p->elemen[++p->top]=value;

Operasi Pop
Operasi ini berguna untuk mengambil elemen terakhir (top) dan kemudian menghapus elemen tersebut sehingga posisi top akan berpindah. Langkah operasi pop pada stack yang menggunakan array adalah terlebih dahulu memeriksa apakah stack sedang keadaan kosong, jika tidak kosong maka data diambil pada posisi yang ditunjuk oleh posisi top, kemudian posisi top – 1. 
if (p->top==-1)
{
   cout<<"STACK kosong";
   return -1;
}
else
    return p->elemen[p->top--]; 
Program Lengkap: 

#include<iostream.h>
#include<stdio.h>
#define size 50
#include<conio.h> struct stack {
typedef struct stack STACK;
int elemen[size]; int top; }; // operasi push
cout<<"STACK penuh ";
void push(STACK *p,int value){ if(p->top==size-1) else
if (p->top==-1)
p->elemen[++p->top]=value; } //operasi pop int pop(STACK *p) { {
//menampilkan stack
cout<<"STACK kosong"; return -1; } else return p->elemen[p->top--]; }
cout<<"\nIsi STACK adalah : \n";
void display (STACK *p) { int i; if(p->top==-1) cout<<"\n STACK kosong\n"; else
s.top=-1;
for (i=p->top;i>=0; --i) cout<<p->elemen[i]<<"\n"; } void main() { STACK s ; int x,c,i; do {
cout<<"3: Tampilkan Stack\n";
cout<<"MENU PILIHAN"; cout<<"\n1: Operasi PUSH\n"; cout<<"2: Operasi POP\n"; cout<<"4: Hapus Stasck\n";
case 1: cout<<"\nMasukkan Elemen Stack: ";cin>>x;
cout<<"5: Keluar\n"; cout<<"\n\n Pilihan anda : ";cin>>c; switch(c) { push (&s,x); display(&s);
break;
break; case 2: x=pop(&s); if(x!=-1) cout<<"\nMenghapus Element = "<<x; break; case 3: display(&s); case 4:
for (i=s.top;i>=0; --i)
if(s.top==-1) cout<<endl<<"STACK kosong"; else cout<<endl<<"STACK dihapus"<<endl; //Menghapus STACK
}
cout<<"Elemen yang dihapus adalah : "<<pop(&s)<<endl; s.top=-1; } getch(); clrscr(); }
while(c!=5);
CONTOH PROGRAM
a. Source Code Program
#include<iostream> #include<stdlib.h> #include<cstring> #include<windows.h> #define max 20 using namespace std; struct tong { int top; char tmp[20][max]; } tong; void push (char sampah[20]); void pop(); void awal(); int isEmpty(); int isFull(); int main() { int pilih; char sampah[20]; string i; awal(); do { system("cls"); cout<<"\n\t--------- Program Stack --------\n"; cout<<"\n\t----- Tumpukan Tong Sampah -----\n\n"; cout<<" 1. PUSH(Simpan)"<<endl; cout<<" 2. POP(Ambil)"<<endl; cout<<" 3. EXIT(Keluar)"<<endl; cout<<"___________________________________________________________________\n\n"; if (!isEmpty()) { for(int i = tong.top; i>=0; i--) { cout<<"["<<tong.tmp[i]<<"]"<<endl; } } else { cout<<"[ tong sampah kosong ]"; } cout<<"\nMasukan Pilihan : "; cin>>pilih; switch (pilih) { case 1: cout<<"Buang sampah : "; cin>>sampah; push(sampah); break; case 2: pop (); break; case 3: cout<<"Tekan enter untuk keluar : "; break; default: cout<<"ERROR!"; break; } } while (pilih!=3); } void push (char sampah[20]) { if (!isFull()) { tong.top = tong.top+1; strcpy(tong.tmp[tong.top],sampah); } else cout<<"isi tong sampah penuh"; } void pop () { if (!isEmpty()) { tong.top--; cout<<"Sampah pada tumpukan ke- "<<tong.top+2<<"sudah diambil"; } else cout<<"Sampah dalam tong kosong"; } void awal() { tong.top = -1; } int isEmpty() { if (tong.top==-1) return 1; else return 0; } int isFull() { if (tong.top == max-1) return 1; else return 0; }
b. Output Program

Struck

Struct atau record adalah kumpulan data yang memiliki tipe data yang berbeda. Secara pendeklarasian, struct sangat berbeda dengan array yang hanya memiliki satu buah tipe data untuk setiap kumpulannya. Struct digunakan apabila data yang ingin dikelompokkan memiliki tipe data yang berbeda. Pendeklarasian struct sebagai berikut:
stuct data_mahasiswa
{

   long int nim;
   char nama[100];
   char fakultas[100];
};

data_mahasiswa mahasiswa1, mahasiswa2;
Deklarasi di atas merupakan suatu tipe data yang bernama data_mahasiswa di mana setiap data yang akan dideklarasikan menggunakan tipe data data_mahasiswa akan mempunyai field nim, nama, dan fakultas. Untuk dapat menggunakan tipe data tersebut sebuah variabel harus dideklarasikan menggunakan nama struct nya. Bentuk umum pendeklarasian variabel struct nya adalah sebagai berikut:
struct data_mahasiswa mahasiswa1, mahasiswa2;
Deklarasi dua variabel di atas ada dua variabel bernama Mahasiswa1 dan Mahasiswa2 setiap variabel tersebut mempunyai field sesuai dengan data_mahasiswa.
Selain dekalrasi variabel ada hal yang harus diperhatikan yaitu cara untuk mengisi dan memanggil nilai yang ada di dalam sebuah struct, yaitu sebagai berikut:
//Untuk mengisi nilai struct
cin>>mahasiswa1.nim;

//Untuk memanggil nilai struct
cout<<mahasiswa1.nim<<endl;
CONTOH PROGRAM
a. Source Code Program
#include<iostream>
using namespace std;
main()
{
 struct Mahasiswa
 {
   int Nim;
   char Nama[30];
   char Almt[50];
   char Kelas[6];
   };

 Mahasiswa Mhs;
 cout<<"Program Data Mahasiswa "<<endl;
 cout<<"\nMasukan Data Anda "<<endl;
 cout<<"Masukan NPM    \t: ";cin>>Mhs.Nim;
 cout<<endl<<"Masukan Kelas \t: ";cin>>Mhs.Kelas;
 cout<<endl<<"Masukan Nama   \t: ";cin>>Mhs.Nama;
 cout<<endl<<"Masukan Alamat \t: ";cin>>Mhs.Almt;

 cout<<endl<<endl<<"Data Anda"<<endl;
 cout<<"NPM    \t: "<<Mhs.Nim<<endl;
 cout<<"KELAS \t: "<<Mhs.Kelas<<endl;
 cout<<"NAMA   \t: "<<Mhs.Nama<<endl;
 cout<<"ALAMAT \t: "<<Mhs.Almt<<endl;
return 0;
}

b. Output Program


Looping Dalam C


Pada Bahasa C terdapat 3 buah struktur loop. Pernyataan yang dipakai berupa while,do-while, dan for. Berhubungan dengan penanganan loop ada beberapa pernyataan lain yang berfungsi untuk keluar dari loop yaitu break, goto, dan continue.

do-while
Tahapan Proses :
Mula-mula pernyataan dijalankan dulu, kemudian kondisi di uji, jika kondisi bernilai benar, maka pernyataan dijalankan lagi dan jika kondisi bernilai salah maka prnyataan tidak dijalankan lagi (berhenti)

While
Tahapan proses :
Dari awal langsung dilakukan tes kondisi jika kondisi bernilai benar maka menjalankan pernyataan dan jika kondisi bernilai salah maka keluar dari loop. Jadi pada perulangan menggunakan while memungkinkan sebuah pernyataan tidak dijalankan sama sekali.
Yang membedakan antara perulangan menggunakan do-while dan while, biasanya adalah pada pernyataan while harus diberikan terlebih dahulu inisialisasi terhadap variabel yang akan dijadikan sebagai kondisi dari while.

Pernyataan for
Tahapan proses :
Pernyataan akan dijalankan mulai dari nilai awal (ungkapan1) dan keluar dari
50
 loop jika sudah sesuai dengan nilai akhir (ungkapan2).
Sintaks :
For (ungkapan1; ungkapan2; ungkapan3)
Pernyataan
Ø  Ungkapan1® digunakan untuk memberikan inialisasi terhadap variabel pengendali loop.
Ø  Ungkapan2® digunakan sebagai kondisi untuk keluar dari loop.
Ø  Ungkapan3® digunakan sebagai pengatur kenaikan nilai variabel pengendali loop.

Dasar Teori

 Pernyataan for
            Mengulang suatu proses merupakan tindakan yang banyak dijumpai dalam pemrograman. Pada semua bahasa pemrograman, pengulangan proses ditangani dengan suatu mekanisme yang disebut loop. Dengan menggunakan loop, suatu proses yang berulang misalnya menampilkan tulisan yang sama seratus kali pada layar dapat diimpelementasikan dengan kode program yang pendek.
            Pernyataan pertama yang digunakan untuk keperluan pengulangan proses adalah pernyataan for. Bentuk pernyataan ini :
for (ungkapan1; ungkapan2; ungkapan3) pernyataan;

Kegunaan dari masing-masing ungkapan pada pernyataan for.
·         Ungkapan1  :    digunakan untuk memberikan inisialisasi terhadap variabel pengendali loop.
·         Ungkapan2  :    dipakai sebagai kondisi untuk keluar dari loop.
·         Ungkapan3  :    dipakai sebagai pengatur kenaikan nilai variabel pengendaliloop.
Ketiga ungkapan dalam for tersebut harus dipisahkan dengan tanda titik koma (;).  Dalam hal ini pernyatan bisa berupa pernyataan tunggal berbentuk jamak, maka pernyataan-pernyataan tersebut harus diletakkan di antara kurung kurawal buka ({)
51
dan kurung kurawal tutup (}), sehingga formatnya menjadi :
for (ungkapan1; ungkapan2; ungkapan3)
{
   pernyataan;
   pernyataan;

}

Pernyataan while
Pada pernyataan while, pengecekan terhadap loop dilakukan di bagian awal (sebelum tubuh loop).  Lebih jelasnya, bentuk pernyataan while adalah sebagai berikut :
while (kondisi)
pernyataan;

dengan pernyataan dapat berupa pernyataan tunggal, pernyataan majemuk ataupun pernyataan kosong. 

Pernyataan do-while
Bentuk pernyataan do-while
do
pernyataan;
while (kondisi)

Pada pernyataan do-while, tubuh loop berupa pernyataan,dengan pernyataan bisa berupa pernyataan tunggal, pernyataan majemuk ataupun pernyataan kosong. Pada pernyataan do, mula-mula pernyataan dijalankan. Selanjutnya, kondisi diuji.Sendainya kondisi bernilai benar, maka pernyataan dijalankan lagi, kemudian kondisi diperiksa kembali, dan seterusnya.Kalau kondisi bernilai salah pada saat dites, maka pernyataan tidak dijalankan lagi.

CONTOH PROGRAM
1. While
a.  Source Code Program :
#include<stdio.h>
#include<conio.h>
main()
{
int hitung1,hitung2;
hitung1=0;
while (hitung1<6)
{
printf("nilai hitung %d\n",hitung1);
hitung1=hitung1+1;
}
hitung2=6;
while(hitung2<15)
{
printf("nilai hitung %d\n",hitung2);
hitung2=hitung2+1;
}
gets(0);return (0);
}

b. Output Program

2.  Do While
a. Source Code Program
#include <iostream>
using namespace std;
int main(){
     int deret;
     cout<<"\t== Program Deret Angka (Do-While) ==\n\n";
     cout<<"Banyak deret Angka yang akan ditampilkan : ";
     cin>>deret;
     cout<<endl;
     do{
          cout<<deret<<"  ";

          // Menurunkan nilai variabel deret
          // deret-- ==> deret=deret-1
          deret--;
     }while(deret>0);

     cout<<"\n\n== Deret Selesai Ditampilkan ==\n";

     return 0;
}

b. Output Program

3. For
a. Source Code Program
#include <iostream>
using namespace std;

void output();

int main()
{
    int a,b;
    b=5;
    
    for(a=1; a<=b; a++)
    {
        cout << a <<". Perulangan For";
        if(a%2==0)
        {
            cout<<"   Kukoh Santoso";
        }
        cout <<endl;
    }

}

b. Output Program