Basic Pascal Tutorial/Chapter 4/Solution

From Lazarus wiki
Revision as of 17:46, 5 January 2010 by Kees (talk | contribs)
Jump to navigationJump to search
The 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) <delphi> (* Author: Tao Yue

  Date:      13 July 2000
  Description:
     Solves the Towers of Hanoi
  Version:
     1.0 - original version
  • )

program TowersofHanoi;

var

  numdiscs : integer;

(********************************************************)

procedure DoTowers (NumDiscs, OrigPeg, NewPeg, TempPeg : integer); (* Explanation of variables:

     Number of discs -- number of discs on OrigPeg
     OrigPeg -- peg number of the tower
     NewPeg -- peg number to move the tower to
     TempPeg -- peg to use for temporary storage
  • )

begin

  (* Take care of the base case -- one disc *)
  if NumDiscs = 1 then
     writeln (OrigPeg, ' ---> ', NewPeg)
  (* Take care of all other cases *)
  else
     begin
        (* First, move all discs except the bottom disc
           to TempPeg, using NewPeg as the temporary peg
           for this transfer *)
        DoTowers (NumDiscs-1, OrigPeg, TempPeg, NewPeg);
        (* Now, move the bottommost disc from OrigPeg
           to NewPeg *)
        writeln (OrigPeg, ' ---> ', NewPeg);
        (* Finally, move the discs which are currently on
           TempPeg to NewPeg, using OrigPeg as the temporary
           peg for this transfer *)
        DoTowers (NumDiscs-1, TempPeg, NewPeg, OrigPeg)
     end

end;

(********************************************************)


begin (* Main *)

  write ('Please enter the number of discs in the tower ===> ');
  readln (numdiscs);
  writeln;
  DoTowers (numdiscs, 1, 3, 2)

end. (* Main *) </delphi>

previous contents next