Anda di halaman 1dari 7

LAPORAN HASIL PRAKTIKUM

ARTIFICIAL INTELLIGENCE
PROGRAM MENARA HANOI

Oleh :

Ardyan Guruh A.R


1041160024
4B JTD / 03

JURUSAN TEKNIK ELEKTRO


PROGRAM STUDI JARINGAN TELEKOMUNIKASI DIGITAL
POLITEKNIK NEGERI
MALANG
2013
MENARA HANOI

1. ALAT & BAHAN


Alat dan bahan yang digunakan dalam praktikum sebagai berikut:

1) Personal computer,
2) Software Delphi 7

2. DASAR TEORI
► Delphi 7
Delphi adalah Suatu bahasa pemrograman yang menggunakan visualisasi sama
seperti bahasa pemrograman Visual Basic ( VB ) . Namun Delphi menggunakan
bahasa yang hampir sama dengan pascal (sering disebut objeck pascal ) . Sehingga
lebih mudah untuk digunakan . Bahasa pemrograman Delphi dikembangkan oleh
CodeGear sebagai divisi pengembangan perangkat lunak milik embarcadero . Divisi
tersebut awalnya milik borland , sehingga bahasa ini memiliki versi Borland Delphi.
Delphi juga menggunakan konsep yang berorientasi objek ( OOP ) ,
maksudnya pemrograman dengan membantu sebuah aplikasi yang mendekati keadaan
dunia yang sesungguhnya . Hal itu bisa dilakukan dengan cara mendesign objek untuk
menyelesaikan masalah . OOP ini memiliki beberapa unsur yaitu ; Encapsulation
( pemodelan ) , Inheritance ( Penurunan ) , Polymorphism ( Polimorfisme)

3. FLOWCHART
4. SCRIPT

unit Unit1; procedure TForm1.Button1Click(Sender:


TObject);
interface Var i:Integer;
begin
uses LA.Clear;
Windows, Messages, SysUtils, Variants, LB.Clear;
Classes, Graphics, Controls, Forms, LC.Clear;
Dialogs, ExtCtrls, StdCtrls, ComCtrls; // for i:=0 to Length(Kotak)-1 do
// bebaskan dulu memory yang pernah
type digunakan
TForm1 = class(TForm) Kotak[i].Free;
Label1: TLabel; SetLength(Kotak,StrToInt(edit1.Text));
Edit1: TEdit; for i:=0 to Length(Kotak)-1 do begin // buat
Edit2: TEdit; piringan sejumlah N
Label2: TLabel; Kotak[i]:=TShape.Create(Self);
Label3: TLabel; Kotak[i].Shape:=StRoundRect;
Button1: TButton; Kotak[i].Width:=20*(i+1);
Button2: TButton; Kotak[i].Height:=20;
Button3: TButton; Kotak[i].Left:=Length(Kotak)*10-(i+1)*10;
Timer1: TTimer; Kotak[i].Top:=Panel1.Height+(i-
Panel1: TPanel; Length(Kotak))*20;
procedure Button1Click(Sender: TObject); Kotak[i].Parent:=Panel1;
procedure Timer1Timer(Sender: TObject); Kotak[i].Brush.Color:=RGB(Random(256),
procedure FormCreate(Sender: TObject); Random(256),Random(256));
procedure Button2Click(Sender: TObject); end;
procedure Button3Click(Sender: TObject); LA.Add('1');LB.Add('2');LC.Add('3');
private for i:=StrToInt(edit1.Text) downto 1 do //
{ Private declarations } nomor pada tiang
LA,LB,LC:TStringlist; // Tiang LA.Add(IntToStr(i));
Pertama,Kedua,danketiga Hanoi(LA.Count-1,LA,LC,LB);
Kotak:Array of Tshape; // Array Piringan end;
procedure Hanoi(N:Integer; A,T,S procedure
:TStringList); TForm1.HanoiMove(A,T:TStringList);
procedure HanoiMove(A,T :TstringList); var
public x1,y1,x2,y2,dx,tunda,maks:integer;
{ Public declarations } Begin
end; tunda:=StrToInt(edit2.Text);
Maks:=StrToInt(edit1.Text);
var T.Add(A[A.count-1]);
Form1: TForm1; A.Delete(A.Count-1);
x1:=Kotak[StrToInt(T[T.count-1])-1].Left; //
implementation x asal
y1:=Kotak[strToInt(T[T.count-1])-1].Top; //
{$R *.dfm} y asal
x2:=(StrToInt(T[0])- end;
1)*(maks+1)*20+length(Kotak)*10- end;
StrToInt(T[T.count-1])*10; // x Tujuan
y2:=Panel1.Height-(T.Count-1)*20; // y procedure TForm1.Timer1Timer(Sender:
tujuan TObject);
dx:=(x2-x1) div abs(x2-x1); dx:=5*dx; // begin
delta gerak mendatar if label3.Visible then label3.Visible:=false else
while(y1>0) do begin // gerak naik label3.Visible:=true;
dec(y1,5); end;
Kotak[StrToInt(T[T.count-1])-1].Top:=y1;
Sleep(tunda); procedure TForm1.FormCreate(Sender:
Application.ProcessMessages; TObject);
end; begin
while (x2*dx)>(x1*dx) do begin // gerak LA:=TStringList.Create;
mendatar LB:=TStringList.Create;
x1:=x1+dx; LC:=TStringList.Create;
Kotak[StrToInt(T[T.count-1])-1].Left:=x1; Panel1.Caption:=''; // kosongkan Panel
Sleep(tunda); end;
Application.ProcessMessages;
end;
While (y2>y1) do begin // gerak menurun
inc(y1,5); procedure TForm1.Button2Click(Sender:
Kotak[StrToInt(T[T.count-1])-1].Top:=y1; TObject);
Sleep(tunda); begin
Application.ProcessMessages; edit1.Clear;
end; edit2.Clear;
end; end;
procedure TForm1.Hanoi(N:Integer;
A,T,S:TStringList); // inti procedure Hanoi procedure TForm1.Button3Click(Sender:
begin TObject);
if N=1 then HanoiMove(A,T) begin
else begin close;
Hanoi(N-1,A,S,T); end;
HanoiMove(A,T);
Hanoi(N-1,S,T,A); end.
5. HASIL DAN ANALISA
Program Menara Hanoi sebelum di-RUN

Program Menara Hanoi ketika di-RUN


Jumlah piringan : diisi berapa piringan yang ingin dimainkan

Waktu Pemindahan : semakin kecil nilainya semakin cepat waktu pemindahan

Tampilan progam Menara Hanoi ketika selesai melakukan eksekusi

Program yang dibuat untuk Tower of  Hanoi tidak hanya menghasilkan


pemyelesaian yang lengkap, tetapi juga menghasilkan solusi terbaik yang mungkin
dicapai. Penyelesaian masalah ini dapat juga diaplikasikan untuk tower dengan jumlah
kepingan lebih dari tiga. Dalam hal ini persoalan dipilih tiga keping
untuk meminimumkan ruang solusi yang ada
6. KESIMPULAN

Jika jumlah piringan yang akan dipindahkan adalah sejumlah n piringan maka
pemecahannya sebagai berikut :
 Jika n = 1 maka pindahkan dari Menara Sumber ke Menara Tujuan dan selesai
 Pindahkan n-1 piringan dari menara Sumber ke Menara Bantuan,  gunakan
Menara Tujuan sebagai Bantuan
 Pada Posisi Piringan di Menara Sumber = n pindahkan langsung ke Menara
Tujuan
 Pindahkan sisa sejumlah n-1 piringan di Menara Bantuan ke Menara Tujuan,
gunakan Menara Sumber sebagai Bantuan

7. REFRENSI
http://robo-warior.blogspot.com/2012/10/modul-borland-delphi-7.html
http://siomah.blogspot.com/2012/03/tower-of-hanoi-description.html
http://mikarotua.blogspot.com/2011/06/program-menara-hanoi-dengan-
menampilkan.html
http://www.scribd.com/doc/42880827/algoritma-menara-hanoi#download

Anda mungkin juga menyukai