(* Compute Fibonacci numbers. *) PROGRAM IS TYPE IARRAY IS ARRAY OF INTEGER; VAR N := 40; VAR I := 0; VAR fibs := IARRAY {N OF 0}; VAR j,n := 0; PROCEDURE init(a : IARRAY) IS VAR i : INTEGER := 0; BEGIN a[0] := 1; a[1] := 1; FOR i := 2 TO N - 1 DO a[i] := I; END; END; PROCEDURE fib(i: INTEGER) : INTEGER IS BEGIN IF fibs[i] = I THEN fibs[i] := fib(i-2) + fib(i-1); END; RETURN fibs[i]; END; BEGIN init(fibs); WRITE("Enter indices of eight Fibonacci numbers:"); FOR j := 0 TO 7 DO READ(n); IF n > N THEN (* A bug -- should be >= N *) WRITE("Maximum index is ", N); ELSE WRITE(n, " ", fib(n)); END; END; END;