1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| program integrale;
uses wincrt;
{Calcul Intégral d'une fonction polynomiale de dégré 3 par la méthode des trapèzes}
{fonction renvoyant un réel x à la puissance n}
function puissance(x:real;n:integer):real;
var i:integer;
p:real;
begin
p:=1;
if n = 0 then p:=1
else For i:=1 to n do p:=p*x;
puissance:=p;
end;
{fonction renvoyant l'image par f(x) d'un réel x, f étant polynomiale de degré 3}
function polynome(a,b,c,d,x:real):real;
var f:real;
begin
f:=a*puissance(x,3)+b*puissance(x,2)+c*puissance(x,1)+d;
polynome:=f;
end;
{fonction renvoyant la surface d'un trapèze}
function tarea(b1,b2,h:real):real;
var area:real;
begin
area:=((b1+b2)*h)/2;
tarea:=area;
end;
{variables}
var borneinf,bornesup,h,integral,a,b,c,d:real;
table: Array[0..1000] of real;
i,n:integer;
rec:char;
cont:boolean;
{Corps du programme}
begin
cont:=true;
writeln('Définissez votre polynome de dégré 3 en entrant successivement a,b,c et d');
read(a,b,c,d);
writeln('Entrez la borne inférieure, puis supérieure d''intégration');
read(borneinf,bornesup);
while cont do
begin
cont:=false;
writeln('Entrez le nombre d''intervalles de calcul');
read(n);
{Remise à zéro de la table}
for i:=0 to 100 do table[i]:=0;
{calcul et affichage des xi}
h:=(bornesup-borneinf)/n;
table[0]:=borneinf;
For i:=1 to n do table[i]:=table[0]+h*(i);
For i:=0 to n+1 do writeln(table[i]);
{calcul intégral}
integral:=0;
for i:=0 to n-1 do
integral:=integral+tarea(polynome(a,b,c,d,table[i]),polynome(a,b,c,d,table[i+1]),h);
writeln('le résultat vaut: ',integral:0:4);
{Possibilité de relancer le programme}
writeln('Voulez vous recommencer en changeant le nombre d''intervalles de calcul ? (N pour NON, Autre touche pour OUI');
rec:=readkey;
if rec = 'n' then cont:= false
else cont:=true;
end; |
Partager