Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème sur les exercices tableaux

Sujet résolu
    29 mai 2006 à 18:52:09

    Bonjour,

    Je lis actuellement le cour C/C++ et en mettant en pratique ce que j'ai appris sur les tableaux, un problème se pose.

    En effet en codant la fonction moyenne je me heurte à un refus catégorique de calculer cette pauvre moyenne arithmétique ^^.

    Je vous expose mon code.

    /* Exercices sur les tableaux proposés par le site du zero
                         Par Inter                             */

    #include <stdio.h>
    #include <stdlib.h>
    #include "tableau.h" /* Prototypes des fonctions */

    /*
    long somme(long tableau[], long tailleTableau);
    double moyenne(long tableau[], long tailleTableau);
    /*

    int main()
    {
        /*Déclaration du tableau et de sa longueur */

        long tableau[5] = {1,5,6,9,9},tailleTableau = 5;
        /* On affiche les resultats renvoyés par les fonctions */
        printf("%ld\n",somme(tableau,tailleTableau));
        printf("%ld\n",moyenne(tableau,tailleTableau));   
        system("PAUSE");
            return 0;
    }
    /* Fonction additionnant tous les chiffres du tableau */
    long somme(long tableau[], long tailleTableau)
    {
         /* mise en place des variables necessaires */
        long i = 0, somme = 0;
        /* On parcourt chaque case du tableau en ajoutant la valeur a une variable */
        for(i = 0;i < tailleTableau;i++){
            somme += tableau[i];
        }
        /* On renvoit cette valeur */
        return somme;
    }
    /* Fonction donnant la moyenne arithmetique des chiffres du tableau */
    double moyenne(long tableau[], long tailleTableau)
    {
        /* déclaration des variables necessaires */
        double moyenne = 0;
        /* Calcul de la moyenne arithmetique */
        moyenne = somme(tableau, tailleTableau) / tailleTableau;
        /* Et hop on renvoit :) */
        return moyenne;
    }


    Voila, la moyenne que je reçois est toujours de 0. Je me suis dit que ça devait être à cause que je divise 2 long et que j'attribue cette valeur à un double mais en regardant les différents corrigés sur le forum je m'aperçois que plusieur ont fait pareille ...

    Je ne comprend donc pas mon erreur.

    Merci d'avance de me consacrer un peu de votre temps précieux, j'imagine :) ,

    Respectueusement,

    Inter
    • Partager sur Facebook
    • Partager sur Twitter
      29 mai 2006 à 19:49:00

      Salut !
      Déjà, ne surchage pas ton code avec des commentaires parfois (souvent ?) inutile, surtout dans le cas de code court comme ici :) . On sait qu'un return retourne, sinon, on ne serait pas ici ;) . Et fais gaffe, la p'tite étoile est toujours à l'intérieur. Donc, ca donne :
      /*  commentaire  */


      Concernant ton code : Il y a un problème au niveau des types de retour de tes fonctions. Tu veux retourner un double dans ta moyenne, alors que tu fais appelle à ta fonction somme qui, elle, est de type long.

      Voici un code qui marche, ou j'ai remplacé le double de ta moyenne en long.

      /* Exercices sur les tableaux proposés par le site du zero
                           Par Inter                             */

      #include <stdio.h>
      #include <stdlib.h>
      long somme(long tableau[], long tailleTableau);
      long moyenne(long tableau[], long tailleTableau);
      /*
      long somme(long tableau[], long tailleTableau);
      double moyenne(long tableau[], long tailleTableau);
      */


      int main()
      {
          /*Déclaration du tableau et de sa longueur */
          long tableau[5] = {1,5,6,9,9},tailleTableau = 5;
          /* On affiche les resultats renvoyés par les fonctions */
          printf("%ld\n",somme(tableau,tailleTableau));
          printf("%ld\n",moyenne(tableau,tailleTableau));   
          system("PAUSE");
              return 0;
      }
      /* Fonction additionnant tous les chiffres du tableau */
      long somme(long tableau[], long tailleTableau)
      {
           /* mise en place des variables necessaires */
          long i = 0, somme = 0;
          /* On parcourt chaque case du tableau en ajoutant la valeur a une variable */
          for(i = 0;i < tailleTableau;i++){
              somme += tableau[i];
          }
          /* On renvoit cette valeur */
          return somme;
      }
      /* Fonction donnant la moyenne arithmetique des chiffres du tableau */
      long moyenne(long tableau[], long tailleTableau)
      {
          /* déclaration des variables necessaires */
          long moyenne = 0;
          /* Calcul de la moyenne arithmetique */
          moyenne = somme(tableau, tailleTableau) / tailleTableau;
          /* Et hop on renvoit :) */
          return moyenne;
      }


      Bonne continuation !
      • Partager sur Facebook
      • Partager sur Twitter
        29 mai 2006 à 20:04:42

        Merci pour cette réponse rapide.

        Les commentaires n'étaient là que pour ce post sur le forum en faite :p dans mon fichier il n'y en a pas ^^. Mais merci du conseil.

        Ensuite, si tu mets en long plutôt qu'un double il sera alors impossible d'avoir le résultat décimal... Sur mon exemple ça marche car la somme=30 mais sinon ... pas pratique :p.

        Comment faire pour sortir un double ou un float avec moyenne ?

        Merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter
          29 mai 2006 à 20:09:12

          au lieu de %ld mets %lf dans ton printf.
          et inscrit dans ta formule de la moyenne :
          moyenne = somme(tableau, tailleTableau) / ((float)tailleTableau);


          Ainsi tu n'auras pas de problème de transtyptage.
          • Partager sur Facebook
          • Partager sur Twitter
            29 mai 2006 à 20:12:47

            Héhé, essaye de le faire toi-même ! Je pense pas que ca soit difficile de le transformer en double... :p
            • Partager sur Facebook
            • Partager sur Twitter
              29 mai 2006 à 20:18:28

              Merci infiniment !

              Tout fonctionne à présent.

              Bonne soirée à vous, merci pour tout
              • Partager sur Facebook
              • Partager sur Twitter

              Problème sur les exercices tableaux

              × 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