Solution 4

From Lazarus wiki
Revision as of 17:46, 5 January 2010 by Kees (talk | contribs)

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