Calcul d'une puissance en C avec pow() [Résolu]

Smallstones2 6 Messages postés samedi 18 février 2006Date d'inscription 17 novembre 2008 Dernière intervention - 13 nov. 2008 à 12:17 - Dernière réponse : coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention
- 17 nov. 2008 à 19:09
Bonjour, pourriez vous m'aider. Voici mon programme mais celui ci ne marche pas:

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

main () {

float x, y,z;

printf ("Entrez x : ");
scanf ("%f",&x);
printf ("Entrez y : ");
scanf ("%f",&y);

z = pow(x,y);

printf ("x ^ y = %f \n",z);

}



Message d'erreur pendant la compilation

utilisateur@c402-15:~$ gcc -o td2 td2.c
/tmp/ccAfMwK4.o: In function `main':
td2.c:(.text+0x5f): référence indéfinie vers « pow »
collect2: ld returned 1 exit status

Merci beaucoup :super:
Afficher la suite 

13 réponses

Répondre au sujet
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 nov. 2008 à 12:46
+3
Utile
salut

gcc -o td2 td2.c -lm

l'option -lm permet de linker la librairie mathematique (qui correspond au header <math.h>)

recompile avec -lm et ca devrait fonctionner
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de coucou747
Smallstones2 6 Messages postés samedi 18 février 2006Date d'inscription 17 novembre 2008 Dernière intervention - 13 nov. 2008 à 13:17
+3
Utile
Merci beaucoup ca marche.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Smallstones2
minous2005 1 Messages postés lundi 8 août 2005Date d'inscription 16 novembre 2008 Dernière intervention - 16 nov. 2008 à 23:05
0
Utile
Bonjour Monsieur,
Je suis débutant en C++
J'ai tester ce code mais il affiche des erreurs alors j'ai coorigé les erreurs comme ça :

------------------------------  Le nouveau code C++  ------------------------------------------------
#include <stdio.h>
#include <math.h>

void main ()
{

float x, y;
double z;
printf ("Entrez x : ");
scanf ("%f",&x);
printf ("Entrez y : ");
scanf ("%f",&y);

z = pow(x,y);

printf ("x ^ y = %f \n",z);

}
---------------------------------------------------------------------------------------------------------
Merci
Commenter la réponse de minous2005
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 16 nov. 2008 à 23:35
0
Utile
minous2005, je ne vois pas ce que tu veux dire...
Commenter la réponse de coucou747
cs_Morgz 31 Messages postés dimanche 24 décembre 2000Date d'inscription 19 juillet 2011 Dernière intervention - 17 nov. 2008 à 15:37
0
Utile
Salut minous2005, tu es vraiment obligé de te servir de la fonction pow()? parce que la faire toi même ne te prendra que 3 ligne.
Commenter la réponse de cs_Morgz
Smallstones2 6 Messages postés samedi 18 février 2006Date d'inscription 17 novembre 2008 Dernière intervention - 17 nov. 2008 à 15:56
0
Utile
Ne faudrait il pas ajouter un 

return (0);  a la fin pour ta fonction main...???
Commenter la réponse de Smallstones2
cs_Morgz 31 Messages postés dimanche 24 décembre 2000Date d'inscription 19 juillet 2011 Dernière intervention - 17 nov. 2008 à 16:00
0
Utile
Tiens j'ai fais ça en cours la semaine dernière :

#include <stdio.h>
#include<stdlib.h>

int main()
{
     int x,y,result;
     int i;

     printf("Entrer X : ");
     scanf("%d",&x);

     result = x;

     printf("Entrer Y : ");
     scanf("%d",&y);

     for(i=0; i<y; i++)
     {
           result = result * x;
     }
    
     printf("%d ^ %d  = %d",x,y,result);
      return 0;

Normalement ça devrait etre bon, si tu veux utiliser des floats à mon avis remplace les int par des float et les %d par des %f et ça devrait passer.
Commenter la réponse de cs_Morgz
cs_Morgz 31 Messages postés dimanche 24 décembre 2000Date d'inscription 19 juillet 2011 Dernière intervention - 17 nov. 2008 à 16:01
0
Utile
Il manque } après le return, sorry ;)
Commenter la réponse de cs_Morgz
Smallstones2 6 Messages postés samedi 18 février 2006Date d'inscription 17 novembre 2008 Dernière intervention - 17 nov. 2008 à 16:04
0
Utile
Pour ma part, le but était de ne pas utiliser de boucles.
Sinon je ne vois pas pourquoi le prog de minous2005 ne marche pas....

Moi aussi en cours la semaine derniere... Peut etre que l'on suit la meme formation ....lol:
Commenter la réponse de Smallstones2
Smallstones2 6 Messages postés samedi 18 février 2006Date d'inscription 17 novembre 2008 Dernière intervention - 17 nov. 2008 à 16:07
0
Utile
Il semble que pow() ne prenne en charge que les float.
Si minous2005 veut garder la fonction pow() il faut garder les float.
Commenter la réponse de Smallstones2
cs_Morgz 31 Messages postés dimanche 24 décembre 2000Date d'inscription 19 juillet 2011 Dernière intervention - 17 nov. 2008 à 16:09
0
Utile
Il est pas obligé d'utiliser un return 0 vu qu'il à fait un void main(), essaye de mettre int main() et le return 0;
Mais avec quoi tu compiles?

Moi je suis en 3eme année de licence webmaster, et toi? :)
Commenter la réponse de cs_Morgz
Smallstones2 6 Messages postés samedi 18 février 2006Date d'inscription 17 novembre 2008 Dernière intervention - 17 nov. 2008 à 16:12
0
Utile
Personellement avec gcc peut etre a t il le meme probleme que moi...  (voir message précédent)


Sinon je suis en 1 ere année de M.A.S.S
Commenter la réponse de Smallstones2
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 17 nov. 2008 à 19:09
0
Utile
il a resolu son probleme... c'etait un probleme de link, pas de compilation

encore une fois, sans tes messages d'erreurs, on ne peut pas deviner l'erreur.

pour calculer a^b, avec b entier, idealement, on utilise une exponentielle dichotomique

http://www.codyx.org/snippet_exponentiation-dichotomique_384.aspx#1773
Commenter la réponse de coucou747

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.