10  BEGIN REAL PROCEDURE INTERPOLATE(N, X, Z, F); VALUE N, Z;
20     INTEGER N; REAL Z; ARRAY X; REAL PROCEDURE F;
30     BEGIN ARRAY P, Q, T, A[-1:10];
40     INTEGER I, J;  REAL Y;
50     P[-1] := 1; P[0] := F(X[0]);
60     Q[-1] := 0; Q[0] := 1;
70     T[-1] := -1;
80     FOR I := 1 STEP 1 UNTIL N DO
90        BEGIN Y := X[I]; T[0] := F(Y) - P[0];
110          FOR J := 1 STEP 1 UNTIL I-1 DO
120          T[J] := A[J] * T[J-1] + (Y - X[J-1]) * T[J-2] ;
125          A[I] := -(Y - X[I-1])*T[I-2]/T[I-1];
127             END;
130    FOR I := 1 STEP 1 UNTIL N DO
140       BEGIN P[I] := A[I] * P[I-1] + (Z - X[I-1])*P[I-2];
150             Q[I] := A[I] * Q[I-1] + (Z - X[I-1])*Q[I-2] END;
155 FOR I := 0 STEP 1 UNTIL N DO PRINT (N, I, P[I], Q[I]);
160    INTERPOLATE := P[N] / Q[N] END OF PROCEDURE;
200 REAL PROCEDURE F(X); VALUE X; REAL X;
210    F := 4*(X^2 - X + 1)/(X+1) ;
1000 BEGIN ARRAY X[0:10]; REAL Z; INTEGER I, N;
1010 N := 3; Z := 4; FOR I := 0 STEP 1 UNTIL 3 DO X[I] := I;
1020 FOR I := 0 STEP 1 UNTIL 3 DO
1030 BEGIN PRINT("I = ", I); PRINT (INTERPOLATE(I, X, Z, F));
9998 END END
9999 END OF PROGRAM
