menu

Minggu, 15 Mei 2016

c++ Mencari nilaipada deret bilangandengan metode pencarian biner, sehingga menghasilkan indeks elemen array tempat ditemukannya nilai tersebut.


1. Mengerti masalah
    Memperkecil jumlah operasi pembandingan yang harus dilakukan antara data yang dicari dengan    data yang ada di dalam tabel, khususnya untuk jumlah data yang sangat besar ukurannya.

 2. Percobaan dengan data
     Misal data A-> [ 1 2 3 4 5 6]
             indeks         0 1 2 3 4 5
     key =2
     maka ditemukan nilai 2 ditemukan pada indeks ke 1

3. Analisis
  1. Data diambil dari posisi 1 sampai posisi akhir N
  2. Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
  3. Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah sama atau lebih kecil, atau lebih besar?
  4. Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi tengah + 1
  5. Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi tengah – 1
  6. Jika data sama, berarti ketemu

4. Algoritma program

 function pencarianBiner(input aray : larik; kunci, low, high : integer) : integer

Deklarasi
ketemu : boolean
i, middle : integer

Deskripsi
ketemu <- false
while (low <= high) and (not ketemu) do
middle <- (low+high) div 2
if (kunci = aray[middle]) then ketemu <- true { data pencarian = data di tengah }
else if (kunci < aray[middle]) then high <- middle – 1 {data akan dicari lagi di sebelah kiri}
else low <- middle + 1 {data akan dicari lagi di sebelah kanan}
endif
endwhile
if ketemu then pencarianBiner := middle
else pencarianBiner := -1;
endif




5. program dengan c++

#include <iostream>
#define UKURAN 15
using namespace std;




void cetakBaris(int b[], int rendah, int mid, int tinggi)
{ int i;
for (i=0; i<=UKURAN-1; i++)
if (i<rendah || i>tinggi) cout << "  ";
else if (i==mid) cout << "*" << b[i]<<" ";
else cout << b[i] << " ";
cout << "\n";
}



int pencarianBiner(int b[], int kunciPencarian, int rendah, int tinggi )
{ int i, middle;
while (rendah <= tinggi) {
middle = (rendah+tinggi) / 2;
cetakBaris(b, rendah, middle, tinggi);
if (kunciPencarian == b[middle])
return middle;
else if (kunciPencarian < b[middle])
tinggi = middle - 1;
else rendah = middle + 1;
}
return -1;
}



main() {
int a[UKURAN]={1, 2, 8, 25, 30, 49, 50, 55, 60, 61, 68, 70, 72, 84,
90}, i, kunci, hasil;
for (i=0; i<=UKURAN-1; i++){
cout<<a[i]<<" ";   
   
}

cout<<endl<<endl;


cout << "Masukkan bilangan yg ingin dicari index nya : ";
cin >> kunci;


hasil=pencarianBiner(a,kunci,0,UKURAN-1);
if (hasil != -1) cout << kunci

<< " ditemukan pada index : "<< hasil;
else
cout << kunci << " tidak ditemukan";
return 0;
}

download raptor

Tidak ada komentar:

Posting Komentar