Création d'une liste chainée contenant un polynome, évaluation de ce polynome, dérivation...
Source / Exemple :
/**************************************************************
- *
- Enregister les coefficents et les exposants d'un polynome *
- dans une liste chainée. *
- Evaluer ce polynome pour une valeur donnée x. *
- Dériver le polynome en utilisant la même liste chainée. *
- *
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <ctype.h>
typedef struct POLY
{
float Coef;
int Expos;
struct POLY * Suivant;
} POLY;
POLY * Premier =NULL;
//fonction permettant la saisie du polynome
POLY * SaisiePoly(POLY * Tete)
{
POLY * Nouveau, * Dernier;
printf("Saisi d'un polynome\n\n");
//création du 1er élément de la liste
Nouveau =(POLY *) malloc(sizeof(POLY));
printf("Coefficient :");
scanf("%f",&(Nouveau->Coef));
printf("Exposant :");
scanf("%d",&Nouveau->Expos);
printf("\n");
Nouveau->Suivant=NULL;
Tete=Nouveau;
Dernier=Nouveau;
//on saisi jusqu'a ce que l'exposant soit 0
while (Dernier->Expos!=0)
{
Nouveau =(POLY *) malloc(sizeof(POLY));
printf("Coefficient :");
scanf("%f",&(Nouveau->Coef));
do //Saisir un exposant inférieur au précédent
{
printf("Exposant :");
scanf("%d",&Nouveau->Expos);
if (Nouveau->Expos>=Dernier->Expos)
{
printf("L'exposant doit etre inferieur a l'exposant precedent\n");
getch();
}
}while (Nouveau->Expos>=Dernier->Expos);
printf("\n");
Nouveau->Suivant=NULL;
//chainage
Dernier->Suivant=Nouveau;
//déplacer dernier
Dernier=Nouveau;
}
printf("Le polynome saisi est :\n");
return Tete;
}
float EvaluePoly(POLY * Poly, float x)// permet de donné la valeur du polynome en fonction de x
{
float Total=0;
if(Poly!=NULL) //on utilise une récurisive pour le fun
{
Total=(Poly->Coef)*((float)pow(x,Poly->Expos))+EvaluePoly(Poly->Suivant,x);
}
return Total;
}
AffichePoly(POLY * Poly) //permet d'afficher le polynome avec les x et les ^
{
if (Poly->Expos!=0)
{
printf("%f*x^%d ",Poly->Coef,Poly->Expos);
}
else
{
printf("%f",Poly->Coef);
}
Poly =Poly->Suivant;
while(Poly!=NULL)
{
if (Poly->Expos!=0)
{
if (Poly->Coef>=0)
{
printf("+ %f*x^%d ",Poly->Coef,Poly->Expos);
}
else
{
printf(" %f*x^%d ",Poly->Coef,Poly->Expos);
}
}
else
{
if (Poly->Coef>=0)
{
printf("+ %f",Poly->Coef);
}
else
{
printf(" %f",Poly->Coef);
}
}
Poly =Poly->Suivant;
}
return 0;
}
DerivePoly(POLY * Poly) //permet de dériver le polynomle
{
while(Poly->Suivant->Expos>0)
{
Poly->Coef*=Poly->Expos;
Poly->Expos--;
Poly =Poly->Suivant;
}
Poly->Coef*=Poly->Expos;
Poly->Expos--;
Poly->Suivant=NULL;
}
int ControlePoly(POLY * Poly) //permet de vérifier si un polynome à bien ete saisi
{
if (Poly==NULL)
{
printf("Vous devez d'abord saisir un Polynome avant de pouvoir utiliser cette option\n");
getch();
return 1;
}
return 0;
}
int Menu()
{
int Choix;
do
{
system("cls"); //efface l'écran
printf(" ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
printf(" º º\n");
printf(" º Menu Principal º\n");
printf(" º º\n");
printf(" ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
printf("\n 1- Saisir un Polynome");
printf("\n 2- Afficher le Polynome");
printf("\n 3- Evaluer un polynome");
printf("\n 4- Deriver le polynome");
printf("\n 5- Quitter\n");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\nChoix :");
scanf("%d",&Choix);
} while (Choix <1 || Choix >5);
system("cls");
return Choix;
}
intro()
{
printf(" Û Û ßÜ Üß ßÜ Û ßßÜ ß Û\n");
printf(" ÜÛÜ Û ßÜ ÜÜ ÜÜß Üß ßÜ ßÜ ßÜ ÜÛÜ\n");
printf(" ß ßÜ ßÜ ßß Üß ßÜ Û Û ß\n");
printf(" Û ßÜ Üß TP5.1 LANGUAGE C ßÜ Ü Û Ü\n");
printf(" Üß Û Üß ßÜ ßÜ Ü Û\n");
printf(" ßÜÜÜßßßÜÜß Üß ßÜ ßß ß ß\n");
printf(" ÜÛÜ Üß Û POLYNOME Û ßÜ ÜÛÜ\n");
printf(" ß Üß ±± ÜÛÜ ÞÝ ÞÝ ±± ßÜ ß\n");
printf(" ܱ± ±±ßÝ ß ÞÝ ÞÝ Þß±± ±±Ü\n");
printf(" Üß±±ßÞÜÜÛÝ Üßß Û Û ÜÛÜ ÞÛÜÜÝܱ±ßÜ\n");
printf(" ÛÛÛÜÜÝÛ²²Û Û ßÜ ÜßÜ ß Û²²ÛÞÜÜÛÛÛ\n");
printf(" ÛÛ²ÛÛßܲÛß Üß ßÜ ßÜ Üß Û ßÜ ßÛ²ÜßÛÛ²ÛÛ\n");
printf(" ÛÛ²²ÛÞ²²Û ±± ßÜ ßÜ le 27/11/2002 Üß Û ±± Û²²ÝÛ²²ÛÛ\n");
printf(" ÞÛ²²ÛÝÛ²Û Ü±±ßÝ Û ßÜ Üß Û Þß±±Ü Û²ÛÞÛ²²ÛÝ\n");
printf(" Û²²ÛÛÞ²ÛÝܲÜÜÛ ßßÜÜ Û ßÜ Üß Û ÛÜܲÜÞÛ²ÝÛÛ²²Û\n");
printf(" ÞÛ²ÛÛÞÛ²ÛÞ²²Ûß ßÜß Üß ßÜ Üß Üß ßÛ²²ÝÛ²ÛÝÛÛ²ÛÝ\n");
printf(" Û²²ÛÝÛ²ÛÞ²²Û Üß Ü ßÜÜ ßÜÜ ÜÜß ßÜÜß Ü ßÜ Û²²ÝÛ²ÛÞÛ²²Û\n");
printf(" ÞÛ±²ÛÞ²²Ý²ÛÛ Ü±±ß ßÛß Üß ßßÜÜÜÜÜßß ßÛß ±±±Ü Û²²ÞÛ²ÝÛ²±ÛÝ\n");
printf(" Û±±²²Ý²ÛÞ²Û ÜÛ²ÜÜÝ Üܱ± Û ÜÛÜ ±±ÜÜ ÞÜܲÛÜ Û²ÝÛ²Þ²²±±Û\n");
printf(" Û±±²²Ý²ÛÞ²Ý ÜÛ±±ÛÛß Û±±±± ßÜ ß ±±±±Û ÛÛ±±ÛÜ Þ²ÝÛ²Þ²²±±Û\n");
printf("ÞÛ±±²ÛÞÛÝÛ²ÜÛ²²ÛÛß Û±±±±Ý ßßÜÜ ÜÜßßÜ Þ±±±±Û ßÛÛ±±ÛܲÛÞÛÝÛ²±±ÛÝ\n");
printf("Þ±±±²ÛÞÛÞÛ²²²²ÛÛ Û² ±±Û ßßÜÜÜßß Û Û±± ²Û ÛÛ²²²²ÛÝÛÝÛ²±±±Ý\n");
printf(" Û±±²ÛÜÞÛ²²²²Ûß ÜÛÛÛÛÜÛ ÜÛÜ ßÜÜÜ ÛÜÛÛÛÛÜ ßÛ²²²²ÛÛÞÛ²±±Û\n");
printf(" Þ±±²ÛÛ Û²²²²²Ý ÜÛÛ²²ÛÛ ß ÛÛ²²ÛÛÜ Þ²²²²²Û ÛÛ²±±Ý\n");
}
main()
{
int Choix; //Sert à connaitre l'option du menu choisi
int Controle; //sert au controle d'existance du polynome
float x;
float Total;
intro();
printf("Appuyer sur une touche pour entrer dans le menu principal");
getch();
Choix = Menu();
Controle =1;
while (Controle != 0 && Choix > 1 && Choix < 5) //ca permet de savoir si le polynome a bien été saisi
{
if (Choix > 1 && Choix < 5) // Le controle s'effectue uniquement pour les option 2 à4
{
Controle =ControlePoly(Premier);
}
Choix=Menu();
}
while (Choix!=5)
{
switch (Choix)
{
case 1 : Premier=SaisiePoly(Premier);
AffichePoly(Premier);
printf("\n\n\nAppuyer sur une touche pour retourner au menu principal\n");
getch();
break;
case 2 : printf("Affichage du polynome\n");
AffichePoly(Premier);
printf("\n\n\nAppuyer sur une touche pour retourner au menu principal\n");
getch();
break;
case 3 : printf("Evaluation du polynome\n");
printf("Saisir la valeur de x :");
scanf("%f",&x);
Total = EvaluePoly(Premier,x);
printf("Pour x = %f\n",x);
AffichePoly(Premier);
printf("= %f",Total);
printf("\n\n\nAppuyer sur une touche pour retourner au menu principal\n");
getch();
break;
case 4 : printf("Derivation du polynome\n");
DerivePoly(Premier);
AffichePoly(Premier);
printf("\n\n\nAppuyer sur une touche pour retourner au menu principal\n");
getch();
break;
}
Choix = Menu();
}
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.