(* Compute analytic functions as truncated sums. Determine the recurrence relations of their terms. *) MODULE recurrence; FROM InOut IMPORT WriteString, WriteLn; FROM RealInOut IMPORT WriteReal, ReadReal; VAR n: CARDINAL; i,x,y,s,t: REAL; BEGIN WriteString(' exp'); WriteLn; n := 1; REPEAT ReadReal(x); y := 1.0; i := 0.0; t := 1.0; REPEAT i := i + 1.0; t := t*x/i; y := y+t; UNTIL y+t = y; WriteReal(x,9); WriteReal(y,9); WriteReal(i,9); DEC(n); UNTIL n = 0; WriteString(' sin'); WriteLn; n := 1; REPEAT ReadReal(x); y := x; i := 1.0; s := x*x; t := x; REPEAT i := i + 2.0; t := -t*s/((i-1.0)*i); y := y + t; UNTIL y + t = y; WriteReal(x,9); WriteReal(y,9); WriteReal(i/2.0,9); DEC(n); UNTIL n = 0; WriteString(' cos'); WriteLn; n := 1; REPEAT ReadReal(x); y := 1.0; i := 0.0; s := x*x; t := 1.0; REPEAT i := i + 2.0; t := -t*s/((i-1.0)*i); y := y + t; UNTIL y + t = y; WriteReal(x,9); WriteReal(y,9); WriteReal(i/2.0,9); DEC(n); UNTIL n = 0; WriteString(' arcsin'); WriteLn; n := 1; REPEAT ReadReal(x); y := x; i := 1.0; s := x*x; t := x; REPEAT i := i + 2.0; t := t*s*((i-2.0)*(i-2.0))/((i-1.0)*i); y := y + t; UNTIL y + t = y; WriteReal(x,9); WriteReal(y,9); WriteReal(i/2.0,9); DEC(n); UNTIL n = 0; WriteString(' arctan'); WriteLn; n := 1; REPEAT ReadReal(x); y := x; i := 1.0; s := x*x; t := x; REPEAT i := i + 2.0; t := -t*s*(i-2.0)/i; y := y + t; UNTIL y + t = y; WriteReal(x,9); WriteReal(y,9); WriteReal(i/2.0,9); DEC(n); UNTIL n = 0; WriteString(' ln'); WriteLn; n := 1; REPEAT ReadReal(x); x := x - 1.0; y := x; t := x; i := 1.0; REPEAT i := i + 1.0; t := -t*x*(i-1.0)/i; y := y + t; UNTIL y + t = y; WriteReal(x + 1.0,9); WriteReal(y,9); WriteReal(i,9); DEC(n); UNTIL n = 0; END recurrence.