{ This simple Pascal program computes a definite integral using Simpson's approximation. Efficiency has been sacrificed for clarity, so it should be easy to follow the logic of the program. - DJP } Var { Declare variables } a : Integer; { Left point } b : Integer; { Right point } d : Real; { Delta x } i : Integer; { Iteration } n : Integer; { No. of intervals } SubTotal : Real; Function y(x:real):Real; { Define your function here } Begin y:=1/x End; Function Coefficient(i:Integer):Integer; Begin If (i=0) or (i=n) Then Coefficient:=1 Else Coefficient:=(i Mod 2)*2+2 { Notes: The MOD operater returns the remainder of a division. This allows us to determine if the partition is odd or even. MOD 2 = 0 MOD 2 = 1 An examination of the coefficients of a typical approximation sum shows an interesting pattern: Odd partitions have 4 as a coefficient and even partitions have 2 as a coefficient. The first and last partitions are exceptions to this rule. This pattern is used as a basis for calculating the coefficient of a given partition. } End; Function xi(i:Integer):Real; Begin xi:=a+i*d End; Begin a:=1; b:=2; Repeat Write('Subintervals? '); ReadLn(n); Until (n Mod 2)=0; { Even number required } d:=(b-1)/n; WriteLn; WriteLn(' n xi f(xi) c cf(xi)'); WriteLn('-------------------------------'); For i:=0 to n Do Begin WriteLn(i:3, xi(i):8:3, y(xi(i)):8:3, Coefficient(i):4, Coefficient(i)*y(xi(i)):8:3); SubTotal:=SubTotal+Coefficient(i)*y(xi(i)) End; WriteLn; WriteLn('SubTotal',SubTotal:23:3); WriteLn('Result = ', (d/3)*SubTotal:0:50) End. { Quick Optimizations: a. Remove the WriteLn statement in the For loop. b. Turn on 80x87 support. c. Consolidate some of the procedures. peace/dp }