Bien le bonjour à toute la communauté,

Je me permets de poster ce message car j'ai un projet en informatique à finir, et la seule chose manquante pour le finir est la multiplication.
En fait, le but du programme est de créer une sorte de calculatrice de polynômes en utilisant des pointeurs et une liste chaînée.
J'ai fais une fonction pour la multiplication mais je ne semble pas trouver l'erreur, fin je sais d'où elle vient mais je n'arrive pas à la résoudre et je voulais savoir si vous aviez des suggestions ou m'aider à résoudre ce problème, cela fait déjà 3 jours que je suis sur cette erreur là.

Je vous mets ici le code de ma fonction multiplication et des autres parties du code utile :
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
116
 
PROGRAM polynomes;
 
USES
  crt;
 
TYPE
    p_monome = ^monome;
    monome = RECORD
      coef : INTEGER;
      degres : INTEGER;
      suivant : p_monome;
    END;
 
FUNCTION creerNoeud (coef, degres : INTEGER):p_monome;
VAR
  nv_mon : p_monome;
BEGIN
    new(nv_mon);
    nv_mon^.coef := coef;
    nv_mon^.degres := degres;
    nv_mon^.suivant := NIL;
    creerNoeud := nv_mon;
END;
 
FUNCTION ajouteTete (p : p_monome;coeff,puiss : INTEGER): p_monome;
VAR
  l : p_monome;
BEGIN
    l := creerNoeud(coeff,puiss);
    l^.suivant := p;
    ajouteTete := l;
END;
 
FUNCTION ajouteFin(p : p_monome;coeff,puiss : INTEGER): p_monome; //Ajoute Fin de liste
VAR
  l : p_monome;
BEGIN
    IF (p = NIL) THEN ajouteFin := creerNoeud(coeff,puiss)
    ELSE BEGIN
      l := p;
      WHILE (l^.suivant <> NIL) DO
      BEGIN
        l := l^.suivant;
      END;
      l^.suivant := creerNoeud(coeff,puiss);
      ajouteFin := p;
    END;
END;
 
FUNCTION additionner(p,q : p_monome): p_monome; //Addition de p avec q
VAR
  add : p_monome;
  deg_p, deg_q : INTEGER;
BEGIN
  add := NIL;
  deg_p := p^.degres;
  deg_q := q^.degres;
  IF (deg_p = deg_q) THEN BEGIN
    WHILE (p <> NIL) AND (q <> NIL) DO BEGIN
      IF (p^.degres = q^.degres) THEN add := ajoutefin(add,p^.coef+q^.coef,p^.degres);
      p := p^.suivant;
      q := q^.suivant;
    END;
  END
  ELSE IF (deg_p > deg_q) THEN BEGIN
    WHILE (p^.degres <> q^.degres) DO BEGIN
      add := ajoutefin(add,p^.coef,p^.degres);
      p := p^.suivant;
    END;
    WHILE (p <> NIL) AND (q <> NIL) DO BEGIN
      IF (p^.degres = q^.degres) THEN add := ajouteFin(add,p^.coef+q^.coef,p^.degres);
      p := p^.suivant;
      q := q^.suivant;
    END;
  END
  ELSE BEGIN
    WHILE (p^.degres <> q^.degres) DO BEGIN
      add := ajouteTete(add,q^.coef,q^.degres);
      q := q^.suivant;
    END;
    WHILE (p <> NIL) AND (q <> NIL) DO BEGIN
      IF (p^.degres = q^.degres) THEN add := ajouteFin(add,p^.coef + q^.coef,p^.degres);
      p := p^.suivant;
      q := q^.suivant;
    END;
  END;
  additionner := add;
END;
 
FUNCTION multipq(p,q : p_monome): p_monome;
VAR
  tmp1,tmp3,res : p_monome;
  prems : BOOLEAN;
BEGIN
  prems := TRUE;
  res := NIL;
  tmp3 := q;
  WHILE (p <> NIL) DO BEGIN
    tmp1 := NIL;
    q := tmp3;
    WHILE (q <> NIL) DO BEGIN
      tmp1 := ajoutefin(tmp1,p^.coef * q^.coef,p^.degres + q^.degres);
      q := q^.suivant;
    END;
    IF prems <> TRUE THEN BEGIN
      res := additionner(tmp1,res);
    END
    ELSE BEGIN
      res := tmp1;
    END;
    prems := FALSE;
    p := p^.suivant;
  END;
  multipq := res;
END;
La multiplication se déroule bien, j'avais ajouté des codes pour faire du pas à pas en affichant au fur et à mesue le résultat de la multiplication et il me semble bien que l'erreur : Runtime Error 216, ce produit à la derniere addition à effectuer et l'erreur provient à ce moment là de la fonction addition dans la boucle WHILE (ligne 66 à 69). Mais cette fonction marche parfaitement bien quand je fais une addition tout simplement donc, je ne comprends pas trop l'erreur qu'il y a ...
Mais je suppose avec une erreur 216 qu'il s'agit d'un problème d'allocation, par exemple l'adresse n'existe pas un truc comme ça.

Donc si vous voyez une erreur un truc comme ça, une suggestion, je serais ravis de l'entendre.

Je vous remercie d'avance,

Rigaux