Programme sur les polynomes !

Programme sur les polynomes ! - C++ - Programmation

Marsh Posté le 22-02-2003 à 13:38:08    

Je dois faire un programme en C sur le calcul de polynomes.


On considere des polynomes de la forme : P(x) = AnXexp(e1) + A(n-1)Xexp(e2) + ? + A1Xexp(en) avec e1 > e2 > ... > en > 0
 


 
 
Bon j'ai commence a faire le programme, c'est a dire permettre d'afficher et d'entrer un polynome dans une liste chainee mais j'ai des erreurs :
 
j'ai quatre fichiers :
 

Code :
  1. polynome.h
  2. struct Scoef {
  3. double coef;
  4. struct Scoef *suivant;
  5. }
  6. extern saisi(struct Scoef);
  7. extern void affichage(struct Scoef);


 
 

Code :
  1. main.h
  2. struct Scoef {
  3. double coef;
  4. struct Scoef *suivant;
  5. }


 

Code :
  1. polynome.c
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include "polynome.h"
  7. //---------------------------------------------------------------------------
  8. // Demande les coefs a l'utilisateur
  9. void saisi(struct Scoef **p)
  10. {
  11. char s[20]; //Lifgne pour rentrer le coef
  12. double a;
  13. struct Scoef *P;
  14. char *res;
  15. puts("Rentrez les coefs :" );
  16. P = (struct Scoef*)malloc(sizeof(struct Scoef));
  17. P->coef = 0; // init
  18. P->suivant = NULL;
  19. *p = P; // on sauve le premier
  20. // double strtod( const char *nptr, char **endptr );
  21. while ( (a = strtod( gets(s),&res )) || (!strcmp(res,"" )) )
  22. {
  23.  P->coef = a;
  24.  P->suivant = (struct Scoef*)malloc(sizeof(struct Scoef));
  25.  P=P->suivant; // on se décale
  26.  P->coef = 0; //propreté
  27.  P->suivant = NULL;
  28. }
  29. }
  30. //---------------------------------------------------------------------------
  31. // Affiche le polynome
  32. void affichage(struct Scoef *p)
  33. {
  34. int i = 0;
  35. while (p->suivant)
  36. {
  37.  if (p->coef != 0) printf("%.1lf X^%d ",p->coef,i);
  38.  if ((p->suivant->coef != 0)&&(p->coef!=0)) printf("+ " );
  39.  p = p->suivant;
  40.  i++;
  41. }
  42. puts("" );
  43. }


 
 

Code :
  1. main.c
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include "polynome.h"
  7. void saisi(struct Scoef);
  8. void affichage(struct Scoef);
  9. struct Scoef *P;
  10. void main()
  11. {
  12. saisi(P);
  13. }


 
 
 
 
Et voici mes erreurs :
C:\Documents and Settings\Administrateur\Bureau\mini_project\main.c(10) : error C2371: 'saisi' : redefinition; different basic types
        c:\documents and settings\administrateur\bureau\mini_project\polynome.h(8) : see declaration of 'saisi'
C:\Documents and Settings\Administrateur\Bureau\mini_project\main.c(18) : error C2115: 'function' : incompatible types
C:\Documents and Settings\Administrateur\Bureau\mini_project\main.c(18) : warning C4024: 'saisi' : different types for formal and actual parameter 1
polynome.c
C:\Documents and Settings\Administrateur\Bureau\mini_project\polynome.c(13) : error C2628: 'Scoef' followed by 'void' is illegal (did you forget a ';'?)
C:\Documents and Settings\Administrateur\Bureau\mini_project\polynome.c(14) : error C2371: 'saisi' : redefinition; different basic types
        c:\documents and settings\administrateur\bureau\mini_project\polynome.h(8) : see declaration of 'saisi'
C:\Documents and Settings\Administrateur\Bureau\mini_project\polynome.c(43) : warning C4028: formal parameter 1 different from declaration
Error executing cl.exe.
 
mini_project.exe - 4 error(s), 2 warning(s)
 
 
 
Aidez moi ca fait une heure et demi que je n'avance plus.  :cry:

Reply

Marsh Posté le 22-02-2003 à 13:38:08   

Reply

Marsh Posté le 22-02-2003 à 13:42:07    

1ere erreur: dans ton polynome.h, saisi est mal déclarée: y a pas le type de retour, mais il est précisé dans ton polynome.c.
les types de parametres ne sont pas les memes.


Message édité par gloop le 22-02-2003 à 13:43:00
Reply

Marsh Posté le 22-02-2003 à 13:42:26    

tu définies 2 fois struct Scoef
et apres tu te plantes dans les paramètres de tes fonctions
lis les message de ton compilo

Reply

Marsh Posté le 22-02-2003 à 13:44:52    

Citation :

C:\Documents and Settings\Administrateur\Bureau\mini_project\main.c(10) : error C2371: 'saisi' : redefinition; different basic types
       c:\documents and settings\administrateur\bureau\mini_project\polynome.h(8) : see declaration of 'saisi'

 
 
Ta déclaration de ta fonction saisie dans polynome.h et ton fichier main.c ne sont pas les mêmes, tu dois mettre ds ton fichier main.c :
void saisi(struct Scoef **p);
Encore que :
void saisi(Scoef **p) serait assez, si bien sûr tu remplace ta fonction void saisi(struct Scoef **p) dans le fichier polynome.c par void saisi(Scoef **p) (et puis partout ailleur ...)

Reply

Marsh Posté le 22-02-2003 à 13:45:03    

gloop a écrit :

1ere erreur: dans ton polynome.h, saisi est mal déclarée: y a pas le type de retour, mais il est précisé dans ton polynome.c.
les types de parametres ne sont pas les memes.


 
Quand je met void devant la fonction saisi, il me met une erreur c'est pour cela que je l'ai enleve en fait.
 

++Taz a écrit :

tu définies 2 fois struct Scoef
et apres tu te plantes dans les paramètres de tes fonctions
lis les message de ton compilo


 
Pour struct Scoef, le mieux est de le delarer seulement dans main.h ?

Reply

Marsh Posté le 22-02-2003 à 13:47:02    

4bIs a écrit :


 
Quand je met void devant la fonction saisi, il me met une erreur c'est pour cela que je l'ai enleve en fait.
 
 
 
Pour struct Scoef, le mieux est de le delarer seulement dans main.h ?


l'erreur qu'il te donne, c'est ptet le probleme des types de parametres differents.
pour ta déclaration de structure, fait un fichier de déclaration commun pour les fichiers qui en ont besoin. et n'oublie pas les directives de préprocesseur pour l'inclusion sécurisée.

Reply

Marsh Posté le 22-02-2003 à 13:54:08    

Bon deja je n'ai plus que deux erreurs. J'ai corrige ce que m'a dit Olivier51.
 

Reply

Marsh Posté le 22-02-2003 à 14:04:43    

gloop a écrit :

1ere erreur: dans ton polynome.h, saisi est mal déclarée: y a pas le type de retour, mais il est précisé dans ton polynome.c.
les types de parametres ne sont pas les memes.


 
je ne comprend pas bien cette erreur, je ne vois pas ce que je dois mettre en type de retour. Voila ce que j'ai maintenant :
 

Code :
  1. polynome.h
  2. extern saisi(struct Scoef **);
  3. extern void affichage(struct Scoef);


 

Code :
  1. polynome.c
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include "polynome.h"
  7. #include "main.h"
  8. //---------------------------------------------------------------------------
  9. // Demande les coefs a l'utilisateur
  10. saisi(struct Scoef **p)
  11. {
  12. char s[20];
  13. double a;
  14. struct Scoef *P;
  15. char *res;
  16. puts("Rentrez les coefs :" );
  17. P = (struct Scoef*)malloc(sizeof(struct Scoef));
  18. P->coef = 0; // init
  19. P->suivant = NULL;
  20. *p = P; // on sauve le premier
  21. while ( (a = strtod( gets(s),&res )) || (!strcmp(res,"" )) )
  22. {
  23.  P->coef = a;
  24.  P->suivant = (struct Scoef*)malloc(sizeof(struct Scoef));
  25.  P=P->suivant; // on se décale
  26.  P->coef = 0; //propreté
  27.  P->suivant = NULL;
  28. }
  29. return(**p);
  30. }
  31. //---------------------------------------------------------------------------
  32. // Affiche le polynome
  33. void affichage(struct Scoef *p)
  34. {
  35. int i = 0;
  36. while (p->suivant)
  37. {
  38.  if (p->coef != 0) printf("%.1lf X^%d ",p->coef,i);
  39.  if ((p->suivant->coef != 0)&&(p->coef!=0)) printf("+ " );
  40.  p = p->suivant;
  41.  i++;
  42. }
  43. puts("" );
  44. }


 
 
Mes erreurs :
 
C:\Documents and Settings\Administrateur\Bureau\mini_project\polynome.c(15) : error C2371: 'saisi' : redefinition; different basic types
        c:\documents and settings\administrateur\bureau\mini_project\polynome.h(8) : see declaration of 'saisi'
C:\Documents and Settings\Administrateur\Bureau\mini_project\polynome.c(45) : warning C4028: formal parameter 1 different from declaration
Error executing cl.exe.


Message édité par #SubZero le 22-02-2003 à 14:17:24
Reply

Marsh Posté le 22-02-2003 à 14:13:51    

j'ai aussi corrige le warning.

Reply

Marsh Posté le 22-02-2003 à 14:20:15    

mais fait un peu gaffe à tes types bordel:
1/ saisi retourne une struct Scoeff et tu le précises pas
2/ afficahge est déclarée struct Scoef en parametre et dans la définition, c'est un struct Scoef *.

Reply

Marsh Posté le 22-02-2003 à 14:20:15   

Reply

Marsh Posté le 30-04-2003 à 11:55:10    

dans polynome.h c'est
extern int saisi(struct Scoef);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed