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