Partage
  • Partager sur Facebook
  • Partager sur Twitter

Home made fnctn pour éléver nmbre à une puissance

Le résultat renvoyé est mauvais, la boucle while ne s'effectue pas

    22 juin 2020 à 15:49:45

    Hello,

    J'essaie de créer une fonction permettant d'élever un nombre à une puissance. 

    Voila la fonction 

    // Declaration fonction poweredNumber 
    int result = 1, number, exposant;
    int poweredNumber(number,exposant) 
    {
        while (exposant != 0) 
        {
            result *= number; 
            exposant --; 
            return result;
        }
    }

    Lorsque je l'utilise ensuite avec ce code 

    // Demander à user un nombre et un exposant - lui afficher le nombre après calcul  
    int main() 
    {
        printf("Quel est votre nombre ?\n"); 
        scanf("%d", &number); 
        printf("A quelle puissance voulez vous l'élever? \n"); 
        scanf("%d", &exposant); 
        poweredNumber(number, exposant); 
        printf("%d puissance de %d, est égal à %d. \n", number, exposant, result); 
     return 0;
    }

    Le résultat affiché est le suivant :  

    12 puissance de 45, est égal à 12.  


    D'où provient mon erreur d'après vous ? 

    Merci par avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2020 à 15:55:25

      Bonjour ! C'est une erreur classique : tu appelles la fonction sans récupérer sa valeur.

      Il faut faire :

      result = poweredNumber(number, exposant);

      Cela dit il y a d'autres erreurs qui suggèrent que tu as mal compris le rôle des différentes variables.

      Je corrige la fonction :

      // Declaration fonction poweredNumber
      int poweredNumber(int number, int exposant)  // les deux paramètres doivent être déclarés ici !
      {
          int result = 1;   // la valeur à retourner doit être déclarée ici !
          while (exposant != 0)
          {
              result *= number;
              exposant --;
          }    
          return result;
      }

      Attention : tu as utilisé une seule variable 'result' en variable globale, c'est à éviter (un coup à tout mélanger...) Pour le 'main', je pense qu'il faire ainsi :

      int main(void)
      {
          int result; // le 'result' du programme principal (pas le même que dans la fonction) doit être déclaré ici !
          /* les printf et les scanf... */
          result = poweredNumber(number, exposant);
          /* la fin */
      }

      Mais à mon avis il serait plus judicieux de ne pas donner les mêmes noms à l'appel et lors de la définition de la fonction.

      -
      Edité par robun 22 juin 2020 à 16:49:36

      • Partager sur Facebook
      • Partager sur Twitter
        22 juin 2020 à 16:23:51

        Wouhou merci pour ton aide, c'est beaucoup plus clair!

        Je corrige tout ça 

        • Partager sur Facebook
        • Partager sur Twitter
          22 juin 2020 à 16:50:25

          Note que je viens de corriger l'emplacement du « return result » dans la fonction : tu l'avais mis dans la boucle. Non, c'est une fois sorti de la boucle, lorsque le calcul est complètement terminé, qu'on retourne le résultat.
          • Partager sur Facebook
          • Partager sur Twitter
            23 juin 2020 à 2:07:08

            Le T aécrit:
            12 puissance de 45, est égal à 12.
            Évites des puissances aussi élevées. Pour un int tu n'as que 32 bits et même avec un long long tu n'as que 64 bits.
            2^64 est environ 10^19.
            Autrement, il faudra utiliser des float ou des double.
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

            Home made fnctn pour éléver nmbre à une puissance

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown