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

C Discussion :

liste chainée langage c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut liste chainée langage c
    je travail dans les liste chainée où j'ai crée un polynôme dans le quel j'utilise un ensemble des opérations comme l'addition, soustraction, dérivé, et produit,
    etc ...
    mon problème est:
    l'opération de produit entre deux polynôme ça marche pas bien c-à-d la somme finale dans cette opération dans le cas ou les degrés sont égaux
    tu trouveras une démonstration sous forme d'image qui vas illustrer bien le problème
    Images attachées Images attachées  

  2. #2
    Membre éclairé Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Par défaut
    Sans voir ton code, ce n'est pas évident à dire, mais on dirait que ta gestion du produit n'est pas bonne. Si tu multiplies deux polynômes de degrés x et y, le polynôme produit est de degré x + y, et donc la liste résultante doit être de longueur x+y+1. Ton polynôme final a 8 termes, alors que tu multiplies un polynôme de degré 1 et un de degré 3, ce qui devrait donner une liste de 5 termes.

    Tu devrais peut-être revoir ta modélisation du polynôme... Mais comme j'ai dit, sans voir le code que t'a écrit, je doute que l'on puisse en dire plus.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut produit polynôme
    excuse moi, j'ai oubli
    poly c la liste chainéé
    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
    poly produit(poly c,poly d)// fonction de produit 2 polynôme
    {
     poly h=NULL,cc,dd;
     cc=c;
     while(cc!=NULL)
     {dd=d;
     while(dd!=NULL)
      {
            h=creationfin(h,(cc->coeff)*(dd->coeff),cc->degre+dd->degre);
            dd=dd->suiv;
      }
           cc=cc->suiv;
      }
      return h;
    }
    poly som(poly v)// fonction qui réalise la somme des degrés égaux
    {
    poly h=NULL,b,n,k;
    b=v; 
    while(b!=NULL)
    {  n=b->suiv;
       while(n!=NULL)
       {
         if(b->degre==n->degre)
          b->coeff+=n->coeff;
          n=n->suiv;     
       }
          b=b->suiv;
     }   
     
      return v;
    }

  4. #4
    Membre éclairé Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Par défaut
    Déjà, première chose: je pense qu'il est mieux de ne pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         if(b->degre==n->degre)
          b->coeff+=n->coeff;
          n=n->suiv;
    mais mettre les accolades pour bien marquer la portée du if, même s'il y a sans doute une règle sur la portée en cas de pas d'accolades. Il faut que le code soit facilement compréhensible dans la mesure du possible.

    Pour ce qui est de ton problème, je crois que je vois d'où ça vient: si tu rencontres deux (ou plusieurs) monomes de même degré, tu fais l'addition et tu obtiens le bon coefficient. Ensuite, tu passes au monome suivant, et tu vérifies la même chose pour lui... mais! Tu ne gères pas le cas où ton monôme courant a déjà été ajouté au monôme précédent, ce qui fait que si tu as:

    X² + 2X² + X

    tu es à X², tu vois que 2X² est de même degré, tu additionnes les coefficients, super. Ensuite, tu passes à 2X², tu regardes, le monôme suivant est d'un autre degré, tu continues à avancer dans le polynôme. Donc résultat, tu auras, avec cet exemple, 3X² + 2X² + X; tout simplement parce que tu n'as pas viré de ta liste chainée le maillon correspondant à 2X² après l'avoir ajouté.

    Donc pour y rémédier, eh bien, il faut que quand tu rencontres deux monômes de même degré, tu ajoutes le deuxième au premier et ensuite que tu supprimes le second de la liste.

  5. #5
    Membre habitué
    Inscrit en
    Mai 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 11
    Par défaut produit polynôme
    j'ai fait ça mais pas de solution
    voila son code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void supprimemonome (poly p)
    {
       if (p && p->suiv)
       {
           poly p_l = p;
           poly p_n = NULL;
           p_n = p_l->suiv;
           p_l->suiv = p_n->suiv;
           free (p_n);
           p_n = NULL;
       }
    }

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par mikhailo Voir le message
    Déjà, première chose: je pense qu'il est mieux de ne pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         if(b->degre==n->degre)
          b->coeff+=n->coeff;
          n=n->suiv;
    mais mettre les accolades pour bien marquer la portée du if, même s'il y a sans doute une règle sur la portée en cas de pas d'accolades.
    S'il n'y a pas d'accolades, le if ne correspond qu'à la seule instruction qui suit. Soit b->coeff+=n->coeff; ici.

  7. #7
    Membre éclairé Avatar de mikhailo
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 78
    Par défaut
    Merci gl, il me semblait aussi mais je n'étais pas sûr. "Résolu"? :o

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

Discussions similaires

  1. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  2. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  3. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  4. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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