begin
comment
321.a60: oct '90
Erik Schoenfelder
This is the
0. Start with a natural number n.
1. If n is odd, set n to be 3 * n + 1
If n is even, set n to be n / 2
Repeat step 1 until n is equal 1.
2. Print the number of repetitons.
fun.
And: Who knows, if this termimates for any n...
;
integer procedure doit (n);
value n;
integer n;
begin
boolean procedure odd (x);
value x; integer x;
odd := n notequal (n 'div' 2) * 2;
integer count;
count := 0;
do:
if odd (n) then
n := 3 * n + 1
else
n := n 'div' 2;
count := count + 1;
if n notequal 1 then goto do;
doit := count;
end;
integer i, n, val, max, NN;
NN := 12;
vprint ("Hi!\n n iterations\n");
for i := 1 step 1 until NN do
vprint (i, doit (i));
vprint ("...");
vprint ("\nnow looking for maxima:");
vprint ("\n n iterations\n");
n := 0; max := -1;
for i := 1 step 1 until NN do begin
do:
n := n + 1;
val := doit (n);
if val notgreater max then goto do;
vprint (n, val);
max := val;
end;
vprint ("...\ndone.")
end