program pi;
CONST EPS = 10e-7;
CONST FORMAT = 6;
procedure dicho(precision :real);
var a,b,c,ancienne_valeur : real;
nb_etapes : integer;
begin
nb_etapes:=0;
a:=2;
b:=4;
c:=b;
repeat
inc(nb_etapes);
ancienne_valeur:=c;
c:=(b+a)/2;
if (sin(a)*sin(c)<0) then b:=c else a:=c;
until (abs(ancienne_valeur - c) <= precision);
writeln('Dichotomie : ',c:FORMAT:FORMAT,' en ',nb_etapes,' étapes')
end;
procedure newton(depart,precision :real);
var p,ancienne_valeur : real;
nb_etapes : integer;
begin
nb_etapes:=0;
p:=depart;
repeat
inc(nb_etapes);
ancienne_valeur:=p;
p:=p-sin(p)/cos(p)
until ((abs(p - ancienne_valeur) <= precision) or (nb_etapes>=20));
writeln('Newton : ',p:FORMAT:FORMAT,' en ',nb_etapes,' étapes');
end;
procedure serie(precision : real);
var terme_courant, somme_partielle,ancienne_valeur : real;
indice_courant : integer;
begin
somme_partielle:=0;
indice_courant:=0;
repeat
ancienne_valeur := somme_partielle;
terme_courant :=4* ((-1) POW indice_courant) / (2*indice_courant+1);
somme_partielle:= somme_partielle + terme_courant;
indice_courant:=indice_courant + 1
until (abs(somme_partielle - ancienne_valeur) <= precision);
writeln('Série : ',somme_partielle:FORMAT:FORMAT,' en ',indice_courant,' étapes')
end;
function rectangles(n :integer ):real;
var somme : real;
i : integer;
begin
somme:=0;
for i:=0 to n-1 do somme:=somme+sqrt(1-(i/n)**2);
rectangles:=4*somme/n
end;
function trapezes(n :integer ):real;
var somme : real;
i : integer;
begin
somme:=0;
for i:=1 to n-1 do somme:=somme+2*sqrt(1-(i/n)**2);
somme:=somme+sqrt(1-(0/n)**2);
somme:=somme+sqrt(1-(n/n)**2);
trapezes:=2*somme/n
end;
function simpson(n :integer ):real;
var somme : real;
i : integer;
begin
somme:=0;
for i:=0 to n-1 do
somme:=somme+sqrt(1-(i/n)**2)
+4*sqrt(1-((2*i+1)/2/n)**2)
+sqrt(1-((i+1)/n)**2);
simpson:=4*somme/(6*n);
end;
var k:integer;
begin
dicho(EPS);
readln;
newton(3.0,EPS);
readln;
serie(EPS);
readln;
for k:=1 to 7 do writeln('rectangles(',10 POW k,')=',
rectangles(10 POW k):FORMAT:FORMAT);
readln;
for k:=1 to 5 do writeln('trapezes(',10 POW k,')=',
trapezes(10 POW k):FORMAT:FORMAT);
readln;
for k:=1 to 5 do writeln('simpson(',10 POW k,')=',
simpson(10 POW k):FORMAT:FORMAT);
readln;
end.
}