Bonjour,
En application à mon cours de programmation Pascal, j'ai voulu concevoir un programme effectuant le calcul ntégral d'une fonction entre deux bornes suivant la méthode des trapèzes.

Je me suis vite heurté à un problème, celui de la modélisation de la fonction.Pour y pallier, j'ai donc choisi de traiter uniquement le cas des fonctions polynomiales de dégré inférieur ou égal à 3.Et j'ai procédé par la méthode des trapèzes (pour l'algorithme de calcul).

J'ai donc conçu ceci.Et il marche,à perfection.J'en suis même assez fier...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;

Je désirerai que:

- Si des experts passent par là, et on des idées d'améliorations, d'optimisation de calcul, ou de code (ma syntaxe du Pascal est encore boitillante), je suis tout ouvert;
- Existe t-il une manière de modéliser n'importe quel type de fonction...? Si je voulais par exemple traiter des fonctions polynomiales d'ordre n...? Trigonométriques..? Discontinues en des valeurs sur l'intervalle d'intégration..?

Merci!