Uses wincrt;
procedure MenaraHanoi(Jumlah : Integer;
Sumber,Tujuan,Bantuan : Char;
var Langkah,Jumlah_A,
Jumlah_B,Jumlah_C,Waktu : Integer);
Var
Baris_Sumber,Kolom_Sumber,
Baris_Tujuan,Kolom_Tujuan : Integer;
Begin
if Jumlah > 0 Then
Begin
MenaraHanoi(Jumlah-1,Sumber,Bantuan,Tujuan,
Langkah,Jumlah_A,Jumlah_B,Jumlah_C,Waktu);
Langkah := Langkah+1;
if Sumber = 'A' Then
Begin
Kolom_Sumber := 30;
Baris_Sumber := 24-Jumlah_A;
Jumlah_A := Jumlah_A-1;
End
Else
if Sumber = 'B' Then
Begin
Kolom_Sumber := 40;
Baris_Sumber := 24-Jumlah_B;
Jumlah_B := Jumlah_B-1;
End
Else
Begin
Kolom_Sumber := 50;
Baris_Sumber := 24-Jumlah_C;
Jumlah_C := Jumlah_C-1;
End;
if Tujuan = 'A' Then
Begin
Kolom_Tujuan := 30;
Jumlah_A := Jumlah_A+1;
Baris_Tujuan := 24-Jumlah_A;
End
Else
if Tujuan = 'B' Then
Begin
Kolom_Tujuan := 40;
Jumlah_B := Jumlah_B+1;
Baris_Tujuan := 24-Jumlah_B;
End
Else
Begin
Kolom_Tujuan := 50;
Jumlah_C := Jumlah_C+1;
Baris_Tujuan := 24-Jumlah_C;
End;
GotoXY(Kolom_Sumber,Baris_Sumber); Write(' ');
GotoXY(Kolom_Tujuan,Baris_Tujuan); Write(Jumlah);
GotoXY(18,24); Write(Langkah);
MenaraHanoi(Jumlah-1,Bantuan,Tujuan,Sumber,
Langkah,Jumlah_A,Jumlah_B,Jumlah_C,Waktu);
End;
End;
Var
Jumlah, Langkah : Integer;
Sumber,Bantuan,Tujuan : Char;
I,Baris : Integer;
Jumlah_A,Jumlah_B,Jumlah_C : Integer;
Waktu : Integer;
Begin
ClrScr;
Write('Berapa Piringan Yang akan dipindah ? ');
ReadLn(Jumlah);
Write('Waktu yang Anda inginkan (0-32) detik ? ');
ReadLn(waktu);
ClrScr;
GotoXY(25,24); WriteLn(' Sumber Bantuan Tujuan');
For I:=Jumlah DownTo 1 Do
Begin
Baris := 23-(Jumlah-I);
GotoXY(30,Baris); WriteLn(I);
End;
Langkah := 0;
Sumber :='A';
Bantuan :='B';
Tujuan :='C';
Jumlah_A := Jumlah;
Jumlah_B := 0;
Jumlah_C := 0;
GotoXY(1,24); Write('Jumlah Langkah = ');
MenaraHanoi(Jumlah,Sumber,Tujuan,Bantuan,
Langkah,Jumlah_A,Jumlah_B,Jumlah_C,Waktu);
ReadLn;
End.
procedure MenaraHanoi(Jumlah : Integer;
Sumber,Tujuan,Bantuan : Char;
var Langkah,Jumlah_A,
Jumlah_B,Jumlah_C,Waktu : Integer);
Var
Baris_Sumber,Kolom_Sumber,
Baris_Tujuan,Kolom_Tujuan : Integer;
Begin
if Jumlah > 0 Then
Begin
MenaraHanoi(Jumlah-1,Sumber,Bantuan,Tujuan,
Langkah,Jumlah_A,Jumlah_B,Jumlah_C,Waktu);
Langkah := Langkah+1;
if Sumber = 'A' Then
Begin
Kolom_Sumber := 30;
Baris_Sumber := 24-Jumlah_A;
Jumlah_A := Jumlah_A-1;
End
Else
if Sumber = 'B' Then
Begin
Kolom_Sumber := 40;
Baris_Sumber := 24-Jumlah_B;
Jumlah_B := Jumlah_B-1;
End
Else
Begin
Kolom_Sumber := 50;
Baris_Sumber := 24-Jumlah_C;
Jumlah_C := Jumlah_C-1;
End;
if Tujuan = 'A' Then
Begin
Kolom_Tujuan := 30;
Jumlah_A := Jumlah_A+1;
Baris_Tujuan := 24-Jumlah_A;
End
Else
if Tujuan = 'B' Then
Begin
Kolom_Tujuan := 40;
Jumlah_B := Jumlah_B+1;
Baris_Tujuan := 24-Jumlah_B;
End
Else
Begin
Kolom_Tujuan := 50;
Jumlah_C := Jumlah_C+1;
Baris_Tujuan := 24-Jumlah_C;
End;
GotoXY(Kolom_Sumber,Baris_Sumber); Write(' ');
GotoXY(Kolom_Tujuan,Baris_Tujuan); Write(Jumlah);
GotoXY(18,24); Write(Langkah);
MenaraHanoi(Jumlah-1,Bantuan,Tujuan,Sumber,
Langkah,Jumlah_A,Jumlah_B,Jumlah_C,Waktu);
End;
End;
Var
Jumlah, Langkah : Integer;
Sumber,Bantuan,Tujuan : Char;
I,Baris : Integer;
Jumlah_A,Jumlah_B,Jumlah_C : Integer;
Waktu : Integer;
Begin
ClrScr;
Write('Berapa Piringan Yang akan dipindah ? ');
ReadLn(Jumlah);
Write('Waktu yang Anda inginkan (0-32) detik ? ');
ReadLn(waktu);
ClrScr;
GotoXY(25,24); WriteLn(' Sumber Bantuan Tujuan');
For I:=Jumlah DownTo 1 Do
Begin
Baris := 23-(Jumlah-I);
GotoXY(30,Baris); WriteLn(I);
End;
Langkah := 0;
Sumber :='A';
Bantuan :='B';
Tujuan :='C';
Jumlah_A := Jumlah;
Jumlah_B := 0;
Jumlah_C := 0;
GotoXY(1,24); Write('Jumlah Langkah = ');
MenaraHanoi(Jumlah,Sumber,Tujuan,Bantuan,
Langkah,Jumlah_A,Jumlah_B,Jumlah_C,Waktu);
ReadLn;
End.
Tidak ada komentar:
Posting Komentar