Basic Pascal Tutorial/Chapter 4/Solution
From Lazarus wiki
Jump to navigationJump to searchThe printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
4Ga - Solution to Towers of Hanoi (author: Tao Yue, state: unchanged)
1: (* Author: Tao Yue 2: Date: 13 July 2000 3: Description: 4: Solves the Towers of Hanoi 5: Version: 6: 1.0 - original version 7: *) 8: 9: program TowersofHanoi; 10: 11: var 12: numdiscs : integer; 13: 14: (********************************************************) 15: 16: procedure DoTowers (NumDiscs, OrigPeg, NewPeg, TempPeg : integer); 17: (* Explanation of variables: 18: Number of discs -- number of discs on OrigPeg 19: OrigPeg -- peg number of the tower 20: NewPeg -- peg number to move the tower to 21: TempPeg -- peg to use for temporary storage 22: *) 23: 24: begin 25: (* Take care of the base case -- one disc *) 26: if NumDiscs = 1 then 27: writeln (OrigPeg, ' ---> ', NewPeg) 28: (* Take care of all other cases *) 29: else 30: begin 31: (* First, move all discs except the bottom disc 32: to TempPeg, using NewPeg as the temporary peg 33: for this transfer *) 34: DoTowers (NumDiscs-1, OrigPeg, TempPeg, NewPeg); 35: (* Now, move the bottommost disc from OrigPeg 36: to NewPeg *) 37: writeln (OrigPeg, ' ---> ', NewPeg); 38: (* Finally, move the discs which are currently on 39: TempPeg to NewPeg, using OrigPeg as the temporary 40: peg for this transfer *) 41: DoTowers (NumDiscs-1, TempPeg, NewPeg, OrigPeg) 42: end 43: end; 44: 45: (********************************************************) 46: 47: 48: begin (* Main *) 49: write ('Please enter the number of discs in the tower ===> '); 50: readln (numdiscs); 51: writeln; 52: DoTowers (numdiscs, 1, 3, 2) 53: end. (* Main *)
previous | contents | next |