Kelas & Method
PART 2
12th week
Estu Sinduningrum ST,MT
Memanggil Method
Konstruktor Lain
Bila konstruktor B ingin menduplikasi behavior
yang dimiliki oleh konstruktor A pada kelas yang
sama, maka B harus memangggil A.
Gunakan keyword this untuk memanggil
konstruktor.
Estu Sinduningrum, ST, MT
Method finalizer
Objek dalam program yang sedang dieksekusi memiliki
waktu hidup (life time).
Objek tercipta pada saat Anda menginstans suatu kelas
(dengan Operator new) dan akan dihapuskan pada saat
objek dikumpulkan untuk sampah (Garbage
Collection) atau bila memory yang ditempatinya telah
diklaim oleh objek/bagian program lainnya
Estu Sinduningrum, ST, MT
Method finalizer
Method yang dibubuhi modifier finalize ini dapat dikatakan
juga sebagai lawan/kebalikan dari method konstruktor.
Bila Method konstruktor akan-menginisialisasi objek
dengan parameter awal, maka method finalizer dipanggil
sesaat sebelum Objek dihancurkan.
Bentuk Umum:
Estu Sinduningrum, ST, MT
protected void finalize() throws Throwable {
super.finalize();
}
Method Main Setelah selesai mengetik source code aprikasi, langkah berikutnya
adalah mengkompile dan menjalankan program rersebut.
Kompilasi dilakukan dengan Java Kompiler yang akan mengubah fire
source code (*java) berformat plain text menjadi file byte cocle (*.crass).
File *.class ini selaniutnya siap dieksekusi oleh Java Interpreter.
Pada saat kompilasi, pertama-tama kompiler akan mencari bagian
program yang disebut sebagai method utama (main method). Main
method ini memiliki bentuk standard, yakni:
Estu Sinduningrum, ST, MT
public static void main(String [] argurnents) {
Statement body dari main method;
}
Method Penjelasan
public Karena method ini merupakan bagian dari program yang
pertama dicari oleh kompiler, maka main method harus
dapat “dilihat”atau visible oleh kelas mana pun.
static Semua objek yang diinstans dari suatu kelas yang
mengandung main method akan memiliki parameter-
parameter yang sama. Bila suatu kelas mendukung main
method dan di dalam main method tersebut terdapat
statement untuk menginstansiasi objek dari kelas tersebut,
maka main method akan bersifat eksklusif, tidak ikut
"diserahkan" kepada objek tersebut.
void Jelas bahwa main method ini tidak mengembalikan suatu
nilai.
Estu Sinduningrum, ST, MT
Method dari Kelas Math Selain method yang dapat Anda buat sendiri, Java juga memiliki
banyak method standard sebagai referensi.
Di antaranva adalah fungsi-fungsi matematika yang terdapat di
dalam Math class, yakni trigonometri (sin, cos, tan, asin, acos,
atan), eksponensial, dan beberapa method tambahan (max,min, abs,
random, round).
Di samping itu, terdapat juga konstanta matematika seperti PI
(3.14) untuk merepresentasikan sudut/ lingkaran dan E adalah
konstanta Euclid (2.72) untuk logaritma natural.
Karena kelas Math ini terkandung daram package java.lang yang
merupakan default package, maka untuk memanggil method dan
konstanta- nya, cukup dengan format Math.nama.Method, contoh
Math.abs(), Math.sin(), Math.PI, dan seterusnya.
Estu Sinduningrum, ST, MT
Method Trigonometri
Dalam trigonometri Anda mengenal dua dimensi pengukuran sudut,
yakni derajat dan radian.
Umumnya, dalam perhitungan matematis Anda terbiasa bekerja
dengan menggunakan derajat.
Nilai yang Anda ketikkan dari keyboard juga diperlakukan sebagai
derajat. Namun, method-method trigonometri Java memerrukan
birangan yang berupa radian sebagai argumen inputnya.
Oleh karena, Anda perlu mengkonversi terlebih dahulu besaran
derajat tersebut menjadi radian.
Estu Sinduningrum, ST, MT
Method Trigonometri
Hubungan antara derajat dan radian adalah:
[] adalah konstanta sudut yang besarnya = 3.14. .
Dari hubungan kesetaraan terrihai bahwa nilai sudut z dalam derajat, akan
sama dengan (2[]/360) * z radian, jadi Anda perlu mengalikan nilai input
argumen dengan faktor []/180.
Java telah menyediakan 2 method konversi; toRadians dan toDegrees
untuk mengkonversi sudut.
Method yang Anda butuhkan saat ini adalah toRadians.
Estu Sinduningrum, ST, MT
Netbeans 17 :
Estu Sinduningrum, ST, MT /**
* Title : Program Trigonomatri
* Deskripsi : Menampilkan beberapa perhitungan
* fungsi Trigonometri (sin, cos, tan,
* asin, acos, atan, konversi sudut).
*/
import java.text.DecimalFormat;
class Trigonometri {
/** Main Method */
public static void main(String[] args) {
// Mendeklarasikan beberapa variabel
double sudut, sudutDerajat, sudutRadian, hasilSin,
hasilCos, hasilTan, hasilAsin, hasilAcos, hasilAtan;
System.out.println("\nPROGRAM MENGHITUNG
FUNGSI SUDUT");
System.out.println("-------------------------------\n");
System.out.print("Masukkan sudut :");
sudut = InputConsole.readDouble();
// Mengkonversi euduts derajat menjadi radian
sudutRadian = Math. toRadians (sudut);
sudutDerajat =
Math.toDegrees(sudutRadian) ;
// Sinus dari sudut
hasilSin = Math.sin(sudutRadian) ;
// Cosinus dari sudut
hasilCos = Math.cos(sudutRadian) ;
// Tan dari sudut
hasilTan = Math.tan(sudutRadian) ;
// Asinus dari sudut
hasilAsin = Math.asin(hasilSin) ;
// Acos dari sudut
hasilAcos = Math.acos(hasilCos) ;
// Asinus dari sudut
hasilAtan = Math.atan(hasilTan) ;
// Mengubah fornst do:bLe statrdard
menjadi double
// dengan tiga digit desimal dengan
memanfaatkan method
// 'format' pada kelas DecimalFormat.
DecimalFormat digitPresisi = new
DecimalFormat ( "0,000" );
Estu Sinduningrum, ST, MT System.out.println("\nFUNGSI
TRIGONOMETRI");
System.out.println("--------------------\n");
System.out.println("Sinus dari sudut : " + sudut
+ " adalah " + digitPresisi.format (hasilSin)) ;
System.out.println("Cosinus dari sudut : " +
sudut + " adalah " + digitPresisi.format
(hasilCos)) ;
System.out.println("Tan dari sudut : " + sudut +
" adalah " + digitPresisi.format (hasilTan)) ;
System.out.println("Arc Sinus dari : "+
digitPresisi.format(hasilSin)+"adalah"+
digitPresisi.format(Math.toDegrees (hasilAsin)));
System.out.println("Arc Cosinus dari : "+
digitPresisi.format(hasilCos)+"adalah"+
digitPresisi.format(Math.toDegrees
(hasilAcos)));
System.out.println("Arc Tan dari : "+
digitPresisi.format(hasilTan)+"adalah"+
digitPresisi.format(Math.toDegrees
(hasilAtan)));
} }
Method Pembulatan Ada beberapa method yang dapat digunakan untuk pembulatan bilangan,
yaitu:
1) abs ()
Method ini akan mengembalikan nilai absolut dari suatu argumen. Bila
argumen bernilai positif, maka nilai yang dikembalikan adalah nilai argumen
tersebut, sedangkan bila negatif, maka bilangan tersebut akan dijadikan positif
terlebih dahulu.
Ada empat bentuk abs sesuai dengan tipe datanya,yaitu:
Estu Sinduningrum, ST, MT
static int abs(int i)
static long abs(long l)
stetic float abs(float f)
static double abs(double d)
2) ceil()
Method ini akan mengembalikan nilai double yang terkecil yang
tidak lebih kecil daripada argumen d dan sama dengan integer
matematika (bilangan bulat desimal).
Contoh:
ceil(7.3) = 8
ceil(-l.3) = -7
Estu Sinduningrum, ST, MT
Method Pembulatan
static double ceil(double d)
3) floor()
Kebalikan dari ceil(), method floor() mengembalikan nilai double
terbesar yang tidak lebih besar daripada argumen d dan sama dengan
inteqer matematika (bilangan bulat desimal).
Bentuk :
Contoh:
floor(7.3) = 7
floor(-7.3) = 8
Estu Sinduningrum, ST, MT
Method Pembulatan
static double floor(double d)
3) round()
Mengembalikan nilai integer yang paling dekat dengan
argurmen.
Bentuk :
Contoh:
round(7.3) = 7
round(7.6) = 8
Estu Sinduningrum, ST, MT
Method Pembulatan
static int round(float f)
static long round(double f)
Method max dan min
Method max() akan mengembalikan nilai yang terbesar di antara
dua bilangan, sedangkan method min() akan mengembalikan nilai
yang terkecil di antara dua bilangan.
Bentuk method max(): Bentuk method min():
Estu Sinduningrum, ST, MT
static int max(int a, int b)
static long max(long a, long b)
stetic float max(float a, float b )
static double max(double a, double b )
static int min(int a, int b)
static long min(long a, long b)
stetic float min(float a, float b )
static double min(double a, double b )
Method Perpangkatan,
Akar, dan Eksponensial a) pow – pangkat
Bentuk :
b) Method ini
exp – pangkat eksponensial
Bentuk :
Estu Sinduningrum, ST, MT
static double pow (double a, double b)
static double exp (double a)
Method ini mengembalikan hasil pangkat eksponensial e dengan bilangan a.
log --logaritma berbasis e
Bentuk :
Method ini mengembalikan hasil logaritma e dari bilangan a.
sqrt --akar
Bentuk :
Method ini mengernbalikan hasil akar pangkat dua dari suatu argumen a.
Estu Sinduningrum, ST, MT
Method Perpangkatan,
Akar, dan Eksponensial
static double log (double a)
static double sqrt (double a)
Method Random Generator
Bentuk:
Method ini akan mengembalikan suatu bilangan acak (random) yang .
lebih besar daripada atau sama dengan 0.0 dan lebih kecil daripada atau
sama dengan 1.0. Jadi, range nilai kembalinya adalah 0.0 <= <=r
xx
Estu Sinduningrum, ST, MT
static double random()
Netbeans 18 :
Estu Sinduningrum, ST, MT /**
* Title : Program MethodMath
* Deskripsi : Menampilkan beberapa perhitungan
* fungsi matematika (abs, log, pow, sqt,
* random, round, max, min)
* dalam perhitungan.
*/
class DemoMethodMath{
public static void main(String[] args) {
double a, b, c, d, e, f,g;
double hasilAbs, hasilLn, hasilPow, hasilSqrt
hasilRandom;
double hasilRound1, hasilRound2, hasilCeil1,
hasilCeil2;
double hasilFloor1, hasilFloor2, hasilMax,
hasilMin;
// Mengambil nilai absolute
a = -164.72;
hasilAbs = Math.abs(a);
// Mengambil logaritma natural (E) dari suatu nilai
b = Math.E*Math.E;
hasilLn = Math.log(b);
// Menghasilkan nilai c dipangkat d
c = 10; d = 3;
hasilPow = Math.pow (c,d);
// Menghasilkan akar pangkat 2 dari suatu nilai
e = 625;
hasilSqrt = Math.sqrt(e);
// Menghasilkan sebarang bilangan acak
(random)
hasilRandom = Math.random();
// Membulatkan nilai koma desimal ke integer
terdekat
f = 3.4988;
hasilRound1 = Math.round(f);
hasilRound2 = Math.round(a) ;
// Membulatkan ke integar terdekat yang >
argumen
g = -f;
hasilCeil1 = Math.ceil(f);
hasilCeil2 = Math.ceil(g);
Estu Sinduningrum, ST, MT // Membulatkan ke intseger terdekat yang < argumen
hasilFloor1 = Math.floor(f);
hasilFloor2 = Math.floor(g);
// Mengambil nilai terbesar dari dua bilangan
hasilMax = Math.max(a,b) ;
// Mengambil nilai terkecil dari dua bilangan
hasilMin = Math.min(a,b) ;
System.out.println("\nDEMO PENGGUNAAN BEBERAPA METHOD MATH");
System.out.println("------------------------------------\n");
System.out.println("Hasil Absolute dari :"+ a +"="+ hasilAbs);
System.out.println("Hasil Log Natural dari :"+ b +"="+ hasilLn);
System.out.println("Hasil Pemangkatan dari :"+ c +" dipangkat"+d+"="+ hasilPow);
System.out.println("Hasil Akar dari :"+ e +" ="+ hasilSqrt);
System.out.println("Nilai Random :" + hasilRandom);
System.out.println("Hasil Pembulatan 'Round' :"+ f +"="+ hasilRound1+"\t, "+a+"="+
hasilRound2);
System.out.println("Hasil Pembulatan 'Ceil' :"+ f +"="+ hasilCeil1+"\t, "+a+"="+
hasilCeil2);
System.out.println("Hasil Pembulatan 'Floor' :"+ f +"="+ hasilFloor1+"\t, "+a+"="+
hasilFloor2);
System.out.println("Nilai Max dari :"+ a +"dan"+ b +"="+ hasilMax);
System.out.println("Nilai Min dari :"+ a +"dan"+ b +"="+ hasilMin);
} }
Beberapa Aplikasi Method Math
Estu Sinduningrum, ST, MT
Netbeans 19 :
Estu Sinduningrum, ST, MT /**
* Title : Standart Deviasi
* Deskripsi : Menghitung Standart Deviasi
*/
public class StandardDeviasi {
/** Main Method */
public static void main(String[] args) {
System.out.println("\nPROGRAM MAIN dan
STANDARD DEVIASI\n");
System.out.print("Masukkan jumlah bilangan:");
int jumlahElemen = InputConsole.readInt();
System.out.println("-------------------------------");
// Mendeklarasikan array untuk bilangan yang akan
diproses
double[] arrayBilangan = new double[
jumlahElemen ];
for(int i = 0; i < jumlahElemen; i++) {
int indeks = 1;
System.out.print("Masukkan elemen ke-" +
(indeks+=i)+"\t :");
arrayBilangan [i] = InputConsole.readDouble();
}
// Mencetak elemen-elenen
cetakArray (arrayBilangan);
//Menampilkan Mean dan Standard Deviasi
System.out.println("Mean (Rata-
rata):"+mean(arrayBilangan));
System.out.println("Standard Deviasi:"+
sDeviasi(arrayBilangan));
}
/** Method untuk menghitung Standard
Deviasi */
public static double sDeviasi (double[]x)
{
double mean = mean(x);
double squareSum = 0;
for (int i = 0; i < x.length; i++)
{
Estu Sinduningrum, ST, MT squareSum += Math.pow(x[i] - mean,2);
}
return Math.sqrt(squareSum)/(x.length - 1);
}
/** Method untuk menghitung Mean */
public static double mean (double[] x )
{
double sum = 0;
for (int i =0; i < x.length; i++)
sum += x[i];
return sum/x.length; }
/** Method untuk mencetak array */
public static void cetakArray (double[] x )
{
System.out.println("\nNilai yang dimasukkan adalah:");
System.out.println("-------------------------------");
System.out.print("[");
for (int i = 0; i< x.length; i++)
System.out.print(x[i]+"");
System.out.print("]");
System.out.println("\n");
} }
Game: Menebak Mata Dadu
Agar Anda tidak jenuh belajar Java, marilah Anda buat game menebak
jumlah mata dari dua dadu yang dilemparkan.
Namun sebelumnya, ini hanya sekedar permainan, bukan untuk dijadikan
ajang taruhan. Dua dadu yang dilemparkan memiliki kemungkinan
jumlah mata sebagai berikut;
Estu Sinduningrum, ST, MT
Keterangan:
Angka yang dicetak miring
adalah kemungkinan jumlah
yang dihasilkan dari mata
dadu pertama + mata dadu
kedua.
Netbeans 20 :
Estu Sinduningrum, ST, MT /**
* Title : Tebak Dadu
* Deskripsi : Menebak hasil penjumlahan
* dari guliran dua dadu
*/
public class TebakDadu {
/** Main Method */
public static void main(String[] args) {
System.out.println("\nPROGRAM MENEBAK
JUMLAH DUA DADU");
System.out.println("-------------------------------
\n");
System.out.print("Masukkan tebakan anda [2-12]
:");
int tebakan = InputConsole.readInt();
if(( tebakan >0) && (tebakan<=12)) {
TebakDadu td = new TebakDadu();
int hasilGuliran = td.gulirDuaDadu();
if(tebakan== hasilGuliran)
System.out.println("\nHebat.... tebakan anda
benar !!!");
else {
System.out.println("Maaf... anda belum
beruntung");
System.out.println("Hasil guliran dua dadu
adalah :"+ hasilGuliran);
} }
else
System.out.println("Anda memasukkan
bilangan "+ "yang invalid !!!");
}
// Method Menggulirkan dua dadu dan
menjumlahkan
// hasil.
public int gulirDuaDadu () {
int dadu1, dadu2, jumlahDuaDadu;
dadu1 = 1+(int) (Math.random()*6);
dadu2 = 1+(int) (Math.random()*6);
jumlahDuaDadu = dadu1
+dadu2;
return jumlahDuaDadu;
} }
Tipe
Kembalian
Deskripsi Method Kelas Math
Static double asin(double a)
Mengembalikan nilai arc sinus dari suatu sudut (dalam radian).
Static double atan(double a)
Mengembalikan nilai arc tangent dari suatu sudut (dalam radian).
Static double atan2(double y, double x)
Mengubah koordinat rectangular (x, y) menjadi polar (r, theta).
Static double ceil(double a)
Mengembalikan nilai double terkecil yang tidak kurang dari dan
sama dengan bilangan bulat integer.
Static double cos(double a)
Mengembalikan nilai cosinus dari suatu sudut (dalam radian).
Static double exp(Couble a)
Mengembalikan nilai pangkat eksponensial Euler e raised terhadap
suatu nilai double.
Static double floor(double a)
Mengembalikan nilai double yang terbesar yang tldak lebih dari
pada argument dan sama dengan bilangan bulat integer.
Estu Sinduningrum, ST, MT
Estu Sinduningrum, ST, MT
Tipe
Kembalian
Deskripsi Method Kelas Math
Static double IEEE remainder(double f1, double f2)
Menghitung sisa operasi pada terhadap dua argumen sesuai dengan stanCard
IEEE754
Static double log(double a)
mengembalikan nilai logaritma natural (berbasis e) dari suatu nilai double.
Static double max(double a, double b)
Mengembalikan nilai terbesar di antara dua nilai double.
Static float max(float a, float b)
Mengembalikan nilai terbesar di antara dua nilai float.
Static int max(int a, int b)
Mengembalikan nilai terbesar diantara dua nilai int.
Static long max(long a, long b)
Mengembalikan nilai terbesar di antara dua nilai long.
Static float min(float a, float b)
Mengembalikan nilai terkecil di antara dua nilai float.
Static int min(int a, int b)
Mengembalikan nilaiterkecil di antara dua nilai int.
Estu Sinduningrum, ST, MT
Tipe
Kembalian
Deskripsi Method Kelas Math
Static long min(long a, long b)
Mengembalikan nilai terkecil di antara dua nilai long.
Static double pow(double a, double b)
Mengembalikan nilai hasil perpangkatan argumen pertama terhadap argumen
kedua
Static double random0
Mengembalikan sebarang nilai double bertanda positif, >= 0.0 dan < 1.0.
Static double rint(double a)
Mengembalikan nilai double yang terdekat dengan nilai argumen dan sama
dengan bilangan bulat integer.
Static long round(double a)
Mengembalikan nilai long terdekai dengan argumen.
Static int round(float a)
Mengembalikan nilai int terdekat dengan argumen (pembulatan).
Static double sin(double a)
Mengembalikan nilai sinus dari suatu sudut (dalam radian).
Estu Sinduningrum, ST, MT
Tipe
Kembalian
Deskripsi Method Kelas Math
Static double sqrt(double a)
Mengembalikan nilai positif akar darisuatu nilai double.
Static double tan(double a)
Mengembalikan nilai tangent dari suatu sudut (dalam radian).
Static double toDegrees(double angrad)
Mengubah sudut yang diukur dalam radians menjadi derajat.
Static double toRadians(double angdeg)
Mengubah sudut yang diukur dalam derajat menjadi radians.
Rekursi: Method Memanggil Diri Sendiri
Selain dapat memanggil method lainnya, suatu method dapat juga
memanggil diri sendiri. Proses ini dinamakan rekursi.
Estu Sinduningrum, ST, MT
REKURSI :
Adalah proses yang terjadi ketika suatu method memanggil diri sendiri.
Beberapa Masalah Klasik
Faktorial
Bila Anda pemah mempelajari teori kemungkinan (probabilitas)
tentu tidak asing dengan konsep faktorial. Sistem perhitungan
faktorial memiliki ketentuan sebagai berikut:
Estu Sinduningrum, ST, MT
Berdasarkan ketentuan diatas, bisa Anda tuliskan beberapa
konsekuensi yang menyertaiya.
Jika nilai faktorial suatu bilangan sama dengan hasil perkalian
bilangan tersebut dengan bilangan-bilangan sebelumnya, selama
bernilai Positif, maka:
(n-2)! = (n-2) x (n-3) x (n-4)...
(n-1)! =(n-1)x(n-2)!
n! = n x (n-1)!
Estu Sinduningrum, ST, MT
Beberapa Masalah Klasik
Bagaimana membuat algoritma programnya ?
Dengan memperhatikan pola di atas cara yang paling efisien untuk
mengalikan bilangan-bilangan faktorial adalah dengan membulat
fungsi perkalian yang dapat memaggil diri sendiri. proses tersebut
terus dikerjakan dengan indeks yang menurun akan berhenti setelah
tercapai n = k.
Estu Sinduningrum, ST, MT
Beberapa Masalah Klasik
Estu Sinduningrum, ST, MT
Beberapa Masalah Klasik
factorial (int n)
{
If (n==0) // Statemen yang akan menghentikan rekursi
return 1;
Else
Return n*factorial (n-1); // Memanggil method factorial Secara rekursif
}
Netbeans 21 :
Estu Sinduningrum, ST, MT /**
*Title : Faktorial Suatu Bilangan
* Deskripsi : Menghitung Hasil Factorial Suatu
Bilangan
*/
public class Faktorial {
/** Main Method */
public static void main(String[] args) {
System.out.println("\nPROGRAM
MENGHITUNG FAKTORIAL");
System.out.println("----------------------------\n");
// Mengintruksikan user untuk memasukkan suatu
integer >= 0
System.out.print("Masukkan bilangan integer
>0:");
int n = InputConsole.readInt();
System.out.println("Nilai Faktorial dari"+ n
+"adalah" + faktorial(n));
}
/** Method rekursi untuk menghitung hasil
*factorial dari n */
static double faktorial(int n)
{
if (n==0)// kondisi yang
menghentikan rekursi
return 1;
else
return n*faktorial(n-1);
}
}
Deret Fibonacci
Deret Fibonacci adalah deretan bilangan yang dihasilkan dari penjumlahan
dua bilangan sebelumnya.
Deret ini dimulai dengan bilangan 0 dan 1, dan berturut-turut akan
dihasilkan bilangan (0+1), (l+l), (l+2), (2+3), dan seterusnya.
Bilangan-bilangan yang menyusun deret Fibonacci disebut juga sebagai
Bilangan Fibonaci.
Selanjutnya Anda akan membuat method sedemikian rupa, sehingga Anda
bisa mengacu kepada suatu bilangan.
Fibonacci proses ini dilakukan dengan memanggil nama method tersebut
dan menyebutkan indeknya, contoh fib(0), fib(3), fib(100), dan
sebagainya.
Bagaimana algoritmanya ?
Estu Sinduningrum, ST, MT
Berdasarkan pola fibonacci,
fib(0) = 0;
fib(l) = 1;
fib(n) = fib(n-l) + fib(n-2); n >= 2
Sekali lagi, Anda akan menggunakan pola rekursi untuk memecahkan masalah tersebut.
Pola fib(n-1)+fib(n-2); n >= 2 bermakna untuk mencari bilangan Fibonacci ke-n.
Anda harus mengerjakan proses perhitungan untuk dua bilangan sebelum indeks ke n (dengan indeks menurun).
Proses akar terus dikerjakan dan berakhir bila n = 2 atau menghasilkan fib(0).
Sebagai ilustrasi Anda akan menghitung nilai bilangan fibonaci ke-7.
Maka urutannya adalah:
fib(7) = fib(6) + fib(5);
fib(6)=fib(5)+fib(4);
fib(5)=fib(4)+fib(3);
fib(4)=fib(3)+fib(2);
fib(3) = fib(2) + fib( l):
fib(2)=fib(l)+fib(0);
fib(1) = 0;
fib(0)= 1;
Estu Sinduningrum, ST, MT
Netbeans 22 :
Estu Sinduningrum, ST, MT /**
* Title : Deret Fibonaci
* Deskripsi : Mendemonstrasikan
* perhitungan untuk
* memperoleh Bilangan Fibonaci ke-n
*/
public class Fibonaci {
/** Main Method */
public static void main(String[] args) {
System.out.println("\nPROGRAM
FIBONACI");
System.out.println("----------------\n");
// Membaca indeks bilangan Fibonaci
System.out.print("Masukkan indeks
bilangan Fibonaci :");
int n = InputConsole.readInt();
// Menghitung dan menampilkan bilangan
Fibonaci
System.out.println("Bilangan Fibonaci pada
indeks "+ n + " adalah " +fib(n));
}
/** Method menghitung bilangan Fibonaci */
public static long fib(long n)
{
if ((n ==0)||(n==1)) // Kondisi yang
menghentikan rekursi
return n;
else
return fib(n-1) + fib(n-2);
}
}
Menara Hanoi
Menara Hanoi adalah istilah yang digunakan untuk
menggambarkan suatu tumpukan balok atau cakram yang tersusun
seperti sebuah piramid.
Sebagai ilustrasi, tinjaulah Menara Hanoi yang tersusun dari 3
balok.
Pada bagian dasarnya, terdapat balok dengan penampang terluas,
di ujungnya balok dengan penampang tersempit, dan di bagian
tengahnya, balok dengan luas penampang di antara keduanva.
Estu Sinduningrum, ST, MT
Ide selanjutnya yang menjadi inti permasalahan dalam Menara Hanoi
adalah memindahkan balok-balok tersebut ke posisi baru, sedemikian
rupa sehingga pada posisi tersebut, balok-balok itu akan tersusun
kembali menjadi Menara Hanoi yang sama.
Berikut ini adalah ketentuan umum dari Fenomena
Pemindahan Menara Hanoi:
1. Anggap terdapat n balok penyusun Menara Hanoi. Masing-masing
balok memiliki luas penampang berbeda yang Anda beri label 1,2, 3,
dan seterusnya. Indeks dimulai dari ujung atas.
2. Diberikan tiga posisi untuk menempatkan balok-balok tersebut (A, B,
C). Posisi A digunakan sebagai posisi awal untuk menyusun Menara
Hanoi pertama kali.
3. Selanjutnya, Menara Hanoi pada posisi A akan dipindahkan ke posisi B.
4. Pemindahan tersebut harus memenuhi kaidah sebagai berikut:
Estu Sinduningrum, ST, MT
Menara Hanoi
4. Pemindahan tersebut harus memenuhi kaidah sebagai berikut:
Pada setiap langkah, hanya boleh satu balok yang dipindahkan.
Tidak boleh terjadi balok dengan luas penampang yang lebih kecil
ditaruh sebagai alas untuk balok yang lebih besar.
Diijinkan untuk menggunakan posisi C sebagai transit sementara
untuk balok sebelum ditaruh di posisi barunya (B).
Apabila saat proses pemindahan masih berlangsung posisi A sudah
kosong, (seluruh balok terkumpul pada posisi B dan C), maka A
boleh dijadikan tempat transit sementara.
Posisi B dapat juga dianggap sebagai tempat transit sernentara, bila
selama proses belum selesai) balok terkumpul pada A dan C.
Pada akhir proses pemindahan, hanya terdapat satu menara Hanoi,
yaitu pada posisi B, sementara posisi A dan C kosong (tidak
memiliki balok sisa satu pun).
Estu Sinduningrum, ST, MT
Estu Sinduningrum, ST, MT
Aturan Pemindahan Menara Hanoi:
Memindahkan seluruh balok dari posisi A ke B. Pada setiap
langkah hanya boleh satu balok dipindahkan. Tidak boleh balok
kecil menjadi alas bagi balok besar. Posisi C boleh dijadikan
transit sementara. Posisi A dan B bisa juga dijadikan transit
sementara apabila saat proses pemindahan masih berlangsung,
semua balok terkumpul pada dua posisi lainnya.
Estu Sinduningrum, ST, MT
Bagaimana Algoritmanya?
Bila hanva diberikan balok densan jumlah sedikit, Anda dapat secara
sederhana (manual) menyusunya. Untuk n = 1, balok tunggal tersebut
dapat langsung Anda pindahkan dari A ke B. Bila n = 2. balok terkecil Anda
letakkan pada posisi C terlebih dahulu, selanjutnya balok terbesar Anda
pindahkan ke B. Terakhir balok terkecil pada posisi C dipindahkan ke posisi
B. Untuk n = 3, telah Anda bahas sebelumnya.
Sebelumnya pada menara Hanoi dengan jumlah balok n, algoritmanya
dapat diuraikan menjadi tiga subprogram yang dikerjakan secara sekuensial
sebagai berikut:
1. Pindahkan sejumlah n-1 balok yang pertama, dari A ke c dengan
pertolongan posisi B sebagai transit sementara.
2. Memindahkan balok dari A ke B.
3. Memindahkan n-1 balok dari C ke B dengan bantuan posisi A sebagai
transit sementara.
Estu Sinduningrum, ST, MT
Netbeans 23 :
Estu Sinduningrum, ST, MT /**
* Title : Menara Hanoi
* Deskripsi : Mendemonstrasikan solusi untuk
* masalah Menara Hanoi
*/
public class MenaraHanoi {
/** Main Method */
public static void main(String[] args) {
System.out.println("\nPROGRAM MENARA
HANOI");
System.out.println("--------------------\n");
// Membaca jumlah balok (n)
System.out.print("Masukkan jumlah balok :");
int n = InputConsole.readInt();
// Memindahkan balok secara rekursif
System.out.println("Perpindahan balok :");
System.out.println("-------------------");
memindahkanBalok(n,'A','B','C');
}
// Method untuk memindahlan sejumlah n
balok dari menaraAsal
// ke menaraTujuan dengan bantuan
menaraBantuan
public static void memindahkanBalok(int n, char
menaraAsal, char menaraTujuan, char
menaraBantuan)
{
if (n==1) // kondisi yang
menghentikan rekursi
System.out.println("Memindahan balok"+ n +
" dari "+ menaraAsal + " ke " +
menaraTujuan);
else
{
memindahkanBalok (n-1,
menaraAsal, menaraBantuan, menaraTujuan);
System.out.println("Memindahan balok"+ n +
" dari " + menaraAsal +" ke " +
menaraTujuan);
memindahkanBalok (n-1, menaraBantuan,
menaraTujuan, menaraAsal);
} } }
TERIMA KASIH
Top Related