🐥Praktikum 2

Menghitung Hasil Pangkat dengan Algoritma Brute Force dan Divide Conquer

Pengantar

Pada praktikum ini kita akan membuat program untuk menghitung nilai pangkat suatu angka menggunakan 2 jenis algoritma, yaitu, brute force dan divide conquer.

Pecobaan

  • Pada direktori proyek "BruteForceDivideConquer" buatlah kelas baru bernama "Pangkat".

  • Tambahkan atribut berikut,

public int nilai, pangkat;
  • Buatlah sebuah method dengan nama pangkatBF().

public int pangkatBF(int a, int n) {
    int hasil = 1;
    for (int i = 0; i < n; i++) {
        hasil = hasil * a;
    }
    return hasil;
}
  • Buatlah method lain dengan nama pangkatDC().

public int pangkatDC(int a, int n) {
    if(n==0) {
        return 1;
    } else {
        if(n%2==1) {
            return (pangkatDC(a, n/2)*pangkatDC(a, n/2)*a);
        } else {
            return (pangkatDC(a, n/2)*pangkatDC(a, n/2));
        }
    }
}
  • Perhatikan apakah sudah tidak ada kesalahan yang muncul dalam pembuatan class Pangkat.

  • Selanjutnya buat class baru yang di dalamnya terdapat method main. Class tersebut dapat dinamakan MainPangkat. Tambahkan kode pada class main untuk menginputkan jumlah nilai yang akan dihitung pangkatnya.

Scanner sc = new Scanner(System.in);
System.out.println("======================");
System.out.println("Masukkan jumlah elemen yang ingin dihitung : ");
int elemen = sc.nextInt();
  • Selanjutnya digunakan untuk instansiasi array of objects. Di dalam kode berikut ditambahkan proses pengisian beberapa nilai yang akan dipangkatkan sekaligus dengan pemangkatnya.

Pangkat[] png = new Pangkat[elemen];

for(int i=0; i<elemen; i++) {
    png[i] = new Pangkat();
    System.out.println("Masukkan nilai yang akan dipangkatkan ke-"+(i+1)+" : ");
    png[i].nilai = sc.nextInt();
    System.out.println("Masukkan nilai pemangkat ke-"+(i+1)+" : ");
    png[i].pangkat = sc.nextInt();
}
  • Kemudian panggil method pangkatBF() dan pangkatDC().

System.out.println("=====================");
System.out.println("Hasil Pangkat dengan Brute Force");

for(int i=0; i<elemen; i++) {
    System.out.println("Faktorial dari nilai "+png[i].nilai+" pangkat "
        +png[i].pangkat+" adalah "+pangkatBF(png[i].nilai, png[i].pangkat));
}

System.out.println("=====================");
System.out.println("Hasil Pangkat dengan Divide and Conquer");

for(int i=0; i<elemen; i++) {
    System.out.println("Faktorial dari nilai "+png[i].nilai+" pangkat "
        +png[i].pangkat+" adalah "+pangkatDC(png[i].nilai, png[i].pangkat));
}

System.out.println("=====================");

Verifikasi Hasil Percobaan

Pastikan output dari program serupa dengan gambar berikut,

Pertanyaan

  • Pada method pangkatDC() terdapat potongan kode sebagai berikut,

if(n%2==1) {
  return (pangkatDC(a, n/2)*pangkatDC(a, n/2)*a);
} else {
  return (pangkatDC(a, n/2)*pangkatDC(a, n/2));
}

Apa maksud dari potongan kode tersebut?

  • Apakah tahap combine sudah termasuk dalam kode tersebut? Tunjukkan!

Last updated