Salut à tous !

J'ai besoin d'une fonction qui fait l'addition de 2 polynomes (representés avec les listes).
Voilà une partie du programme que j'ai fait.
Tout marche bien, à part la fonction ADD2 ..

Aidez-moi svp !!!
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
program ccpolynome;
uses crt;
type polynome=^monome;
     monome=record
          puiss:integer;
          fac:integer;
          suiv,prec:polynome;
          end;
var nbe1,nbe2:integer;
       p1,p2,p3:polynome;
 
 
 
{procedure pour la creation du polynome}
procedure creation(var tete:polynome;nbe:integer);
var i:integer;
l:polynome;
begin
for i:=1 to nbe do begin
                 new(l);
                 write('Le facteur du ',i, 'eme element svp est: ');
                 read(l^.fac);
                 write('La puissance du ',i,'eme element svp est: ');
                 read(l^.puiss);
                 l^.suiv:=tete;
				 tete^.prec:=l;
                 tete:=l;
                 end;
 
end;
 
{procedure pour afficher le polynome cree}
procedure affichage (tete:polynome);
var q:polynome;
begin
  q:=tete;
  while q^.suiv<>nil do q:=q^.suiv;
  writeln;
  write('le polynome= ');
  while (q<>nil) do begin
    write(' + ',q^.fac,'x^',q^.puiss);
    q:=q^.prec;
  end;
end;
 
{fonction puissance}
function puissance(n:integer;p:integer):integer;
var s,cpt:integer;
begin
cpt:=0;s:=1;
while (cpt<p) do begin
                     s:=s*n;
                     cpt:=cpt+1;
                     end;
puissance:=s;
end;
 
 
{fonction SOMME2}
function add2(var p1:polynome;var p2:polynome):polynome;
var q1,q2,q3,y,p3:polynome;
    e,exc:integer;
    exist:boolean;
begin
  q3:=p1;
  while(q3^.suiv<>nil)do q3:=q3^.suiv;
  q3^.suiv:=p2;
  p2^.prec:=q3;
  q1:=p1;
  q2:=q1^.suiv;
  exist:=false;
  e:=0;
  exc:=0;
  while((q1<>nil)and(q2^.suiv<>nil))do begin
    new(y);
    y^.puiss:=q1^.puiss;
    while(q2<>nil)do begin
      if(q2^.puiss=y^.puiss)then begin
        exist:=true;
        e:=(q2^.fac)+e;
        if exist=true then exc:=exc+1;
      end;
      q2:=q2^.suiv;
    end;
    if (exc>0)then y^.fac:=(q1^.fac)+e
      else y^.fac:=q1^.fac;
    e:=0;exc:=0;exist:=false;
    p3^.prec:=y;
    y^.suiv:=p3;
    p3:=y;
    q1:=q1^.suiv;
    q2:=q1^.suiv;
  end;
  p3:=add2(p1,p2);
end;
 
 
begin
  clrscr;
  write('le nombre d`elemets du 1er polynome est: ');
  read(nbe1);
  creation(p1,nbe1); 
  affichage(p1);
  writeln;
  write('le nombre d`elemets du 2eme  polynome est: ');
  read(nbe2);
  creation(p2,nbe2);
  affichage(p2);
  writeln;
  p3:=add1(p1,p2);
  writeln('le resultat de laddition de polynomes est= ');
  affichage(p3);
  readln;
  readln
end.