IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Multiplication de deux polynômes avec liste chaînée [Free Pascal]


Sujet :

Free Pascal

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut Multiplication de deux polynômes avec liste chaînée
    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

  2. #2
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    *** EDIT ***

    Je ne suis pas certain d'avoir compris ce que la fonction ajoutefin était sensée faire.

    Ce qui est certain, c'est que p^.suivant vaut nil à un certain stade de votre boucle, et là c'est le plantage rapide assuré (puisque p=p^.suivant et que nil n'est pas testé).

    Ce type de test vous évitera le plantage, mais je ne suis pas certain que cela donne un traitement correct:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        WHILE (p^.degres <> q^.degres) DO BEGIN
          add := ajoutefin(add,p^.coef,p^.degres);
          p := p^.suivant;
          if p=nil then break;		// ajouter moi
        END;
    ...		
        WHILE (p^.degres <> q^.degres) DO BEGIN
          add := ajouteTete(add,q^.coef,q^.degres);
          q := q^.suivant;
          if q=nil then break;		// ajouter moi
        END;

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup FChrisF ça a bien marché !
    J'en était sur que c'était dû à un NIL mais je ne savais pas comment faire, mais tu m'as éclairé !

    Enfait le AjouteFin, c'est pour ajouter un noeud en fin de liste c'est tout

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Re-Bonjour, je me rend compte que cela ne marche pas finalement,
    Enfait je n'ai aucun runtime Error, mais le résultat n'est pas le bon ..
    En effet le début de la multiplication est bonne mais il y a certains éléments qui ne sont pas affichés...

    Par exemple si je lance avec un Polynome P : (X^2 + X + 1) et un polynome Q : (X^3+X+1)
    Je sui censé avoir le résultat : X^5 + X^4 + 2X^3 + 2X^2 + 2X + 1
    Mais après l'avoir effectuer avec mon algorithme j'ai : X^5 + X^4 + 2X^3 + 2X^2

    Et si j'ajoute à chaque étape un WRITELN m'affichant les 2 polynômes qui vont s'ajouter à chaque fois, j'ai bien les 2X et le 1 quelque part mais quand je les additionnes cela ne semble pas fonctionner.. Mais quand je lance tout simplement l'addition dans le programme de :
    (X^5 + X^4 +X^3 + X^2) + (X^3 + 2X +1), cela marche à merveille.
    Donc j'en déduis que à partir du degrés 1 les monomes ne sont pas mis dans la liste chaînée ... Avez vous une suggestions pour cela ?

  5. #5
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Salut

    Je réponds un peu tardivement du fait d'un agenda un peu chargé. Je vais faire ici quelques commentaires.

    Représenter un polynôme par une liste chaînée est intéressant pour ceux qui ont un degré élevé mais un nombre de monômes plus réduit en prenant l'hypothèse que les monômes à coefficient nul ne sont pas enregistrés dans la liste. La liste est simplement chaînée.
    Le convention retenue consiste enregistrer les monômes en degré décroissant (si j'ai bien lu ton code) sachant que le monôme de degré le plus élevé est en tête de liste, cet ordre est avantageux pour l'évaluation en utilisant la méthode de Horner.

    Le problème va consister à produire les algorithmes habituels sur les polynômes tout en tenant compte de la représentation choisie (liste simplement chaînée) et en restant à minima efficace en temps d'exécution. Voilà pour le blabla.

    Je vais commenter certaines parties du code.

    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
     
    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;
    Code spécifique à la gestion de la liste.


    Pour l'algorithme d'addition, on va décomposer car il s'agit d'une succession de cas particuliers traités comme des alternatives indépendantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      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
    1er cas: les polynômes sont définis (au moins un monôme) et ils ont le même degré. Seulement tu ne traites alors que les monômes de degré commun entre les deux polynômes et tu t'arrêtes au premier qui a atteint sa fin de liste.
    -> pour les monômes dont le degré n'existent que dans l'un des polynôme uniquement, c'est l'impasse...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      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
    2ème cas : deg(P) > deg(Q), tu récupère d'abords les monômes de P dont le degré est supérieur à celui de Q puis tu appliques le code du 1er cas avec les mêmes erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
      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;
    3ème cas : deg(P) < deg(Q), tu récupère d'abords les monômes de Q dont le degré est supérieur à celui de P puis tu appliques le code du 1er cas avec les mêmes erreurs.

    Enfin la routine ajouteFin n'est pas efficace car on parcourt l'intégralité de la liste résultat à chaque fois pour ajouter le monôme de plus petit degré à la fin. C'est assez intuitif mais pas très efficace, on aboutit ainsi à un algorithme en N^2 et non pas linéaire.
    L'algorithme linéaire est possible mais requiert un peu de technique car on doit parcourir la liste résultat sans perdre la référence au premier élément de la liste.

    Si j'ai un peu de temps, je proposerai l'algorithme d'addition qui dérive d'un algorithme de fusion de liste. Enfin de peu de programmation objet et de type générique aurait bien agrémenter la chose.

    Je n'ai pas analysé le code de la multiplication.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 552
    Points : 3 920
    Points
    3 920
    Par défaut
    Code complet pour l'addition
    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
     
    #!/usr/bin/instantfpc
    //program polynome;
     
    {$mode objfpc}{$H+}
     
    type
        p_monome = ^monome;
        monome = record
          coef : Integer;
          deg : Integer;
          suiv : p_monome;
        end;
     
    // Création d'un monome
    function CreerMonome(C: Integer; D: Integer): p_monome;
    begin
       new(Result);
       Result^.coef := C;
       Result^.deg := D;
       Result^.suiv := Nil;
    End;
     
    // Création d'un monome à partir d'un autre, sans reprendre le monome suivant.
    function CopieMonome(m: p_monome): p_monome;
    begin
      new(Result);
      Result^ := m^;
      Result^.suiv := Nil;
    End;
     
    // Création d'un polynome à partir d'un tableau de coef (utile pour les tests)
    // les coef sont triés selon l'ordre croissant des
    function Tab2Poly(T: array of Integer): p_monome;
    var
      i : Integer;
      // astuce: son suivant pointera sur la liste à créer, c'est une variable locale,
      // l'allocation/désallocation sont réalisée par la gestion auto. de la pile.
      // Cette solution sera reprise dans d'autres routines
      teteProv: monome; // tête provisoire !
      p: p_monome;
    begin
      teteProv.suiv := Nil; // précaution sans doute exagérée.
      p := @teteProv;
      for i := low(T) to high(T) do
      begin
        if T[i] <> 0 then
        begin
          p^.suiv := CreerMonome(T[i], low(T)+high(T) - i);
          p := p^.suiv;
        end;
      end;
      Result := teteProv.suiv; // premier monome effectif
    End;
     
    // Copie du monome paramètre et de ses suivants
    // C'est la version polynome de CopieMonome
    function CopiePoly(m: p_monome): p_monome;
    var
      teteProv: monome;
      cour: p_monome;
    begin
      teteProv.suiv := Nil;
      cour := @teteProv;
      while (m <> Nil) do
      begin
        cour^.suiv := CopieMonome(m);
        cour := cour^.suiv;
        m := m^.suiv;
      end;
      Result := teteProv.suiv;
    End;
     
    procedure DetruitPoly(var P: p_monome);
    var
      t: p_monome;
    begin
      while (P <> Nil) do
      begin
        t := P^.suiv;
        Dispose(P);
        P := t;
      end;
    end;
     
    // Addition, algo linéaire, dérivé de l'algo de fusion de liste
    // Traite tous les monomes de P et Q, qu'ils aient le même degré ou non.
    // L'inconvéninet est que la forme s'éloigne un peu de l'algorithme mathématique
    function Addition(P,Q: p_monome): p_monome;
    var
      teteProv: monome;
      cour: p_monome;
    begin
      teteProv.suiv := Nil;
      cour := @teteProv;
      while true do
      begin
        if (P = Nil) and (Q = Nil) then
        begin
          // plus de monome à traiter ni dans P ni dans Q
          break;
        end
        else if (P = Nil) then
        begin
          // plus de monome dans P, on prend ce qui reste dans Q
          cour^.suiv := CopiePoly(Q);
        end
        else if (Q = Nil) then
        begin
          // plus de monome dans Q, on prend ce qui reste dans P
          cour^.suiv := CopiePoly(P);
        end
        else if (P^.deg > Q^.deg) then
        begin
          cour^.suiv := CopieMonome(P);
          cour := cour^.suiv;
          P := P^.suiv;
        end
        else if (P^.deg < Q^.deg) then
        begin
          cour^.suiv := CopieMonome(Q);
          cour := cour^.suiv;
          Q := Q^.suiv;
        end
        else // égalité de degré
        begin
          cour^.suiv := CopieMonome(P);
          cour := cour^.suiv;
          cour^.coef := cour^.coef + Q^.coef;
          P := P^.suiv;
          Q := Q^.suiv;
        end;
      end;
      result := teteProv.suiv;
    End;
     
    procedure WritePoly(intro: String; p: p_monome);
    begin
      if p = Nil then
      begin
        writeLn(Intro, 'Polynome vide !!!');
      end
      else
      begin
        write(Intro);
        while true do
        begin
          write(p^.coef, '.X^', p^.deg);
          p := p^.suiv;
          if (p = Nil) then
          begin
            writeLn;
            break;
          end
          else
          begin
            write(' + ');
          end;
        end;
      end;
    End;
     
    var
      P,Q,S: p_monome;
     
    begin
      try
        // Nil !!
        WritePoly('Nil = ', Nil); writeLn;
        // (X^2 + X + 1)
        P := Tab2Poly([1,1,1]);
        WritePoly('P = ', P); writeLn;
        //  (X^3+X+1)
        Q := Tab2Poly([1,0,1,1]);
        WritePoly('Q = ', Q); writeLn;
        // Somme (X^3+X^2+2.X+2)
        S := Addition(P,Q);
        WritePoly('P+Q = ', S); writeLn;
      finally
        DetruitPoly(S);
        DetruitPoly(Q);
        DetruitPoly(P);
      end;
    End.
    Sortie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Nil = Polynome vide !!!
     
    P = 1.X^2 + 1.X^1 + 1.X^0
     
    Q = 1.X^3 + 1.X^1 + 1.X^0
     
    P+Q = 1.X^3 + 1.X^2 + 2.X^1 + 2.X^0
    Une implémentation différente de la somme permettrait d'implémenter simplement la multiplication.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup pour ta réponse très complète !
    Je vais essayer ton code quand j'aurais du temps car je suis assez pris par les cours et d'autres projets.
    Ce projet sur les polynômes étant rendu cela n'est plus de mes priorités mais ta réponse m'interesse fortement car je pourrais comprendre mes erreurs !

    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. multiplication de deux polynômes
    Par n0-sheep dans le forum Caml
    Réponses: 4
    Dernier message: 25/02/2013, 17h07
  2. [Turbo Pascal] Addition de deux polynômes avec liste chaînée
    Par Ecquini dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 01/11/2011, 19h11
  3. Gestion des sprites dynamiques avec liste chaînée
    Par Mokona dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/12/2010, 14h55
  4. Réponses: 0
    Dernier message: 30/06/2010, 16h27
  5. Quicksort avec listes chaînées ?
    Par italiasky dans le forum C
    Réponses: 3
    Dernier message: 27/12/2006, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo