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 ≠ (n ÷ 2) × 2;
integer count;
count ≔ 0;
do:
if odd (n) then
n ≔ 3 × n + 1
else
n ≔ n ÷ 2;
count ≔ count + 1;
if n ≠ 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 ⩽ max then goto do;
vprint (n, val);
max ≔ val;
end;
vprint (“...\ndone.”)
end