|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
EVALUATION D'UN POLYNOME, CALCUL DE LA DÉRIVÉE, LISTE CHAINÉE EN C
Information sur la source
Description
Création d'une liste chainée contenant un polynome, évaluation de ce polynome, dérivation...
Source
- /**************************************************************
- * *
- * 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();
- }
- }
/**************************************************************
* *
* 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();
}
}
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
|