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$.
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é .
Question 7 : Écrire une fonction qui affiche le polynôme .
c'est a vous de proposer une solution :-P
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
ecrire la fonction valeur(P,x) permettant de donner la valeur du polynome P pour x
RépondreSupprimerfonction qui return la valeur du x entrée
Supprimerint 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;
}
jè aimé xa
RépondreSupprimerc'est pratique
RépondreSupprimernice ¨¨
RépondreSupprimerSalut! quelqu'un peut il me proposer une solution pour la dernière question?
RépondreSupprimernice
RépondreSupprimervoid afficher(poly * monpoly){
RépondreSupprimerpoly * 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");
}
void afficherpoly(polynome p)
RépondreSupprimer{
monome *m;
m=(monome*)malloc(sizeof(monome));
m=p;
while(m!=NULL)
{
printf("%fX^%d+",m->coef,m->deg);
m=m->suivant;
}
}
Merci bcp hamza chakraa
SupprimerMerci bcp hamza chakraa
SupprimerSalut, kelkun peut me proposer une fonction qui permet afficher un monôme
RépondreSupprimerkifah naktab f(x)= !!!
RépondreSupprimersomm 2 polynom avec ajout debut,millieu et fin dans troisieme polynom comment-la faire??
RépondreSupprimerpar 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
Le code la ne marche pas
RépondreSupprimer