{$N+} Program CalcPI(input, output); { Not the most efficient Program I've ever written. Mostly it's quick and dirty. The infinite series is very effective converging very quickly. It's much better than Pi/4 = 1 - 1/3 + 1/5 - 1/7 ... which converges like molasses. } { Pi / 4 = 4 * (1/5 - 1/(3*5^3) + 1/(5*5^5) - 1/(7*5^7) + ...) - (1/239 - 1/(3*239^3) + 1/(5*239^5) - 1/(7*239^7) + ...) } {* Infinite series courtesy of Machin (1680 - 1752). I found it in my copy of Mathematics and the Imagination by Edward Kasner and James R. Newman (Simon and Schuster, New York 1940, p. 77) * } Uses Crt; Var Pi_Fourths, Pi : Double; Temp : Double; ct : Integer; num : Integer; Function Power(Number, Exponent : Integer) : double; Var ct : Integer; temp : double; begin temp := 1.00; For ct := 1 to Exponent DO temp := temp * number; Power := temp end; begin ClrScr; ct := 1; num := 1; Pi_Fourths := 0; While ct < 15 DO begin Temp := (1.0 / (Power(5, num) * num)) * 4; if ct MOD 2 = 1 then Pi_Fourths := Pi_Fourths + Temp ELSE Pi_Fourths := Pi_Fourths - Temp; Temp := 1.0 / (Power(239, num) * num); if ct MOD 2 = 1 then Pi_Fourths := Pi_Fourths - Temp ELSE Pi_Fourths := Pi_Fourths + Temp; ct := ct + 1; num := num + 2; end; Pi := Pi_Fourths * 4.0; Writeln( 'PI = ', Pi); end.