![]() |
Eugeniusz Jakubas |
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.
|
![]() |