Addition de polynomes

nazdred Messages postés 3 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 7 novembre 2010 - 7 nov. 2010 à 11:36
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013 - 13 nov. 2010 à 15:30
Bonjour ici,

alors voilà j'essaye de mettre au point une fonction pour additionner des polynômes stockés sous forme de listes simplement chainées (non triées).

J'ai sorti une fonction qui me parait convenable (enfin qui devrait marcher) avec une complexité dégueulasse je vous l'avoue. Mais malheureusement elle ne fonctionne pas.

Structure utilisée :
typedef struct lPolyDev
{
        int degre;
        int coef;
        struct lPolyDev * succ;                                                 
}lPolyDev;

typedef lPolyDev * lpd;


Fonction de l'addition :
lpd addition(lpd liste1, lpd liste2)
{
    if((!liste1) || (!liste2)) exit(1);
    int trouve;
    lpd lpdAdd, tete;
    lpdAdd = copie(liste1);
    tete = lpdAdd;
    while(liste2 != NULL)
    {
          trouve=0;
          while((lpdAdd !NULL) && (trouve 0))
          {
               if(lpdAdd -> degre == liste2 -> degre)
               {
                    lpdAdd -> coef = lpdAdd -> coef + liste2 -> coef;
                    trouve=1;
               }
               lpdAdd = lpdAdd -> succ;
          }
          if(trouve==0) lpdAdd = ajoutTete(lpdAdd, liste2 -> coef, liste2 -> degre);
          liste2 = liste2 -> succ;        
    }
    return lpdAdd;        
}


Sachant que le fonction copie() se contente de dupliquer une liste et que l'ajoutTete() comme vous pouvez vous en douter ajoute un élément en tête de liste. (fonctions qui fonctionnent sans problèmes).

Si vous avez une idée...

En vous remerciant d'avance !

1 réponse

JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
13 nov. 2010 à 15:30
A mon avis, ton erreur est de retourner lpdAdd. Tu devrais plutot retourner la tête de ta liste.

En effet, tu modifie la position de ton pointeur dans ta bouche d'addition...

Essaie ça:
lpd addition(lpd liste1, lpd liste2)
{
    if((!liste1) || (!liste2)) exit(1);
    int trouve;
    lpd lpdAdd, tete;
    lpdAdd = copie(liste1);
    tete = lpdAdd;
    while(liste2 != NULL)
    {
          trouve=0;
          while((lpdAdd !NULL) && (trouve 0))
          {
               if(lpdAdd -> degre == liste2 -> degre)
               {
                    lpdAdd -> coef = lpdAdd -> coef + liste2 -> coef;
                    trouve=1;
               }
               lpdAdd = lpdAdd -> succ;
          }
          if(trouve==0) lpdAdd = ajoutTete(lpdAdd, liste2 -> coef, liste2 -> degre);
          liste2 = liste2 -> succ;        
    }
    return tete;        
}
0
Rejoignez-nous