PROGRAM HANOI(INPUT,OUTPUT); (*FM VOM 28.MAI 1984*) CONST MAXHOEHE=30; VAR HOEHE,I:INTEGER; TURM:ARRAY[1..3,1..MAXHOEHE]OF INTEGER; THOEHE:ARRAY[1..3]OF INTEGER; PROCEDURE ANZEIGE; (*LFD. TURMAUFBAU ANZEIGEN*) VAR I,J:INTEGER; BEGIN FOR I:=1 TO 3 DO BEGIN WRITE("TURM",I,":"); FOR J:=1 TO THOEHE[I] DO WRITE(TURM[I,J]); WRITELN; END; END;(*ANZEIGE*) PROCEDURE VERLEGE(VON,NACH:INTEGER); (*VERLEGE DIE OBERSTE SCHEIBE*) BEGIN THOEHE[NACH]:=THOEHE[NACH]+1; TURM[NACH,THOEHE[NACH]]:=TURM[VON,THOEHE[VON]]; THOEHE[VON]:=THOEHE[VON]-1; ANZEIGE END;(*VERLEGE*) PROCEDURE BEWEGE(H,S,Z:INTEGER); (*REKURSIVE PROZEDUR: *) (*BEWEGT SCHEIBE H VON S NACH Z *) (*FALLS NOETIG WIRD EIN OBENLIEGENDER TURM *) (*AUF DAS HILFSFELD GESTELLT *) BEGIN IF H>1 THEN BEWEGE(H-1,S,6-S-Z); WRITELN("SCHEIBE",H,"VON",S,"NACH",Z); VERLEGE(S,Z); IF H>1 THEN BEWEGE(H-1,6-S-Z,Z); END;(*BEWEGE*) BEGIN(*HAUPTPROGRAMM*) WRITELN("TUERME VON HANOI:"); WRITELN("================="); WRITELN; REPEAT WRITELN("FUER WELCHE TURMHOEHE? "); READLN(HOEHE); IF HOEHE<1 THEN WRITELN("ZU KLEIN!"); IF HOEHE>MAXHOEHE THEN WRITELN("ZU GROSS!"); UNTIL(HOEHE>=1)AND(HOEHE<=MAXHOEHE); (*GRUNDSTELLUNG AUFBAUEN UND ANZEIGEN*) FOR I:=1 TO HOEHE DO TURM[1,I]:=HOEHE+1-I; THOEHE[1]:=HOEHE; THOEHE[2]:=0; THOEHE[3]:=0; ANZEIGE; BEWEGE(HOEHE,1,3); WRITELN("TURM STEHT JETZT AUF 3") END.