Tgs - 1 - M Iqbal Maulana F
Tgs - 1 - M Iqbal Maulana F
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
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
, 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
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
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Panel2.Visible:=true; ////
Panel3.Visible:=true; ////
Panel4.Visible:=true; ////
Kotak[i].Brush.Color:=RGB(Random(256),Random(256),Random(256));
end;
LA.Add('1');LB.Add('2');LC.Add('3');
for
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
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.
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.