-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsample007.fl
54 lines (47 loc) · 1.56 KB
/
sample007.fl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
program TowersofHanoi;
var
numdiscs : integer;
(********************************************************)
procedure DoTowers (NumDiscs : integer; OrigPeg : integer; NewPeg : integer; 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
begin
writeInteger(OrigPeg);
writeString (' ---> ');
writeInteger(NewPeg);
writeString("\n")
end
(* 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 *)
writeInteger(OrigPeg);
writeString (' ---> ');
writeInteger(NewPeg);
writeString("\n");
(* 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 *)
writeString ('Please enter the number of discs in the tower ===> ');
numdiscs := readInteger ();
writeString("\n");
DoTowers (numdiscs, 1, 3, 2);
writeString("\n")
end. (* Main *)