Langage C - Débutant - Pow

Fermé
Raphael74 Messages postés 77 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 4 novembre 2012 - 15 sept. 2011 à 11:20
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 15 sept. 2011 à 18:16
Bonjour,

Je tiens tous d'abord avant de commencer, à vous préciser que je débute depuis seulement quelques semaine dans le domaine de programmation, plus particulierement dans le C (:
Voilà, je suis en train de comprendre et retenir de nouvelles fonctions, DE BASE, mais il y en a une qui me gène un peu..

C'est pow, pour calculer le carré d'un nombre, voilà mon programme:

double resultat;
int nombre3;
resultat=0;
nombre3=4;
resultat=pow(nombre3, 3);

printf("%d\n\n", resultat);



En compilant je ne trouve pas le résultat de 4 puissance 3 mais 0. Code::Blocks (oui car je carbure grâce à cet IDE) ne m'indique aucune erreur.
J'en conclu, que ce doit être une erreur de débutant :p

Vos avis, conseil, solutions ?

Merci (:

A voir également:

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
Modifié par Char Snipeur le 15/09/2011 à 11:28
Salut.
Je ne voyais pas l'erreur jusqu'à ce que je commence à écrire ton programme chez moi.
je pense que résultat vaut bien 64, mais le problème viens de l'affichage avec printf, %d attend un entier et non un double. Utilise %e pour les doubles.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
1
Heremion Messages postés 538 Date d'inscription vendredi 20 mai 2011 Statut Membre Dernière intervention 1 juin 2022 102
15 sept. 2011 à 11:28
Bonjour Raphael74,

Il se trouve que la fonction Pow travaille avec des double car sur les int, il y a souvent des problèmes de conversion.
Déclare tes variables en double, et dis-moi si tu as toujours le même problème.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
15 sept. 2011 à 11:50
Je n'ai jamais remarqué de problème de conversion en C.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 sept. 2011 à 11:36
Le premier argument se pow doit être un flottant (float, double ou long double), or toi tu utilises nombre3 comme un int, Code::Blocks aurait pu t'indiquer une erreur pour ça !
error C2668: 'pow' : appel ambigu à une fonction surchargée
Mais ta véritable erreur vient du printf, resultat est un double tu dois donc mettre %f

double resultat;
int nombre3=4;
resultat=pow((double)nombre3,3); 

printf("%f\n\n", resultat);
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
15 sept. 2011 à 11:44
petite remarque, ici nous parlons de C pas de C++. En C il n'y a pas de surcharge, les noms ne sont pas décoré, cf. man pow.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 sept. 2011 à 11:47
oups... Visual Studio me perdra ^^
0
Raphael74 Messages postés 77 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 4 novembre 2012 4
15 sept. 2011 à 11:56
Déjà, merci pour vos réponses (:

Le problème venait bien du printf avec le %d, que j'ai changé en %e, en compilant j'ai presque 64 :P -> 6.400000 + 001

Si j'ai bien compris le nombre 3 ne doit pas être un int mais un double par exemple ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 sept. 2011 à 11:59
Vu qu'il n'y a pas d'ambiguïté (en C) tes deux int seront automatiquement convertit en double
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
15 sept. 2011 à 12:11
?? quelle différence voi tu entre 64 et 6.400000e+001 ?
C'est juste l'affichage scientifique.
0
Raphael74 Messages postés 77 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 4 novembre 2012 4
15 sept. 2011 à 12:20
Oui, c'est vrai :$
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
15 sept. 2011 à 18:16
Bonjour,
Si tu ne veux pas de l'affichage scientifique, tu peux mettre : printf("%f\n\n",resultat);
0