{************************************************
                 Hugo Eti‚vant
     http://www.multimania.com/cyberzoide/
      e-mail : cyberzoide@multimania.com
      (pour une aide en Turbo Pascal 7.0)
*************************************************}

(*************************************************************
 *         IMPLEMENTATION EN PASCAL DU JEU DE HANOI          *
 * On a trois piles dont une contenant N anneaux empil‚s par *
 * rayon croissant. On d‚sire les d‚placer les uns aprŠs les *
 * autres vers une autre pile. Attention, dans toute pile,   *
 * les anneaux doivent ˆtre plac‚s par ordre croissant de    *
 * rayon. On se sert donc d'une pile interm‚diaire.          *
 * Le nombre d'it‚rations r‚pond … une loi g‚om‚trique :     *
 * NbIter = 2^N-1 !!!!                                      *
 *************************************************************)

program hanoi;

type pile=record
     nom:char;
     taille:integer;
     end;

procedure deplace(var x,y:pile; var i:integer);
begin
inc(i);
dec(x.taille);
inc(y.taille);
writeln(x.nom,' -> ',y.nom);
if (i mod 22)=0 then
   begin
   writeln('Appuyez sur une touche pour continuer...');
   readln;
   end;  
end;

procedure bouge(a,b,c:pile; n:integer; var i:integer);
begin
if n=1 then deplace(a,c,i)
   else
       begin
       bouge(a,c,b,n-1,i);
       deplace(a,c,i);
       bouge(b,a,c,n-1,i);
       end;
end;

var a,b,c:pile;  {pile A:Origine, pile B:temporaire, pile C:Destination}
    n,i:integer;

BEGIN
n:=5; { N : nombre d'anneaux}
i:=0; { I : nombre d'it‚rations}
repeat
write('Entrez le nombre (petit) d''anneaux : ');
readln(n);
until n IN [1..5];
a.nom:='A'; a.taille:=n;
b.nom:='B'; b.taille:=0;
c.nom:='C'; c.taille:=0;
writeln('d‚but');
bouge(a,b,c,n,i);
writeln('fin');
writeln('Nombre d''it‚rations = ',i);
END.