Polynome et liste chainées

Fermé
kloc - Modifié par kloc le 4/04/2016 à 00:42
 kloc - 4 avril 2016 à 13:56
Bonjour,

je dois écrire une fonction qui stocke un polynome dans une liste chainée.Chaque maillon representera un monome(coefficient,exposant).Dans mon code j'essaye de recuperer les exposants et les coefficients dans des tableaux,je parcours ces tableaux et je fais des ajouts au niveau de la liste chainée.
Mais quand je veux afficher la liste chainée,rien ne s'affiche!
voici mon code:

#include <stdio.h>
#include <stdlib.h>



struct maill
{
float coeff;
int expo;
struct maill *suiv;

};
typedef struct maill maillon;
typedef maillon *PTR;


PTR nouveau_maillon(int expo,float coeff)
{
PTR nouv=(PTR)malloc(sizeof(maillon));
nouv->coeff=coeff;
nouv->expo=expo;
nouv->suiv=NULL;
return nouv;
}
PTR ajout_maillon(float coeff,int expo,PTR l)
{
PTR c=l;
PTR nouv=(PTR)nouveau_maillon(coeff,expo);
if(l==NULL)
return nouv ;
else
{
while(c->suiv!=NULL)
{
c=c->suiv;
}
c->suiv=nouv;
return l;
}
}






void stockage(char pol[100])
{
PTR liste=NULL;
PTR c=liste;
int expo[100];
float coeff[100];
int t=0;
int a=0,i;int j=0;
char d;
char nb[100];



// Recupération des exposants
i=0;

while (i<strlen(pol))
{

if(pol[i]=='^')
{

d=pol[i+1];
d=d-'0';

expo[t]=d;



t++;

}
else
{

if(pol[i]=='X' && pol[i+1]!='^')
{
expo[t]=1;


t++;
}


else
{

if(pol[i+1]=='\0'){

expo[t]=0;

t++;

}
}
}
i++;


}
i=0;

while(i<strlen(pol))
{

if(pol[i]=='+' && pol[i+1]=='X')
{
coeff[a]=1;


a++;


}
else
{
if(pol[i]=='-' && pol[i+1]=='X')
{
coeff[a]=-1;


a++;

}
else{
if( (pol[i]!='*' )&& (pol[i]!='X' )&& (pol[i+1]!='*') && (pol[i+1]!='\0')){
if(pol[i]=='^'){
i=i+1;
}
else{
nb[j]=pol[i];
j++;


}
}
else
{

if((pol[i]!='*') && (pol[i]!='X') &&((pol[i+1]=='*') || (pol[i+1]=='\0'))){
if(pol[i]=='^'){
i=i+1;
}
else{

nb[j]=pol[i];
coeff[a]=atof(nb);

j=0;
a++;


}
}
}
}
}
i++;
}
i=0;
j=0;
while(i<t)
{
if(j<a)
{
c=ajout_maillon(coeff[j],expo[i],c);
c=c->suiv;
}
i++;
j++;
}
while(liste!=NULL)
{
printf("%f\n",liste->coeff);
printf("%d\n",liste->expo);
liste=liste->suiv;
}




}

int main()
{
char pol[100];
printf("Saisir le polynome en commencant par le monome du plus haut degre\n");
scanf("%s",pol);

stockage(pol);
return 0;

}















1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
4 avril 2016 à 08:13
Bonjour,
Je ne sait pas ce que sont t et a mais il doit doit y avoir qu'un seul nombre de maillons que j'appelle 'u' pour garder la même clarté.
while ( i < u )
   {
        c = ajout_maillon( coeff[i] , expo[i] , c );
        // ne surtout pas ajouter   c=c->suiv;
        i++;
    }
0
T est la taille du tableau qui récupère les exposants et a la taille du tableau qui récupère les coefficients
0