. .

TUGAS & LATIHAN:  Bahasa Pemrograman JAVA Netbeans IDE Mencari Bilangan Faktorial  

Posted by CHRISTIANTO D,WIBOWO | D3MI-2016 STMIK BUMI GORA On Jumat, Desember 09, 2016 No comments

Bilangan Faktorial didefinisikan sebagai produk dari bilangan alami dari satu sampai nomor tertentu. Secara matematis formulasinya adalah sebagai berikut,
n! = 1 * 2 * 3 * .... * (n-1) * n
Sebagai contoh, Bilangan faktorial dari 4 adalah  = 24
4! = 1 * 2 * 3 *  4  ➽ 24
TUGAS kali ini adalah jelaskan bagaimana untuk menemukan ANGKA - BILANGAN FAKTORIAL melalui iterasi serta rekursi.
Rekursi atau Iterasi.
Sebuah Algoritma rekursi yaitu algoritma yang memanggil dirinya sendiri berulang kali sampai kondisi tertentu tercapai, ini merupakan metode umum bagi pemrograman fungsional. Algoritma iteratif menggunakan konstruksi berulang seperti pengulangan dan terkadang struktur data tambahan seperti tumpukan untuk menyelesaikan permasalahan. Beberapa permasalahan secara alami cocok dengan satu implementasi atau lainnya. Sebagai contoh, Menara Hanoi dikenal dengan implementasi rekursif. Setiap versi rekursif memiliki kesamaan (tapi bisa lebih atau kurang kompleks) dengan versi iteratif, dan sebaliknya. (sumber : Algoritma - Wikipedia)
Mencari Angka factorial Pada Java Menggunakan Iterasi - Iteration .
Buat sebuah angka dimana faktorial bisa menemukan angka tersebut dan tersimpan dalam Veriabel n. Sebuah Variabel  'result' dari type int akan mendeklarasikan dan menginisialisasi-nya dengan integer 1.
int result = 1; 
Sekarang, tugas kita adalah untuk memperbanyak hasil variabel dengan semua bilangan dari 1 sampai n. Kita menggunakan untuk loop dengan counter yang berkisar dari 1 sampai n. Dalam loop, nilai yang ada dari hasil akan dikalikan dengan loop counter.
for (int i = 1; i <= n; i++) {
   result = result * i;
}
Mari kita mengambil sejumlah angka n = 3 untuk memahami cara kerja loop di atas. Sebelum memasuki loop, hasil akan dijalankan untuk satu. loop akan mengeksekusi tiga kali dengan nilai i = 1, 2 dan 3. Bila nilai i menjadi 4, kondisi loop gagal. Ketika nilai i adalah 1, hasil yang ada akan dikalikan dengan 1 yang lagi memberikan satu. Pada iterasi kedua, hasilnya akan dikalikan dengan 2 dan pada iterasi ketiga dengan 3. Perhitungan ini ditunjukkan di bawah ini:
result = 1
i = 1 result = result * i = 1 * 1 = 1
i = 2 result = result * i = 1 * 2 = 2
i = 3 result = result * i = 2 * 3 = 6
Ketika loop ada, hasil nilai yang awalnya satu akan sudah dikalikan dengan semua bilangan dari 1 sampai n. Dengan demikian, hasil memegang faktorial dari nomor tersebut. Di bawah ini sourcer code java program yang menemukan faktorial dari angka 10.
//@uthor Christianto "GEMBLONG" Dharma Wibowo
package factorial;
public class Factorial {
public static void main(String[] args) {
       System.out.println("MENCARI ANGKA FAKTORIAL SEBUAH BILANGAN");
       System.out.println("---------------------------------------");
       int n = 10;
       int result = 1;
       for (int i = 1; i <= n; i++) {
           result = result * i;
       }
       System.out.println("Angka Faktorial Dari 10 = " + result);
   }
}

Kita bisa mulai loop counter, i dari 2 bukannya 1 karena pada iterasi pertama nilai hasil akan dikalikan dengan 1 yang lagi memberikan satu. loop dapat dimodifikasi dan dapat ditulis sebagai berikut:
for (int i = 1; i <= n; i++) {
   result = result * i;
}
Kita juga dapat memulai loop counter dari n dan pengurangan sampai 2 atau 1. Dalam hal ini, loop akan terlihat seperti ini :
for (int i = n; i >= 1; i--) {
   result = result * i;
}
Satu contoh source code java program lain di mana angka faktorial akan dihitung dan diambil dari masukan pengguna dan hasilnya ditampilkan pada layar.
//@uthor Christianto "GEMBLONG" Dharma Wibowo
package inputfactorial;
import java.util.Scanner;
public class InputFactorial {
public static void main(String[] args) {
       System.out.println("MENCARI ANGKA FAKTORIAL SEBUAH BILANGAN");
       System.out.println("---------------------------------------");
       Scanner scanner = new Scanner(System.in);
       System.out.print("Masukkan Bilangan Yang Hendak Dicari Angka Faktorialnya: ");
       int n = scanner.nextInt();
       int result = factorial(n);
       System.out.println("Angka Faktorial dari " + n + " adalah " + result);
   }

   public static int factorial(int n) {
       int result = 1;
       for (int i = 1; i <= n; i++) {
           result = result * i;
       }
       return result;
    }
    
}

Mencari Angka factorial Pada Java Menggunakan Rekursi - Recursion .
Faktorial dari sebuah bilangan bisa juga ditemukan menggunakan rekursi. Kasus dasar dapat diambil sebagai faktorial dari angka 0 atau 1, yang keduanya 1. faktorial dari beberapa nomor n adalah nomor dikalikan dengan faktorial (n-1). Secara matematis sebagai berikut :
factorial ( 0 ) = 1
factorial ( n ) = n * factorial ( n - 1 )
Di bawah ini sourcer code java program yang menemukan faktorial dari angka 10.
//@uthor Christianto "GEMBLONG" Dharma Wibowo
package factorialrecursion;
public class FactorialRecursion {
public static void main(String[] args) {
       System.out.println("MENCARI ANGKA FAKTORIAL SEBUAH BILANGAN");
       System.out.println("---------------------------------------");
       int n = 10;
       int result = factorial(n);
       System.out.println("Angka Faktorial Dari 10 =  " + result);
   }

   public static int factorial(int n) {
       if (n == 0) {
           return 1;
       } else {
           return n * factorial(n - 1);
       }
    }
}

Overflow bilangan bulat ketika menemukan faktorial
GEMBLONG
Ketika program faktorial dijalankan dengan input tertentu nilai >= 13, kita mendapatkan hasil yang salah - angka negatif atau hasil yang tidak sesuai dengan faktorial sebenarnya dari jumlah tersebut. Alasannya adalah bahwa faktorial jumlah yang lebih besar dari atau sama dengan 13 terlalu besar untuk jenis int data. Kita dapat menggunakan tipe data lama tapi tetap saja tidak akan cukup besar untuk menampung faktorial angka yang lebih tinggi. Solusinya adalah dengan menggunakan kelas BigInteger yang dapat menangani nomor-nomor besar.

0 komentar:

Posting Komentar