Bonjour j'ai un programme en langage C sur les polynôme
Lors de la compilation tout mes coefficients sont tous nuls et je n'arrive pas à trouver le problème, pareillement pour l'affichage de l'addition de 2 polynômes le calcul est faux
est ce que quelqu'un pourrait m'aider à trouver quelles sont les procédures qui sont fausses ??
sachant que c'est sous forme de représentation contiguë.
cordialement
Code:#include <stdio.h> #include <stdlib.h> #include "booleens.h" #define LMAX 70 typedef struct{ float coeff[LMAX]; int degre; }Polynome; #include "polyt.h" void zero(Polynome *P) { //Polynôme nul (*P).degre=0; } void plus(Polynome *P, float coeff, int deg) { //Addition d'un monôme à un polynôme int i; for(i=0; i<(*P).degre; i++){ if(i==deg){ (*P).coeff[i]=(*P).coeff[i]+coeff; } } } void add(Polynome P1,Polynome P2, Polynome *P3) { //Addition de deux polynômes int i; int j; int k; if(P1.degre + P2.degre > LMAX){ printf("ERREUR TROP ELEMENTS"); }else{ i=0; j=0; k=0; while(i<=P1.degre && j<=P2.degre){ (*P3).coeff[k] = P1.coeff[i] + P2.coeff[j]; k=k+1; i=i+1; j=j+1; } if(i>P1.degre){ for(j=j; j<P2.degre; j++){ (*P3).coeff[k]=P2.coeff[j]; k=k+1; } }else{ for(i=i; i<P1.degre; i++){ (*P3).coeff[k]= P1.coeff[i]; k=k+1; } } if(P1.degre>=P2.degre){ (*P3).degre = P1.degre; }else{ (*P3).degre=P2.degre; } } } void soust(Polynome P1,Polynome P2, Polynome *P3) { //Soustraction de deux polynômes int i; int j; int k; if(P1.degre + P2.degre > LMAX){ printf("ERREUR TROP ELEMENTS"); }else{ i=0; j=0; k=0; while(i<=P1.degre && j<=P2.degre){ if(P1.coeff[i]>=P2.coeff[j]){ (*P3).coeff[k]=P1.coeff[i]-P2.coeff[j]; }else{ (*P3).coeff[k]=P2.coeff[j]-P1.coeff[i]; } i=i+1; j=j+1; k=k+1; } if(i>P1.degre){ for(j=j; j<P2.degre; j++){ (*P3).coeff[k]=P2.coeff[j]; k=k+1; } if((*P3).coeff[k]>0){ (*P3).coeff[k]=P1.coeff[i]; } }else{ for(i=i; i<P1.degre; i++){ (*P3).coeff[k]=P1.coeff[i]; k=k+1; } if((*P3).coeff[k]>0){ (*P3).degre=k; } } } } void mult(Polynome P1, Polynome P2,Polynome *P3) { // Multiplication de deux polynomes int i; int j; int k; if(P1.degre == 0){ (*P3).degre = 0; }else{ if(P2.degre == 0 ){ (*P3).degre = 0 ; }else{ for(k=0; k<(*P3).degre; k++){ (*P3).coeff[k]=0; } i=0; j=0; do{ while(j<=P2.degre){ k=i+j; (*P3).coeff[k] = (P1.coeff[i]*P2.coeff[j])+(*P3).coeff[k]; j=j+1; } i=i+1; j=0; }while(i==P1.degre - 1); (*P3).degre = (P1.degre + P2.degre) - 2; } } } void multr(Polynome *P, float r) { //Multiplication d'un polynôme par un reel int i; for(i=0; i<(*P).degre; i++){ (*P).coeff[i]=(*P).coeff[i]*r; } } void multm(Polynome *P, float coeff, int deg) { //Multiplication d'un polynôme par un monôme int i; int j; i=0; while(i<=(*P).degre){ j=i+deg; (*P).coeff[j]=(*P).coeff[j]*coeff; i=i+1; } (*P).degre = (*P).degre + deg; } void deriv(Polynome P1,Polynome *P2) {// Dérivation d'un polynôme int i; for(i=0; i<P1.degre; i++){ if(P1.coeff[i+1]>0){ (*P2).coeff[i]=P1.coeff[i+1]*(i+1); } } (*P2).degre= P1.degre -1; } void copie(Polynome P1, Polynome *P2) { //Copie d'un polynôme int i; for(i=0; i<P1.degre; i++){ (*P2).coeff[i]=P1.coeff[i]; } (*P2).degre=P1.degre; } Bool nul(Polynome P) { //Vrai si P est nul, Faux sinon return (P.degre==0); } int degre(Polynome P) { //Degre du polynôme return(P.coeff[P.degre - 1]); return -1; } float coef(Polynome P, int i) { //Coefficient du monôme de degre i return(P.coeff[i]); return -1.0; } float poly(Polynome P, float x) { //Evaluation du Polynôme en un point int y; int i; y=P.coeff[P.degre]; for(i=P.degre; i>0; i--){ y=y*x+P.coeff[i]; } return(y); return -1.0; } void affpol(Polynome P) { //Affichage d'un polynome int i; if( nul(P) ) { printf("Polynome NUL."); }else { for(i=0; i<P.degre; i++){ if(P.coeff[i]>0){ printf("%6.1fX^%d\t",P.coeff[i],i); printf("+"); }else { printf("%6.1fX^%d",P.coeff[i],i); } } } }
-----