Monday, December 23, 2013

Sequential Search dan Binary Search

Akhirnya posting juga setelah beberapa minggu nggak posting, dan lagi lagi postingan kali ini membahas tentang perkuliahan.
Baik, materi yang kemarin saya dapat adalah mengenai Searching











Berikut sedikit penjelasan dari slide perkuliahan kemarin, hehe.. 
Searching pada struktur data adalah :
  • Proses mendapatkan (retrieve) informasi berdasarkan kunci (key) tertentu dari sejumlah informasi yang telah disimpan.
  • proses pencarian data yang ada pada suatu deret data dengan cara menelusuri data-data tersebut.
  • Kunci (key) digunakan untuk melakukan pencarian record yang diinginkan didalam suatu list.
  • Tahapan paling penting pada searching: memeriksa jika data yang dicari sama dengan data yang ada pada deret data.
Jenis searching :

  • Single match : Pencarian yang menghasilkan satu data. Contoh : mencari mahasiswa dengan nim “120651234”
  • Multiple match : Pencarian yang memungkinkan menghasilkan beberapa data. Contoh : mencari mahasiswa dengan ipk >= 3.5
Algoritma Search
  1. Sequential Search
  • Merupakan teknik yang sederhana dan langsung dapat digunakan pada struktur data array.
  • Pencarian data secara urut mulai dari data pertama sampai kunci yang dicari ditemukan atau sampai seluruh data telah dicari dan tidak ditemukan
  •  Dilakukan pada data yang tidak terurut
Berikut Source code keseluruhan Sequential Search pada bahasa pemrograman java :
import javax.swing.JOptionPane;//import yang berfungsi untuk memanggil JOptionPane

public class SeqSearch {//kelas SeqSearch

    //deklarasi variable
    int x;
    //deklarasi array
    int[] s = new int[5];
    //deklarasi boolean
    boolean found = false;

    public void sequential() {
        System.out.print("Deret angka : ");
        //perulangan untuk kondisi i = 0 dan i < panjang array s,
        for (int i = 0; i < s.length; i++) {
            //menampilkan input dialog untuk mengisi deret angka berapa saja yang ingin ditampilkan
            //mengkonversi kunci yang bertipe string ke integer agar sama dengan nilai array
            s[i] = Integer.parseInt(JOptionPane.showInputDialog("Masukkan " + s.length + " angka," + " angka ke-" + (i + 1)));
            System.out.print(s[i] + "  ");
        }
        System.out.println();
        //menginputkan angka yang ingin dicari dan mengkonversi kunci yang bertipe string ke integer
        x = Integer.parseInt(JOptionPane.showInputDialog("Angka yang dicari"));
        System.out.println("Angka yang dicari : " + x);
        System.out.println("------------------------------------");
        //perulangan untuk kondisi i = 0 dan i < panjang array s
        for (int i = 0; i < s.length; i++) {
            //jika x atau variable yang dicari = index array yang sudah diinputkan maka nilai boolean 'found' adalah true
            //kemudian di break untuk menghentikan
            if (x == s[i]) {
                found = true;
                break;
            }
        }
        //kondisi jika nilai boolean 'found' true, maka mencetak statement ditemukan
        if (found == true) {
            System.out.println("Angka " + x + " ditemukan");
            //selain itu maka statement tidak ditemukan
        } else {
            System.out.println("Angka " + x + " tidak ditemukan");
        }
    }

    public static void main(String[] args) {
        //untuk menampilkan pada interface hasil dari method sequential
        SeqSearch search = new SeqSearch();
        search.sequential();
    }
}

2. Binary search

  • Pencarian data dimulai dari pertengahan data yang telah terurut.
  • Jika kunci pencarian lebih kecil daripada kunci posisi tengah, maka kurangi lingkup pencarian pada separuh data pertama.
  • Begitu juga sebaliknya jika kunci pencarian lebih besar daripada kunci tengah, maka pencarian ke separuh data kedua.
  • Teknik Binary Search hanya dapat digunakan pada sorted array.
berikut souurce code keseluruhan dari binary search
import javax.swing.JOptionPane;//import yang berfungsi untuk memanggil JOptionPane

public class BinSearch {
    
    int n = 5, cari, atas, bawah, tengah;//deklarasi variable n,cari,atas,bawah,tengah
    int a[] = new int[n];//deklarasi array
    boolean found;//deklarasi nilai boolean 

    public void binary() {
        System.out.print("Deret angkanya : ");
        for (int i = 0; i < a.length; i++) {//perulangan untuk kondisi i = 0 dan i < panjang array a,
            //mengkonversi tipe data string ke integer
            //menampilkan input dialog untuk memasukkan angka yang berurutan yang nanti di cari
            a[i] = Integer.parseInt(JOptionPane.showInputDialog("Masukkan " + n + " angka 'BERURUTAN' ke-" + (i + 1)));
            System.out.print(a[i] + "  ");
        }
        System.out.println();
        //menampilkan input dialog untuk memasukkan angka yang yang akan dicari
        //harus di konversi dulu dari string ke dalam tipe data integer
        cari = Integer.parseInt(JOptionPane.showInputDialog("Angka yang dicari"));
        System.out.println("Angka Yang Dicari: " + cari);
        System.out.println("--------------------------------------");
        //menginisialisasikan batas atas yaitu 0,batas bawah n-1,dan found yang bernilai false
        atas = 0;
        bawah = n - 1;
        found = false;
        //perulangnan untuk mendeklarasikan algoritma,
        while ((atas <= bawah) && (found==false)){
            tengah = (atas + bawah) / 2;
            if (a[tengah] < cari) {
                atas = tengah + 1;
                //jika index array tengah sama dengan angka yang dicari
            } else if (a[tengah] == cari) {
                //maka menampilkan bahwa angka ditemukan
                System.out.println("Angka " + cari + " ditemukan di index " + tengah);
                break;
            } else {
                bawah = tengah - 1;
            }
            tengah = (atas + bawah) / 2;
        }
        if (atas > bawah) {//jika nilai atas lebih dari nilai yang bawah
            System.out.println("Angka " + cari + " tidak ditemukan");
        }
    }

    public static void main(String[] args) {
        //untuk menampilkan pada interface hasil dari method sequential
        BinSearch search = new BinSearch();
        search.binary();
    }
}
Selesai sudah postingan kali ini tentang konsep sequential dan binary search pada bahasa pemrograman java. Semoga bermanfaat, dan semoga mendapatkan nilai yang bagus dengan tugas minggu ini, hehe.. Pesan dari saya“ Impossible Is Nothing ”
NIM : 1000631038
NAMA : PRIYO SIGIT PURNOMO
JURUSAN : MANAJEMEN INFORMATIKA
UNIVERSITAS MUHAMMADIYAH JEMBER

Monday, October 7, 2013

Perhitungan Pangkat Secara Rekursif pada Bahasa Pemrograman Java


Pada postingan kali ini, lagi-lagi mengenai tugas perkuliahan.
Setelah melewati perkuliahan mata kuliah logika algoritma dan struktur data selama hampir satu minggu, akhirnya tiba juga batas akhir pengumpulan tugas mingguan,yaitu malam ini pukul 23.59.
Untumg saja aku berhasil mengerjakan tugas pada minggu ini, hehe.. keren kan aku??
Ok dah.. langsung saja kita ke Teee.. Kaaa... Peee...
Pada tugas kali ini, mahasiswa diberi tugas membuat program penghitungan pangkat dari penjumlahan dua bilangan yang diselesaikan secara rekursif, soalnya yakni :
(a+b)y
Apabila di inputkan nilai maka menjadi (2+3)3 =125.
Nah loe... gimana coba caranya agar nanti bisa jadi seperti itu?? Itu yang aku pikirkan di akhir perkuliahan setelah mendapat tugas ini.
Tapi bukan mahasiswa namanya kalau menyerah hanya tau soalnya seperti itu. Karena menurut aku, semua persoalan bisa selesai apabila kita berusaha untuk menyelesaikannya, tapi kalau kita cuma melihat persoalan tersebut, mengangan-angan, nggak akan pernah selesai. Gimana? Keren kan aku?? Hehe.. kayak Bapak Mario lama-lama. Yah.. Karena keseringan nonton MTGW sih..
Udah ah, bisa nggak selesai ini nanti.
Sebelumnya kita harus tau pangkat secara rekursif itu apa, ini aku kutip dari slide dosen aku.
Dalam fungsi pangkat xy, jika x pangkat o, maka nilainya adalah 1, jika x pangkat y, dengan y lebih dari 0, maka hasilnya sama dengan x dikalikan x dipangkatkan  y-1.
Jika ditulis dalam notasi matematika:







Pada x > 0, bentuk pemangkatannya muncul kembali di sisi kanan, itulah yang disebut rekursif, fungsi yang mendefinisikan fungsi itu sendiri
Waduh... semakin pusing ajah ya...
Begini penjelasan lebih lanjutnya
Rekursif selalu dimulai kasus penyetop, penghenti, yang terjadi ketika y=0. Rekursif yang lebih kompleks mengandung inti dari permasalahan yang akan dipecahkan secara sederhana.
Yang awalnya xy menjadi lebih sederhana x, hal ini dimaksudkan “menggiring” masalah kompleks ke kasus dasar atau penyetop rekursif.
Untuk x=10 dan y=0, maka xy hasilnya adalah 1
Untuk x=10 dan y=3, hasilnya dapat digambarkan:














Jadi hasil xy untuk x=10, y=3 adalah 1000.
Itu dulu deh penjelasan tentang xy. Nah, untuk kasus yang akan kita bahas ini adalah (a+b)y.
Untuk penerapan code di java yaitu sebagai berikut :



















Baik, kita oprek code diatas
1. Code untuk pengimplementasian












Penjelasan code diatas :
a. public static int pangkat (int a, int b, int y){
adalah method pangkat untuk mengimplementasi nilai int a, int b, dan int y
b. if (y==0) kondisi apabila y bernilai o maka akan mengeksekusi kondisi pertama yaitu return 1 yang hasilnya adalah 1
c. else digunakan untuk mengeksekusi kondisi kedua apabila kondisi pertama tidak digunakan
d. return (a+b) * pangkat (a, b, y-1) adalah nilai kondisi kedua yang berisi rumus untuk mencari (a+b)y

2. Dan untuk menampilkan hasilnya yaitu dengan memanggil fungsi JoptionPane seperti berikut:
penjelasannya
JoptionPane.showMessageDialog adalah jendela pesan informasi, artinya program akan menampilkan jendela pesan informasi berupa output yang sudah di inputkan


Namun untuk memanggil fungsi JOptionPane kita harus mengimport fungsi JoptionPane terlebih dahulu seperti berikut :




Setelah itu hasilnya adalah









Selesai sudah postingan kali ini tentang Perhitungan pangkat secara rekursif pada bahasa pemrograman java.
Semoga bermanfaat, dan semoga mendapatkan nilai yang bagus dengan tugas minggu ini, hehe..
Pesan dari aku “ Impossible Is Nothing ”

NIM              : 1000631038
NAMA           : PRIYO SIGIT PURNOMO
JURUSAN      : MANAJEMEN INFORMATIKA