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