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

Signaler
Messages postés
6
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
17 novembre 2008
-
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
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:

13 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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
Messages postés
6
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
17 novembre 2008

Merci beaucoup ca marche.
Messages postés
1
Date d'inscription
lundi 8 août 2005
Statut
Membre
Dernière intervention
16 novembre 2008

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
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
minous2005, je ne vois pas ce que tu veux dire...
Messages postés
31
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
19 juillet 2011

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.
Messages postés
6
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
17 novembre 2008

Ne faudrait il pas ajouter un 

return (0);  a la fin pour ta fonction main...???
Messages postés
31
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
19 juillet 2011

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.
Messages postés
31
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
19 juillet 2011

Il manque } après le return, sorry ;)
Messages postés
6
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
17 novembre 2008

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:
Messages postés
6
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
17 novembre 2008

Il semble que pow() ne prenne en charge que les float.
Si minous2005 veut garder la fonction pow() il faut garder les float.
Messages postés
31
Date d'inscription
dimanche 24 décembre 2000
Statut
Membre
Dernière intervention
19 juillet 2011

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? :)
Messages postés
6
Date d'inscription
samedi 18 février 2006
Statut
Membre
Dernière intervention
17 novembre 2008

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
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
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