You are on page 1of 7

Programmation Avancée et Structures de données 2

-Devoir -

#include<stdio.h>

#include<stdlib.h>

#include<math.h>
//Q1-Définir la structure

typedef struct poly{

float coef;

int exp;

struct poly *next;

}poly;
//q2 Création du monôme
poly *creerMonome(float c,int e){

poly *lp;

lp=(poly *)malloc(sizeof(poly));

lp->coef=c;

lp->exp=e;

lp->next=NULL;

return lp;

}
//q3 Ajout du monôme
poly *AjouterMonome(poly *l,float c,int e){

poly *m1,*m2,*p1,*p2;

int a;

float b;

m1=creerMonome(c,e);

if(l==NULL){

l=m1;

return m1;

}
else{

m2=l;

while(m2->next!=NULL)

m2=m2->next;

m2->next=m1;

for(p1=l;p1->next!=NULL;p1=p1->next){

for(p2=p1->next;p2!=NULL;p2=p2->next){

if(p1->e<p2->e){

b=p1->coef;

a=p1->exp;

p1->coef=p2->coef;

p1->exp=p2->exp;

p2->coef=b;

p2->exp=a;

return l;

}
//4 Suppression du monôme

poly *SupprimerMonome(poly *l,int e){

poly *p1,*p;

if(l==NULL)

return NULL;

else if(l->exp==e){

p1=l;

p1=l->next;

free(p1);

else{
p=l;

while(p->next!=NULL && p->next->exp!=e)

p=p->next;

if(p->next!=NULL){

p1=p->next;

p->next=p->next->next;

free(p1);

return l;

//5 affichage recursif

void afficheRec(poly *l){

if(l!=NULL){

printf("%.0fX^%d ",l->cf,l->exp);

if(l->next!=NULL)

printf("+ ");

afficheRec(l->next);

}
//Q6-Affichage recursif inverse

void AfficherRecInv(poly *l){

if(l!=NULL){

AfficherRecInv(l->next);

if(l->next!=NULL)

printf("+ ");

printf("%.0fX^%d ",l->cf,l->exp);

}
//7 evaluer le polynome
poly *valpol(poly *l,float x){

poly *p=l;

while(p!=NULL){

p->coef=p->coef * x;

p=p->next;

return l;

}
//8 copier le polynome

poly *copie(poly *l){

poly *p,*l1=NULL;

p=l;

while(p!=NULL){

l1=AjouterMonome(l1,p->coef,p->exp);

p=p->next;

return l1;

}
//9 somme
poly *sommer(poly *l2,poly *l1){

poly *l3=NULL,*p=l2,*p1=l1;

float s;

while(p!=NULL && p1!=NULL){

s=p->coef+p1->coef;

l3=AjouterMonome(l3,s,p->exp);

p=p->next;

p1=p1->next;

return l3;

}
//10 multiplication
poly *mul(poly *l,float coef,int exp){

poly *p=l;

while(p!=NULL){

p->coef=p->coef * (pow(c,e));

p=p->next;

return l;

}
//11 La dérivée

poly *derive(poly *l){

poly *p;

p=l;

while(p!=NULL){

if(p->exp!=1){

p->coef=p->coef*p->exp;

p->exp=p->exp-1;

else if(p->exp==1){

p->coef=0;

p->exp=p->exp-1;

p=p->next;

return l;

main(){

poly *l=NULL,*l1=NULL,*l3=NULL;

int i,help,n;

float coef,x;

printf("entre le degree de cette polynome : ");

scanf("%d",&n);
for(i=0;i<n;i++){

printf("entre coef : ");

scanf("%f",&coef);

do{

printf("entre exp : ");

scanf("%d",&help);

}while(help>n);

l=AjouterMonome(l,coef,help);

printf(" \n polynome : \n");

afficheRec(l);

printf(" \n entre une valeur pour la supprimer : ");

scanf("%d",&help);

l=SupprimerMonome(l,help);

afficheRec(l);

printf(" \n entre une valuer pour la multiplier : ");

scanf("%f",&x);

l=valpol(l,x);

afficheRec(l);

printf("\n");

l1=copie(l);

afficheRec(l1);

printf(" \n la somme des deux polynome : \n");

l3=sommer(l,l1);

afficheRec(l3);

printf(" \n entre un nouveau coef : ");

scanf("%f",&coef);

printf(" \n entre un nouveau exp : ");

scanf("%d",&help);

printf(" \n le multiplication avec %.0f^%d : \n",coef,help);


l3=mul(l3,coef,help);

afficheRec(l3);

printf(" \n deriver : \n");

derive(l3);

afficheRec(l3);

 Msahli Mohamed
Amine
 Zaynab Mezrioui

You might also like