> For the complete documentation index, see [llms.txt](https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/dasar-struktur-data/job-sheet-3-brute-force-and-divide-conquer/praktikum-2.md).

# Praktikum 2

## 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,

```java
public int nilai, pangkat;
```

* Buatlah sebuah method dengan nama `pangkatBF()`.

{% code overflow="wrap" %}

```java
public int pangkatBF(int a, int n) {
    int hasil = 1;
    for (int i = 0; i < n; i++) {
        hasil = hasil * a;
    }
    return hasil;
}
```

{% endcode %}

* Buatlah method lain dengan nama `pangkatDC()`.

```java
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.

```java
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()`.

```java
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,

<figure><img src="/files/szQ3eatLVqCD0A1rSTOm" alt=""><figcaption><p>Hasil Percobaan Program Pangkat dengan Brute Force dan Divide Conquer</p></figcaption></figure>

## Pertanyaan

* Pada method `pangkatDC()` terdapat potongan kode sebagai berikut,

<pre class="language-java"><code class="lang-java">if(n%2==1) {
  return (pangkatDC(a, n/2)*pangkatDC(a, n/2)*a);
<strong>} else {
</strong><strong>  return (pangkatDC(a, n/2)*pangkatDC(a, n/2));
</strong>}
</code></pre>

Apa maksud dari potongan kode tersebut?

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polinema.gitbook.io/jti-modul-praktikum-algoritma-dan-struktur-data/dasar-struktur-data/job-sheet-3-brute-force-and-divide-conquer/praktikum-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
