Fonction ne renvoie pas la bonne valeur avec certaine entrée.
Fermé
vflo
-
24 nov. 2014 à 01:17
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 nov. 2014 à 14:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 nov. 2014 à 14:01
A voir également:
- Fonction ne renvoie pas la bonne valeur avec certaine entrée.
- Fonction si et - Guide
- Renvoie d'appel ooredoo - Forum Mobile
- Excel renvoyer la valeur d'une cellule en fonction d'une autre - Forum Excel
- Le point d'entrée de procédure bcrypt hash ✓ - Forum Logiciels
- Code Pour Renvoi D'appel Et Mesage - Forum telephonie fixe
2 réponses
productif
Messages postés
39
Date d'inscription
mardi 8 mars 2011
Statut
Membre
Dernière intervention
9 février 2017
20
25 nov. 2014 à 12:36
25 nov. 2014 à 12:36
Pour rappel:
La probable raison des valeurs erronées est que la fonction pow renvoie un double mais la valeur renvoyée est stockée dans un int (nombreC); il y a une conversion implicite de double vers int et c'est probablement la cause du problème.
Pour bien faire, il faudrait utiliser la fonction lround qui arrondit correctement un double vers un int.
Pour faire encore mieux, quand on ne manipule que des int, on n'utiliserait probablement pas la fonction pow; on calculerait les puissances par multiplications successives. Mais ça devient plus compliqué...
Aussi, la fonction obtenir n'a pas besoin de paramètre, elle devrait plutôt être déclarée ainsi:
double pow(double x, double y);
La probable raison des valeurs erronées est que la fonction pow renvoie un double mais la valeur renvoyée est stockée dans un int (nombreC); il y a une conversion implicite de double vers int et c'est probablement la cause du problème.
Pour bien faire, il faudrait utiliser la fonction lround qui arrondit correctement un double vers un int.
long lround(double x);
Pour faire encore mieux, quand on ne manipule que des int, on n'utiliserait probablement pas la fonction pow; on calculerait les puissances par multiplications successives. Mais ça devient plus compliqué...
Aussi, la fonction obtenir n'a pas besoin de paramètre, elle devrait plutôt être déclarée ainsi:
int obtenir();
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 835
25 nov. 2014 à 14:01
25 nov. 2014 à 14:01
Bonjour,
int obtenir(int nombre);
Tu n'as pas besoin de paramètre. Plutôt : int obtenir(void);
Donc au lieu de :
</ital>int nombre= obtenir(nombre);
int nombre2=nombre; </ital>
Tu auras simplement : int nombre2=obtenir();
Pourquoi passer par nombre et nombre2 ? Cela rend la lecture du code plus difficile...
void main(void)
Non standard. Le bon prototype du main() sans argument est :
int main(void)
Il ne faut donc pas oublier aussi le "return 0;" final.
int nombreC=pow(nombre2, nombre);
pow() renvoie un double. Je te conseille de plutôt faire ta propre fonction de multiplication. Ca sera plus précis si tu travailles sur des entiers. Dans ce cas, plus besoin de #include <math.h>.
int obtenir(int nombre);
Tu n'as pas besoin de paramètre. Plutôt : int obtenir(void);
Donc au lieu de :
</ital>int nombre= obtenir(nombre);
int nombre2=nombre; </ital>
Tu auras simplement : int nombre2=obtenir();
Pourquoi passer par nombre et nombre2 ? Cela rend la lecture du code plus difficile...
void main(void)
Non standard. Le bon prototype du main() sans argument est :
int main(void)
Il ne faut donc pas oublier aussi le "return 0;" final.
int nombreC=pow(nombre2, nombre);
pow() renvoie un double. Je te conseille de plutôt faire ta propre fonction de multiplication. Ca sera plus précis si tu travailles sur des entiers. Dans ce cas, plus besoin de #include <math.h>.