Eugeniusz Jakubas
programy źródłowe w Pascalu

Stąd można pobrać teksty źródłowe poniższych 57 programów w Pascalu pr-pascal.zip - 34 kB

57. Wieże Hanoi (rekurencja)

program Wieze_Hanoi;
uses graph;
var   karta,tryb,n,ilK,ypocz,gr,j:integer;
      t :array[1..3,1..12] of integer;
      tw:array[1..3] of integer;
procedure przeloz_krazek(skad, dokad : integer);
begin
  tw[dokad]:=tw[dokad]+1; t[dokad,tw[dokad]]:=t[skad,tw[skad]];
  setFillStyle(1,black); setColor(black);
  fillEllipse(skad*210-100,ypocz-tw[skad]*gr,t[skad,tw[skad]]*j,gr div 2-1);
  t[skad,tw[skad]]:=0; tw[skad]:=tw[skad]-1;
  setFillStyle(1,t[dokad,tw[dokad]]);
  fillEllipse(dokad*210-100,ypocz-tw[dokad]*gr,t[dokad,tw[dokad]]*j,gr div 2-1);
  readLn;
end;
procedure przeloz(ile, skad, dokad, roboczy : integer);
begin
  if ile=1 then przeloz_krazek(skad, dokad)
  else begin
         przeloz(ile-1, skad, roboczy, dokad);
         przeloz_krazek(skad, dokad);
         przeloz(ile-1, roboczy, dokad, skad)
       end;
end;
begin
  karta:=vga; tryb:=vgaHi; initGraph(karta, tryb,'');
  writeLn('Nacisnij dowolny klawisz');
  ilK:=3; j:=19-ilK; gr:=30; j:=19-ilK; ypocz:=420;
  for n:=1 to ilK do t[1,n]:=ilK-n+1;
  tw[1]:=ilK;
  for n:=1 to tw[1] do
    begin
      setFillStyle(1,t[1,n]);
      fillEllipse(1*210-100,ypocz-n*gr,t[1,n]*j,gr div 2-1);
    end;
  readLn;
  przeloz(ilK,1,3,2);
  closeGraph;
end.
wieze-Hanoi.gif (612 bytes)