text maarque kanan

INGATKAN DIRIMU UNTUK MENGATUR SEGALA SESUATU SUDAH DI ATUR ALLOH

salju

Sabtu, 03 Desember 2011

menara hanoi

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.

Tidak ada komentar:

Posting Komentar