Sujet : Gestion et manipulation de polynômes en langage C

 

Les étudiants du Groupe Genius souhaitent développer un programme en langage C permettant de manipuler des polynômes. Ils devront implémenter diverses opérations mathématiques sur les polynômes en utilisant des structures et des fonctions dynamiques. Ce programme devra gérer correctement les cas particuliers (polynômes vides, coefficients nuls, etc.) et utiliser une structure adaptée.


 

Un polynôme peut être représenté sous la forme suivante :

P(X) = anXn + an-1Xn-1 + ... + a1X + a0

où chaque terme est défini par :

  • ai : le coefficient du monôme.
  • Xi : la variable élevée à la puissance i, appelée le degré du monôme.

Dans cet exercice, vous devez représenter un polynôme à l’aide d’une liste chaînée. Chaque nœud de la liste correspond à un monôme et contient :

  1. Le coefficient du monôme (ai).
  2. Le degré du monôme (i).
  3. Un pointeur vers le monôme suivant.

Fonctionnalités demandées

  1. Insertion d’un monôme dans un polynôme :
    • Une fonction qui permet d’ajouter un monôme au polynôme (avec son coefficient et son degré).
    • Si un monôme avec le même degré existe déjà, vous devez combiner les coefficients.
    • Les monômes doivent être insérés de manière à ce que la liste soit triée par degré décroissant.
  2. Affichage d’un polynôme :
    • Une fonction qui affiche un polynôme sous la forme P(X) = anXn + an-1Xn-1 + ... + a0.
    • Les monômes avec un coefficient nul ne doivent pas être affichés.
    • Les cas particuliers (polynôme vide ou polynôme constant) doivent être correctement gérés.
  3. Évaluation d’un polynôme :

    Une fonction qui évalue la valeur du polynôme en un point x0 donné.

  4. Addition de deux polynômes :

    Une fonction qui calcule la somme de deux polynômes.

  5. Produit de deux polynômes :

    Une fonction qui calcule le produit de deux polynômes.

  6. Dérivée d’un polynôme :

    Une fonction qui calcule la dérivée d’un polynôme.

  7. Gestion mémoire :

    Une fonction pour libérer la mémoire occupée par un polynôme après utilisation.


Détails techniques

  1. Structure de données pour représenter un monôme :
    typedef struct monome {
        float coeff;            // Coefficient du monôme
        int degre;              // Degré du monôme
        struct monome* suivant; // Pointeur vers le monôme suivant
    } monome;
    
    typedef monome* Polynome;   // Un polynôme est une liste chaînée de monômes
                
  2. Exemple de prototypes des fonctions principales :
    int InsertElement(Polynome *P, float coeff, int degre);
    void affichePolynome(Polynome P);
    double valeurPolynome(Polynome P, float x0);
    Polynome sommePolynome(Polynome P1, Polynome P2);
    Polynome produitPolynome(Polynome P1, Polynome P2);
    Polynome derivePolynome(Polynome P);
    void Detruire(Polynome P);
                

Critères d’évaluation

  • Respect des spécifications.
  • Robustesse du programme (gestion des cas particuliers).
  • Propreté et clarté du code (indentation, noms de variables, commentaires).
  • Test des fonctionnalités demandées.

Bonne chance Genius ! ?

Correction Programmation C :

 Gestion des Polynômes - 

 

#include <stdio.h>

#include <stdlib.h>

 

typedef struct monome {

    float coeff;

    int degre;

    struct monome* suivant;

} monome;

 

typedef monome* Polynome;
 

 

 

// Initialisation d'un polynôme

void Init(Polynome* p) {

    *p = NULL;

}

 

 

 

// Fonction pour insérer un élément dans un polynôme

int InsertElement(Polynome* P, float coeff, int degre) {

 

    Polynome nouveau = (Polynome)malloc(sizeof(monome));

    if (nouveau == NULL) {

 

        printf("Erreur d'allocation mémoire\n");

        return -1;

    }

    nouveau->coeff = coeff;

    nouveau->degre = degre;

    nouveau->suivant = NULL;

 

    if (*P == NULL || (*P)->degre < degre) {

        nouveau->suivant = *P;

        *P = nouveau;

    } else {

        Polynome tmp = *P;

 

        while (tmp->suivant != NULL && tmp->suivant->degre >= degre) {

            tmp = tmp->suivant;

        }

        if (tmp->degre == degre) {

            tmp->coeff += coeff;

            free(nouveau);

        } else {

            nouveau->suivant = tmp->suivant;

 

            tmp->suivant = nouveau;

        }

    }

    return 0;

}

 

 

 

 

// Fonction pour afficher un polynôme

void affichePolynome(Polynome p) {

    printf("P(X) = ");

 

    while (p != NULL) {

        if (p->coeff != 0) {

 

            printf("%0.2fx^%d", p->coeff, p->degre);

            if (p->suivant != NULL) printf(" + ");

 

        }

        p = p->suivant;

    }

    printf("\n");

}

 

 

// Fonction pour calculer la valeur d'un polynôme à un point donné

double valeurPolynome(Polynome P, float x0) {

 

    double val = 0;

    while (P != NULL) {

 

        val += P->coeff * pow(x0, P->degre);

        P = P->suivant;

 

    }

    return val;

 

}

// Fonction pour dériver un polynôme

 

 

Polynome derivePolynome(Polynome p) {

    Polynome der = NULL;

 

    while (p != NULL) {

        if (p->degre > 0) {

 

            InsertElement(&der, p->coeff * p->degre, p->degre - 1);

        }

 

        p = p->suivant;

    }

 

    return der;

}

 

 

 

// Fonction pour sommer deux polynômes

Polynome sommePolynome(Polynome P1, Polynome P2) {

 

    Polynome P3 = NULL;

 

    while (P1 != NULL) {

 

        InsertElement(&P3, P1->coeff, P1->degre);

 

        P1 = P1->suivant;

 

    }

 

    while (P2 != NULL) {

 

        InsertElement(&P3, P2->coeff, P2->degre);

 

        P2 = P2->suivant;

 

    }

 

    return P3;

 

 

}

// Fonction pour multiplier deux polynômes

 

Polynome produitPolynome(Polynome P1, Polynome P2) {

    Polynome P3 = NULL;

 

    Polynome tmp1 = P1, tmp2 = P2;

 

    while (tmp1 != NULL) {

 

        tmp2 = P2;

 

        while (tmp2 != NULL) {

 

            InsertElement(&P3, tmp1->coeff * tmp2->coeff, tmp1->degre + tmp2->degre);

            tmp2 = tmp2->suivant;

 

        }

 

        tmp1 = tmp1->suivant;

 

    }

 

    return P3;

 

}

 

// Fonction pour libérer la mémoire d'un polynôme

 

void Detruire(Polynome P) {

 

    Polynome tmp;

 

    while (P != NULL) {

 

        tmp = P;

 

        P = P->suivant;

 

        free(tmp);

 

    }

 

}

 

 

// Programme principal

int main() {

    Polynome P1, P2, P3;

    Init(&P1);

    Init(&P2);

    // Ajout des monômes au polynôme P1

    InsertElement(&P1, 3, 2); // 3x^2

    InsertElement(&P1, 5, 1); // 5x

    InsertElement(&P1, 2, 0); // 2

    // Ajout des monômes au polynôme P2

    InsertElement(&P2, 4, 1); // 4x

    InsertElement(&P2, 1, 0); // 1

    // Affichage des polynômes

    printf("Polynôme 1 : ");

    affichePolynome(P1);

    printf("Polynôme 2 : ");

    affichePolynome(P2);

    // Somme des polynômes

    P3 = sommePolynome(P1, P2);

    printf("\nSomme des polynômes : ");

    affichePolynome(P3);

    Detruire(P3);

    // Produit des polynômes

    P3 = produitPolynome(P1, P2);

    printf("\nProduit des polynômes : ");

    affichePolynome(P3);

    Detruire(P3);

    // Dérivée du polynôme P1

    P3 = derivePolynome(P1);

    printf("\nDérivée du polynôme 1 : ");

    affichePolynome(P3);

    Detruire(P3);

    // Évaluation du polynôme P1 pour x = 2

    printf("\nValeur de P1(2) : %0.2f\n", valeurPolynome(P1, 2));

    // Libération de la mémoire

    Detruire(P1);

    Detruire(P2);

    return 0;

}


 

  •  

 

 

Bottom of Form

Si vous avez trouvé cet exercice corrige en Langage C de Mr JoëlYk intéressants et utiles, pourquoi ne pas les partager avec d'autres personnes qui pourraient également en bénéficier ? Partagez ce lien sur les réseaux sociaux ou envoyez-le à vos amis et collègues. Vous pourriez aider quelqu'un à améliorer ses compétences en programmation ou à trouver des solutions à des problèmes complexes. N'oubliez pas que la connaissance doit être partagée pour grandir. Merci pour votre soutien et votre partage !

Contact WhatsApp : +237 652027193 | Réaliser Par Joël_Yk

Aucune note. Soyez le premier à attribuer une note !

Ajouter un commentaire

Anti-spam