Exercice : Gestion des Polynômes avec les listes chainées

Le but de cet exercice est d’implémenter des opérations sur des polynômes par des listes chaînées.
On représente un polynôme par une liste chaînée. Chaque cellule de la liste correspond à un monôme, avec son coefficient et son exposant. 
Par exemple, sur la figure ci-dessous, on représente la liste chaînée correspondant au polynôme $5{ x }^{ 4 }+2{ x }^{ 2 }+3$.


en représente le Polynôme nul par une liste vide .

Question 1 : Définir la structure Poly qui a pour champs : le coefficient ( réel ) , l'exposant ( entier positif ) . 
typedef struct Poly{
    int exp;
    float coef;
    struct Poly * suivant;
}Poly;

Question 2 : Écrire une fonction de saisie au clavier d’un monôme .
Poly * creerMonome( float coef , int exp ){
    if ( exp < 0 ) { // il n y a pas de monome ayant une puissance negative
        printf("erreur : puissance negative");
        return NULL;
    }
    else {
        Poly * P;
        P = ( Poly * )malloc( sizeof(Poly) );
        P->coef = coef;
        P->exp = exp;
        P->suivant = NULL;
        return P;
    }
};

Question 3 : Écrire une fonction qui ajout un monôme a la liste du polynôme , en traite tous les cas possibles .
attention : le Polynôme doit être trié toujours en exposant décroissant . 
Poly * ajouterMonome( Poly * monPoly , float coef , int exp ){

    if ( monPoly == NULL ) return creerMonome( coef , exp ); // si monPoly est nul , alors la somme serait just un monome
    else {
        if ( exp > monPoly->exp ) {
            Poly * P = creerMonome( coef , exp );
            P->suivant = monPoly;
            return P;
        }
        else {
                Poly * R = monPoly;
                while ( R->suivant != NULL && R->suivant->exp > exp ) R = R->suivant;

                if ( R->suivant != NULL && R->suivant->exp = exp ) R->suivant->coef += coef;
                else {
                    Poly * P = creerMonome( coef , exp );
                    P->suivant = R->suivant;
                    R->suivant = P;
                }
                return monPoly;
         }
    }
}


Question 4 : Écrire une fonction qui revoie une copie du polynôme . 
Poly * copierPolynome( Poly * monPoly ){

    Poly * copie=NULL, * R = monPoly;

    while ( R != NULL ) { 
        copie = ajouterMonome( copie , R->coef , R->exp );
        R = R->suivant;
    }
    
    return copie;
    
}

Question 5 :  Écrire une fonction qui créer et renvoi la somme de deux polynômes . 
Poly * sommerPolynomes( Poly * monPoly1 , Poly * monPoly2 ){

    Poly * somme = copierPolynome( monPoly1 ), * R = monPoly2;

    while ( R != NULL ) {
        somme = ajouterMonome( somme , R->coef , R->exp );
        R = R->suivant;
    }

    return somme;
}

Question 6 : Écrire une fonction qui créer et renvoi le polynôme dérivé .
Poly * deriverPolynome( Poly * monPoly ){

    Poly * derive = copierPolynome( monPoly ), * R = derive;

    while ( R != NULL ) {
        
        R->coef *= R->exp;
        R->exp--;

        if ( R->suivant->exp == 0 ) R->suivant = NULL;
        else R = R->suivant;

    }
    return derive;
}

Question 7 : Écrire une fonction qui affiche le polynôme .
c'est a vous de proposer une solution :-P
Partager avec vos amis :

15 commentaires :

  1. ecrire la fonction valeur(P,x) permettant de donner la valeur du polynome P pour x

    RépondreSupprimer
    Réponses
    1. fonction qui return la valeur du x entrée
      int valeurx(){
      int x;
      printf("\nDonner une valeur a x :\n");
      scanf("%d",&x);
      printf("\n");

      return x;
      }


      //affichage du polynome aprés avoir donnée une valeur a x
      void afficher2(node * head,int x){
      node * p=head;
      printf("l'affichage du polynome apres avoir donner une valeur a x:\n");
      printf("------------------------------------------------------\n");

      while(p !=NULL){
      //si le coefficient est égale a 0
      if(p->coef==0)
      {

      printf("");
      p=p->next;


      //si le coefficient n'est pas égale a 0 ou 1
      }if(p->coef!=1 & p->coef!=0){
      //si l'exposant est superieur a 1
      if(p->exp>1)
      {
      printf("(%d(%d)",p->coef,x);
      printf("^%d)",p->exp);
      //si l'exposant est égale a 1
      }if(p->exp==1){
      printf("(%d(%d))",p->coef,x);

      }
      //si l'exposant est égale a 0
      if(p->exp==0)
      {
      printf("(%d)",p->coef);
      }
      if(p->next !=NULL)
      {
      printf("+");
      }
      p=p->next;
      //si le coefficient est égale a 1
      }else{
      //si l'exposant est superieur a 1
      if(p->exp>1)
      {
      printf("(%d",x);
      printf("^%d)",p->exp);
      }
      //si l'exposant est égale a 1
      if(p->exp==1){
      printf("(%d)",x);

      }
      //si l'exposant est égale a 0
      if(p->exp==0)
      {
      printf("(%d)",p->coef);
      }
      if(p->next !=NULL)
      {
      printf("+");
      }
      p=p->next;

      }
      }

      }


      //fonction pour calculer le resultat du polynome aprés avoir donner une valeur a x
      int fonction(node * head,int x){
      int compte=0;
      node * p;

      int e=pow(x,p->exp);
      for(p=head;p!=NULL;p=p->next){
      compte=compte+(p->coef)*e;}

      printf("= %d",compte);

      return compte;

      }

      Supprimer
  2. Salut! quelqu'un peut il me proposer une solution pour la dernière question?

    RépondreSupprimer
  3. void afficher(poly * monpoly){
    poly * p= monpoly;

    while(p !=NULL){
    if(p->coef==0)
    {printf("");
    p=p->suivant;
    }if(p->coef!=1 & p->coef!=0){
    if(p->exp>1)
    {
    printf("(%dX",p->coef);
    printf("^%d)",p->exp);
    }if(p->exp==1){
    printf("(%dX)",p->coef);
    }
    if(p->exp==0)
    { printf("(%d)",p->coef); }
    if(p->suivant !=NULL)
    { printf("+"); }
    p=p->suivant;
    }else{
    if(p->exp>1)
    { printf("(X",p->coef);
    printf("^%d)",p->exp);
    }
    if(p->exp==1){ printf("(X)"); }
    if(p->exp==0)
    { printf("(%d)",p->coef) }
    if(p->suivant !=NULL)
    { printf("+"); }
    p=p->suivant;
    } }
    printf("\n");
    }

    RépondreSupprimer
  4. void afficherpoly(polynome p)
    {
    monome *m;
    m=(monome*)malloc(sizeof(monome));
    m=p;
    while(m!=NULL)
    {
    printf("%fX^%d+",m->coef,m->deg);
    m=m->suivant;
    }
    }

    RépondreSupprimer
  5. Salut, kelkun peut me proposer une fonction qui permet afficher un monôme

    RépondreSupprimer
  6. somm 2 polynom avec ajout debut,millieu et fin dans troisieme polynom comment-la faire??
    par exmpl:polynom1=4x^5+2x^4/polynom2=5x^6+6x^4+2x+12/la somme est polynom3=5x^6+4x^5+8x^4+2x+12

    RépondreSupprimer

Formulaire de contact

Nom

E-mail *

Message *

MedAnassSDK. Fourni par Blogger.