1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| PROGRAM TUERME_VON_HANOI_NACH_WB; USES CRT; CONST MAX=10;SPERRE=100; VAR T:ARRAY[1..3,1..MAX]OF BYTE; A:ARRAY[1..3]OF BYTE; SCHEIBE,I,J,N,N1,K,L,X,Y:BYTE; Z:INTEGER; PROCEDURE NEHMEN(VAR SCHEIBE:BYTE;R:BYTE); VAR I:BYTE; BEGIN SCHEIBE:=T[R,1]; FOR I:=1 TO A[R]-1 DO T[R,I]:=T[R,I+1]; T[R,A[R]]:=SPERRE;A[R]:=PRED(A[R]) END; PROCEDURE LEGEN(SCHEIBE,R:BYTE); VAR I:BYTE; BEGIN FOR I:=A[R] DOWNTO 1 DO T[R,I+1]:=T[R,I]; T[R,1]:=SCHEIBE;A[R]:=SUCC(A[R]) END; BEGIN REPEAT CLRSCR;WRITE('Wieviele Scheiben (1-',MAX,') ? ');READLN(N) UNTIL N IN[1..MAX]; FOR I:=1 TO N DO T[1,I]:=I;A[1]:=N; FOR I:=2 TO 3 DO FOR J:=1 TO N DO T[I,J]:=SPERRE; A[2]:=0;A[3]:=0;J:=1;Z:=1;N1:=1;IF N MOD 2=0 THEN N1:=2; NEHMEN(SCHEIBE,J);K:=J;J:=J+N1;IF J>3 THEN J:=J-3; WRITELN(Z:4,') Scheibe 1 von Turm ',K:2,' nach Turm',J:2); WHILE T[1,1]<>T[3,1] DO BEGIN L:=6-J-K;LEGEN(SCHEIBE,J); IF T[K,1]>T[L,1] THEN BEGIN X:=K;Y:=L END ELSE BEGIN X:=L;Y:=K END; NEHMEN(SCHEIBE,Y);Z:=SUCC(Z); WRITELN(Z:4,') Scheibe',SCHEIBE:3,' von Turm ',Y:2,' nach Turm',X:2); LEGEN(SCHEIBE,X);NEHMEN(SCHEIBE,J);Z:=SUCC(Z); K:=J;J:=J+N1;IF J>3 THEN J:=J-3; WRITELN(Z:4,') Scheibe 1 von Turm ',K:2,' nach Turm',J:2) END; WRITELN;WRITELN(Z:4,'-mal habe ich geschleppt !') END. |