Fonction dscos en C

Fermé
roune67 - 17 mai 2009 à 17:00
 roune67 - 17 mai 2009 à 22:22
Bonjour,
J'ai besoin d'aide svp, je ne sais pas où se trouve le problème dans ce code :


#include<stdio.h>
#include<conio.h>
#include<math.h>

float dcos(float x,unsigned int n)
{ float cosx=1;
int i;
for(i=1;i<=n;i++)
cosx = cosx + p_puiss(-1,i)* p_puiss(x,2*i)/ fact(2*i);
return cosx;
}

double fact(unsigned int n)

{ double resultat=1;
int i;
for(i=1;i<=n;i++)
resultat = resultat*i;
return resultat;
}

float p_puiss(float x,unsigned int n)
{ int compteur=0;
float resultat=1;
while(compteur<n)
{ compteur = compteur+1;
resultat = resultat*x;
}
return resultat;
}

int main()
{ float angl_rd;
unsigned int n=30,i;
float dcos(float,unsigned int);
printf("\nEntrer la valeur de l'angle en radians : ");
scanf("%f",&angl_rd);
printf("\nLes approximations fournies par dscos sont :")
for(i=1;i<=n;i++)
printf("\ncos(%f) ~~ %f",angl_rd,dscos(angl_rd,n));
printf("\nla valeur de cos(x) par la fonction standard est: %.2f",cos(angl_rd));
getch();
}

5 réponses

Quel est le problème ?
Problème compilation, exécution ...
Les messages d'erreur sont les bienvenus (pour ceux du compilateur, seule la première demi-douzaine est utile).
0
oui c'est un problème de compilation. Quand je compile ça me met cette phrase d'erreur :

15 C:\Users\Harouna\Documents\DEVCPP\td4_III_4.c conflicting types for 'fact'
0
Et oui, c'est logique... comme toujours avec le compilateur ;-)
Dans la fonction 'dscos' il rencontre la fonction 'fact', 'Tiens, se dit-il, je ne connais pas cette fonction, elle sera sans doute déclarée plus tard; en attendant je parie qu'elle sera de type 'int'.
Quelque temps plus tard, quand il rencontre la fonction 'fact', il se dit: 'Tiens il doit y avoir une erreur car la fonction n'est pas de type 'int'"; alors il s'arrête et retourne une erreur.
On pourrait se dire, je vais recompiler jusqu'à ce qu'il parie sur une fonction 'double'; ce n'est pas la peine, il parie toujours sur une fonction 'int' (c'est ce qu'on lui a dit de faire).
Il existe deux solutions:
- soit déplacer la fonction 'fact' et la mettre avant la fonction 'dcos',
- soit simplement déclarer la fonction 'fact' avant la fonction 'dcos'; c'est ce que l'on appelle le prototypage.
Bon courage... car il y a d'autres erreurs.
0
Merci Loupius de m'avoir aidé à franchir cette étape ! Je vais essayer de réparer les autres erreurs, mais je crois déjà que je vous solliciterai de nouveau, car j'ai passé tellement de temps là-dessus que je vois plus rien.
0
Je suis vraiment fatigué par ce programe, là je comprends plus rien du tout :

#include<stdio.h>
#include<conio.h>
#include<math.h>

double fact(unsigned int n)

{ double resultat=1;
int i;
for(i=1;i<=n;i++)
resultat = resultat*i;
return resultat;
}



float p_puiss(float x,unsigned int n)

{ int compteur=0;
float resultat=1;
while(compteur<n)
{ compteur = compteur+1;
resultat = resultat*x;
}
return resultat;
}



float dcos(float x,unsigned int n)

{ float cosx=1;
int i;
for(i=1;i<=n;i++)
cosx = cosx + p_puiss(-1,i)* p_puiss(x,2*i)/ fact(2*i);
return cosx;
}



int main()

{ float angl_rd;
unsigned int n=30,i;
float dcos(float,unsigned int);
printf("\nEntrer la valeur de l'angle en radians : ");
scanf("%f",&angl_rd);
printf("\nLes approximations fournies par dscos sont :");
for(i=1;i<=n;i++)
printf("\ncos(%f) ~~ %f",angl_rd,dscos(angl_rd,n));
printf("\nla valeur de cos(x) par la fonction standard est: %.2f",cos(angl_rd));
getch();
}

Voici les messages d'erreur quand je compile :

C:\Users\Harouna\AppData\Local\Temp\cckXcaaa.o(.text+0x15e) In function `main':
[Linker error] undefined reference to `dscos'
C:\Users\Harouna\AppData\Local\Temp\cckXcaaa.o(.text+0x15e) ld returned 1 exit status
0
Ah oui, on fait des tas de fautes d'orthographe... et tout le monde comprend quand même parce que cerveau est souple... mais pas le compilateur !!!
Dans ton 'main' tu appelles une fonction 'dscos'... qui n'existe pas !!! Le compilateur est intolérant, mais il ne faut surtout pas lui en vouloir ;-)
A suivre.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oh mince ! c'est pas facile à voir ces genres d'erreur ! Merci professeur ! Mais je reviens !
0