program Kvadratura; {$mode objfpc}{$H+} uses Classes, SysUtils { you can add units after this }; function f(x:real):real; begin f:=1/x; // f:=x*x*x; // f:=sin(x); end; function pf(x:real):real; begin pf:=ln(x); // pf:=sqr(sqr(x))/4; // pf:=-cos(x); end; function Obdelnik(a,b:real;n:integer):real; var s,h:real; i:integer; begin h:=(b-a)/n; s:=0; for i:=1 to n do s:=s+f(a+(i-1)*h); Obdelnik:=s*h; end; function Lichobeznik(a,b:real;n:integer):real; var s,h:real; i:integer; begin h:=(b-a)/n; s:=(f(a)+f(b))/2; for i:=1 to n-1 do s:=s+f(a+i*h); Lichobeznik:=s*h; end; function Simpson(a,b:real;n:integer):real; var s,h:real; i:integer; begin if n mod 2=1 then begin Writeln('Chyba: lichý počet dělících bodů.'); Exit; end; h:=(b-a)/n; s:=f(a)+f(b); for i:=1 to n div 2-1 do s:=s+4*f(a+(2*i-1)*h)+2*f(a+2*i*h); s:=s+4*f(b-h); Simpson:=s*h/3; end; var a,b,s,v:real; n,i:integer; begin a:=1; b:=2; // a:=1; b:=2; // a:=0; b:=Pi; v:=pf(b)-pf(a); n:=1; for i:=1 to 20 do begin n:=2*n; s:=Obdelnik(a,b,n); Writeln(s,' ',s-v); s:=Lichobeznik(a,b,n); Writeln(s,' ',s-v); s:=Simpson(a,b,n); Writeln(s,' ',s-v); Writeln; end; Readln; end.