asmodeus94

HanoiAlg

Apr 21st, 2012
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.05 KB | None | 0 0
  1. program kolka;
  2. uses crt;
  3. const n = 3;i = 3;
  4. var k : array [1..n,1..i] of byte;
  5. lista : array [1..1000,1..2] of byte;
  6. ds,zap : byte;
  7. kolejne : integer;
  8. procedure numeracja;
  9. var d,licznik : byte;
  10. begin
  11. licznik:=0;d:=ds;
  12. REPEAT
  13. licznik:=licznik+1;
  14. gotoxy(ds+d,n+3);write(licznik);
  15. d:=d+20;
  16. UNTIL licznik=i;
  17. end;
  18. procedure krecha;
  19. var y,x,d,licznik : byte;
  20. begin d:=ds;licznik:=0;
  21. REPEAT
  22. for y:=1 to n+1 do begin
  23. gotoxy(10+d,y);write('|');
  24. end;
  25. for x:=1 to y+1 do begin
  26.     gotoxy(10-x+d,y);write('x');gotoxy(10+x+d,y);write('x');
  27. end;
  28. d:=d+20;
  29. licznik:=licznik+1;
  30. UNTIL licznik = i;
  31. end;
  32. procedure wieze;
  33. var x,y,d,licznik : byte;
  34. begin d:=ds;licznik:=1;
  35. REPEAT
  36. for y:=1 to n do begin
  37.     for x:=1 to k[y,licznik] do begin
  38.          gotoxy(10-x+d,y);write('O');
  39.          gotoxy(10+x+d,y);write('O');
  40.     end;
  41. end;
  42. d:=d+20;
  43. licznik:=licznik+1;
  44. UNTIL licznik = i+1;
  45. end;
  46. procedure algo;
  47. var a,b : byte;
  48. licznik : integer;
  49. begin licznik:=0;
  50. REPEAT
  51. licznik:=licznik+1;
  52. for a:=1 to n do begin
  53.     if k[a,lista[licznik,1]] <> 0 then begin
  54.        break;
  55.     end;
  56. end;
  57. for b:=n downto 1 do begin
  58. if b=n then begin
  59.    if k[b,lista[licznik,2]] = 0 then begin k[b,lista[licznik,2]]:=k[a,lista[licznik,1]];
  60.    k[a,lista[licznik,1]]:=0;
  61.    break;end;
  62. end;
  63.     if (k[b,lista[licznik,2]]>k[a,lista[licznik,1]])AND(k[b-1,lista[licznik,2]]=0) then begin
  64.        k[b-1,lista[licznik,2]]:=k[a,lista[licznik,1]];
  65.        k[a,lista[licznik,1]]:=0;
  66.        break;
  67.     end;
  68. end;
  69. UNTIL licznik=kolejne;
  70. end;
  71. procedure generujKolka;
  72. var x : byte;
  73. begin
  74. for x:=1 to n do begin
  75.     k[x,zap]:=x;
  76. end;
  77. end;
  78. procedure przesun(akt,A,B,C : byte);
  79. begin kolejne:=kolejne+1;
  80.   if akt > 0 then begin
  81.     przesun(akt-1, A, C, B);writeln(a,' na ',b);
  82.     lista[kolejne,1]:=A;lista[kolejne,2]:=C;
  83.     przesun(akt-1, B, A, C);
  84. end;
  85. end;
  86. begin clrscr;kolejne:=0;zap:=1;ds:=10;generujKolka;
  87. gotoxy(1,9);write('Przed zmiana');krecha;wieze;numeracja;readkey;clrscr;
  88. gotoxy(1,9);write('Po zmianie');
  89. przesun(n,1, 2, 3);algo;krecha;wieze;numeracja;
  90. readkey;end.
Advertisement
Add Comment
Please, Sign In to add comment