program trap1; { -> 264 } { integration by the trapezoidal rule } var done : boolean; sum,upper,lower : real; pieces : integer; function fx(x: real): real; { find f(x)=1/x } { watch out for x=0 ! } begin fx:=1.0/x end; procedure trapez(lower,upper : real; pieces : integer; var sum : real); { numerical integration by the trapezoid method } { function is FX, limits are LOWER and UPPER } { with number of regions equal to PIECES } { fixed partition is DELTA_X, answer is SUM } var i : integer; x,delta_x,esum,psum : real; begin delta_x:=(upper-lower)/pieces; esum:=fx(lower)+fx(upper); psum:=0.0; for i:=1 to pieces do begin x:=lower+i*delta_x; psum:=psum+fx(x) end; sum:=(esum+2.0*psum)*delta_x*0.5 end; { TRAPEZ } begin { main program } done:=false; lower:=1.0; upper:=9.0; writeln; repeat write('How many sections? '); readln(pieces); if pieces<0 then done:=true else begin trapez(lower,upper,pieces,sum); writeln('area=',sum) end until done end.