1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| #include "Biblio_LLC_Polynome.h"
/** Implementation de la machine abstraite des polynomes **/
poly* allouer ( ) { return ((poly*) malloc( sizeof(poly))); }
void liberer (poly* P) { free(P); }
void aff_coef (poly *P, float v) { P->coef =v; }
void aff_puiss (poly *P, int v) { P->puiss=v; }
void aff_adr(poly *P, poly *Q) { P->suiv =Q; }
float coef (poly *P) { return (P->coef) ; }
int puiss(poly *P) { return (P->puiss); }
poly *suivant( poly *P) { return( P->suiv ); }
/** Afficher un polynome **/
void show_poly (poly* head)
{
poly* P=head;
if (P==NULL) {printf("0");} else { show_mono(P,1); P=suivant(P); }
while (P!=NULL) { if (P->coef!=0) {show_mono(P,0);} P=suivant(P); }
}
/** Afficher un monome **/
void show_mono (poly* head , int problem)
{
poly* P=head; float a=head->coef;
if ( problem==1 && a<0) {printf("- ");} else { if (problem!=1) show_sign(a); }
if ( ( a!=1 && a!=-1) || P->puiss==0) { printf("%.02f" , fabs(a)); }
if ( P->puiss > 0) {printf ("X"); }
if ( P->puiss > 1) {printf("^%d" , P->puiss);}
}
/** Afficher le signe || c'est pour l'affichage correct des polynomes **/
void show_sign (float n) { if (n<0) {printf(" - ");} else { printf(" + "); } }
/** Création d'un polynome à N termes **/
void create_poly ( poly** head )
{
int n; int i; float v;
poly* P=NULL;
poly* Q=NULL;
printf("Quel est le degre de votre polynome ? "); scanf("%d" , &n);
*head=NULL;
for (i=0;i<=n;i++)
{
printf("Coefficient du terme dont la puissance est %d " , i); scanf("%f" , &v);
P=allouer();
aff_puiss(P,i);
aff_coef (P,v);
aff_adr(P,NULL);
if (*head==NULL) { *head=P; } else { aff_adr(Q,P); }
Q=P;
}
}
/** Calculer la valeur du polynome pour une valeur donnée **/
float valeur (poly* P , float v)
{
float result=0;
while (P!=NULL)
{
result = result + (P->coef) * ( pow( v , P->puiss ) ) ;
P=suivant(P);
}
return result;
}
/** Multiplication par un scalaire **/
void multi_scal (poly* P , float v)
{
while (P!=NULL)
{
aff_coef( P , v * coef(P));
P=suivant(P);
}
} |
Partager