Anda di halaman 1dari 12

Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence

Kelas/No: JTD 4C / 16 Menara Hanoi

I. Tujuan Praktikum
 Mahasiswa mampu mengindentifikasi konsep ruang keadaan pada penyelesaikan
permainan Menara Hanoi.
 Mahasiswa mampu menyelesaikan permasalah pada Menara Hanoi
 Mahasiswa mampu memahami dari solusi yang diperoleh pada Menara Hanoi

II. Landasan Teori


A. Menara Hanoi
Menara Hanoi adalah sebuah permainan matematis atau teka-teki. Teka-teki ini
ditemukan Eduard Lucas, ahli matematika Perancis di tahun 1883. Permainan ini terdiri
dari tiga tiang dan sejumlah cakram dengan ukuran berbeda-beda yang bisa dimasukkan
ke tiang mana saja. Permainan Menara Hanoi dimulai dengan cakram-cakram yang
tertumpuk rapi dari cakram paling besar sampai ke cakram paling terkecil dalam salah
satu tiang, sehingga membentuk kerucut.
Objektif dari permainan Menara Hanoi adalah memindahkan tumpukan n buah
cakram berlubang dari tiang asal ke tiang tujuan dengan memanfaatkan sebuah tiang
perantara. Piringan berukuran tidak sama. Jumlah pemindahan dalam n buah cakram
adalah sebanyak 2n -1 kali. Permainan Menara Hanoi memiliki beberapa aturan yang
harus dipatuhi untuk menyelesaikan teka-teki. Dalam melakukan pemindahan cakram
harus mengikuti aturan berikut:
 Hanya satu cakram yang boleh dipindahkan dalam setiap kal perpindahan.
 Setiap perpindahan berupa pengambilan cakram teratas dari satu tiang dan
memasukkannya ke tiang lain, di atas cakram lain yang mungkin sudah ada di tiang
tersebut.
 Tidak boleh meletakkan cakram di atas cakram lain yang lebih kecil
Tower of Hanoi sering digunakan dalam riset psikologi dalam pemecahan
masalah. Terdapat pula variasi dari Tower of Hanoi, yaitu Tower of London untuk
diagnose neuropsikologi dan pengerjaan fugsi eksklusif. Tower of Hanoi juga sering
dipakai dalam skema Backup Rotation ketika membuat penggandaan data komputer
dimana banyak tape/ media penyimpanan termasuk didalamnya. Tower of Hanoi dapat
dipakai untuk melatih kreativitas anak-anak dalam masa pertumbuhan. Selain itu, Tower
of Hanoi juga sering diimplementasikan dalam proses pengajaran algoritma rekursif
dasar. Tower of Hanoi juga digunakan untuk tes memory oleh para neuropsikolog untuk
mengevaluasi amnesia.
B. Rekursif
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

Rekursif adalah salah satu metode dalam dunia matematika dimana definisi
sebuah fungsi mengandung fungsi itu sendiri. Dalam dunia pemrograman, rekursi
diimplementasikan dalam sebuah fungsi yang memanggil dirinya sendiri

misalkan   menyatakan langkah paling sedikit yang dibutuhkan untuk menyelesaikan


menara Hanoi yang memiliki   buah piringan. Berdasarkan percobaan sebelumnya
diperoleh

yang mana merupakan barisan rekursif. Berapa langkah paling sedikit untuk


menyelesaikan menara Hanoi yang memiliki 4 buah piringan? lebih jauh lagi, untuk   
buah piringan? Tentu, kita dapat melihat polanya dengan mudah. Untuk   buah piringan
maka kita punya rumus rekursif
 dan   untuk 
Belum lengkap rasanya jika tidak disertai bentuk eksplisit dari rumus rekursif tersebut.
Untuk mencarinya, pandang barisan rekursif berikut

Jumlahkan setiap baris untuk mendapatkan


      
Perhatikan bahwa   merupakan deret geometri berhingga
dengan rasio 2 yang memiliki jumlah  . Karena  , jadi   dapat
dituliskan sebagai

Akhirnya kita mendapatkan bentuk eksplisit dari   sebagai

, untuk 

Dari sini kita tahu bahwa langkah paling sedikit untuk menyelesaikan menara Hanoi
dengan 5 piringan adalah sebanyak   langkah. 
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

III. Flow Chart

IV. Implementasi
unit HanoiIqbal;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Timer1: TTimer;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Panel1Click(Sender: TObject);
procedure Panel2Click(Sender: TObject);
procedure Panel3Click(Sender: TObject);
procedure Label3Click(Sender: TObject);

private
{ Private declarations }
LA,LB,LC:TStringlist;// Pembagian Tiang Pertama,Kedua,danketiga
Kotak:Array of Tshape; // Array Piringan (baloknya)
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

procedure Hanoi(N:Integer; A,T,S:TStringList);


procedure HanoiMove(A,T :TstringList);

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);


begin
LA:=TStringList.Create;
LB:=TStringList.Create;
LC:=TStringList.Create;
Panel1.Caption:=''; // kosongkan Panel
end;
//////////////////// Run /////////////////
procedure TForm1.Button1Click(Sender: TObject);
Var i:Integer;
begin
LA.Clear;
LB.Clear;
LC.Clear;
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

Panel2.Visible:=true; ////
Panel3.Visible:=true; ////
Panel4.Visible:=true; ////

for i:=0 to Length(Kotak)-1 do


// bebaskan dulu memory yang pernah digunakan
Kotak[i].Free;
SetLength(Kotak,StrToInt(edit1.Text));
for i:=0 to Length(Kotak)-1 do begin // buat piringan sejumlah N yang di masukkan
Kotak[i]:=TShape.Create(Self);
Kotak[i].Shape:=StRoundRect;
Kotak[i].Width:=20*(i+1);
Kotak[i].Height:=20;
Kotak[i].Left:=Length(Kotak)*10-(i+1)*10;
Kotak[i].Top:=Panel1.Height+(i-Length(Kotak))*20;
Kotak[i].Parent:=Panel1;

Kotak[i].Brush.Color:=RGB(Random(256),Random(256),Random(256));

///penyesuai lebar panel dengan kotakan yang paling bawah


panel1.Width:=3*(20*(Length(Kotak)+1));
panel1.Left:= (Length(Kotak)*10-(Length(Kotak)+1)*10);
panel2.Width:= 20*(Length(Kotak)+1);
panel2.Left:= (Length(Kotak)*10-(Length(Kotak)+1)*10);
panel3.Width:= 20*(Length(Kotak)+1);
panel3.Left:= Panel2.Width - 10;
panel4.width:= 20*(Length(Kotak)+1);
panel4.Left:= (panel2.Width-10)+(panel3.Left+10)
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

end;

LA.Add('1');LB.Add('2');LC.Add('3');

for

i:=StrToInt(edit1.Text) downto 1 do //nomor pada tiang


LA.Add(IntToStr(i));
Hanoi(LA.Count-1,LA,LC,LB);

end;

procedure
TForm1.HanoiMove(A,T:TStringList);
var x1,y1,x2,y2,dx,tunda,maks:integer;
Begin
tunda:=StrToInt(edit2.Text);
Maks:=StrToInt(edit1.Text);
T.Add(A[A.count-1]);
A.Delete(A.Count-1);
x1:=Kotak[StrToInt(T[T.count-1])-1].Left; //x asal
y1:=Kotak[strToInt(T[T.count-1])-1].Top; //y asal
x2:=(StrToInt(T[0])-1)*(maks+1)*20+length(Kotak)*10-StrToInt(T[T.count-1])*10; //x
Tujuan
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

y2:=Panel1.Height-(T.Count-1)*20;

// y tujuan
dx:=(x2-x1) div abs(x2-x1); dx:=5*dx; //delta gerak mendatar
while(y1>0) do begin // gerak naik
dec(y1,5);
Kotak[StrToInt(T[T.count-1])-1].Top:=y1;
Sleep(tunda);
Application.ProcessMessages;
end;
while (x2*dx)>(x1*dx) do begin // gerak mendatar
x1:=x1+dx;
Kotak[StrToInt(T[T.count-1])-1].Left:=x1;
Sleep(tunda);
Application.ProcessMessages;
end;
While (y2>y1) do begin // gerak menurun
inc(y1,5);
Kotak[StrToInt(T[T.count-1])-1].Top:=y1;
Sleep(tunda);
Application.ProcessMessages;
end;
end;
procedure
TForm1.Hanoi(N:Integer; A,T,S:TStringList); // inti procedure Hanoi
begin
if N=1 then HanoiMove(A,T)
else begin
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

Hanoi(N-1,A,S,T);
HanoiMove(A,T);
Hanoi(N-1,S,T,A);
end;
end;

////////////////////////////////////////////////
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if label3.Visible then label3.Visible:=false else
label3.Visible:=true;
end;
///////////////////////////////////////////////
procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.Clear;
edit2.Clear;
end;
/////////////////////////////////////////////
procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;

end.
/// M IQBAL MAULANA – JTD 4C-16 ///
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

V. Hasil dan Pembahasan


A. Hasil
 Tampilan Project sebelum di run

 Tampilan Project Sesudah di run


Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

B. Pembahasan
 Solusi yang digunakan pada Menara Hanoi menggunakan metode rekusif.
Pada gambar x dapat diketahui bahwa total pergerakan yang dilakukan oleh Menara
Hanoi pada percobaan dengan input 3 sebanyak 7 pergerkan.

 Fungsi rekursif (fmin) yang


diperoleh dari penyelesaian
Menara Hanoi
 if n = 1, then H(n, a, b, c) = (a dipindahkan ke b)
 if n > 1, then H (n, a, b, c) = H (n – 1, a, c, b) (a dipindahkan ke b)
H (n - 1; c; b; a)
Nama : M IQBAL MAULANA F Praktikum Artificial Intelligence
Kelas/No: JTD 4C / 16 Menara Hanoi

n : total banyaknya kepingan, untuk kepingan berukuran kecil terkecil (selalu berada di paling
atas piramida), dan seperti itu seterusnya sampai n (untuk kepingan terbesar, dan selalu
berada di paling bawah). Fungsi rekursif ini akan memelukan 2 -1 langkah untuk
menyelesaikan permasalahan Menara Hanoi. Langkah tersebut merupakan solusi optimal dari
penyelesaian Menara Hanoi.
 Pada program yang dibuat terdapat 3 menu, yaitu Run (untuk memproses), Delete (Untuk
menghapus nilai-nilai input) dan Close (Untuk menutup program yang sedang
dijalankan).
 Untuk nilai waktu yang dimasukan merupakan waktu pemindahan blok/piringan dari
posisi awal ke berikutnya selama permili second
 Panjang pada panel dapat disesuaikan dengan kebutuhan dari ukuran2 lebar piringan yang
paling bawah

VI. Kesimpulan
Dari praktikum pemrograman Hanoi ini dapat disimpulkan beberapa hasil yaitu diantaranya:
 Penggunaan algoritma program dinamis untuk permasalahan permainan Menara Hanoi
dapat dikategorikan sebagai pemecahan masalah jalur terpendek. Dengan menerapkan
fungsi rekusif.
 Tinggi panel akan mempengaruhi kecepatan perpindahan piringan Menara Hanoi
 Jika Time diberikan nilai input lebih besar maka kecepatan dalam pemindahan piringan
akan lebih lama. Dan sebaliknya jika diberikan nilai input lebih kecil maka kecepatan
dalam pemindahan piringan akan lebih cepat.

VII. Daftar Pustaka


 https://informatika.stei.itb.ac.id/~rinaldi.munir/Stmik/2010-
2011/Makalah2010/MakalahStima2010-099.pdf
 https://informatika.stei.itb.ac.id/~rinaldi.munir/Matdis/2013-
2014/Makalah2013/MakalahIF2120-2013-061.pdf
 https://animathid.wordpress.com/2017/10/14/menara-hanoi-dan-solusi-rumus-
rekursifnya/
 Rekursif adalah salah satu metode dalam dunia matematika dimana definisi sebuah
fungsi mengandung fungsi itu sendiri. Dalam dunia pemrograman, rekursi
diimplementasikan dalam sebuah fungsi yang memanggil dirinya sendiri (itp.ac.id)

Anda mungkin juga menyukai