(************************************************* : : HANOI PROGRAM : : This one came in and got mixed up with a bunch : of other programs and since it did not have a comment : section I don't know who to give credit to. So if : anyone recognizes his own style, drop me a line and : I will update this spot to give you proper credit. : I included it because it is a excellent example : of recursive procedures. It nests deeply and demon- : strates how local versus global variable are keep : separate. ****************************************************) PROGRAM HANOI; VAR TOTAL : INTEGER; PROCEDURE MOVETOWER(HEIGHT, FROMNEEDLE, TONEEDLE, USINGNEEDLE : INTEGER); PROCEDURE MOVEDISK(TAKEOFF, PUTON : INTEGER); BEGIN WRITELN(TAKEOFF, '->', PUTON) END; (* MOVEDISK *) BEGIN (* MOVETOWER *) IF HEIGHT > 0 THEN BEGIN MOVETOWER(HEIGHT-1, FROMNEEDLE, USINGNEEDLE, TONEEDLE); MOVEDISK(FROMNEEDLE, TONEEDLE); MOVETOWER(HEIGHT-1, USINGNEEDLE, TONEEDLE, FROMNEEDLE); END END; (* MOVETOWER *) BEGIN (* MAIN PROGRAM *) WRITE('ENTER NUMBER OF DISKS?'); READ(TOTAL); WRITELN; MOVETOWER( TOTAL, 1, 3, 2) END. (* HANOI *) .