Partage
  • Partager sur Facebook
  • Partager sur Twitter

moyen de tableau

probleme

    14 août 2017 à 23:26:17

    salut  s'il vous plait  ..j'ai eu un problème au niveau de calculer moyen de tableau :le programme affiche null et voici mon code 
    #include <stdio.h>
    #include <stdlib.h>
    int moyentableau(int tableau[], int tailletableau);
    int main()
    {
      int  tableau[3]={2,1,0};
      moyentableau(tableau,3) ;
    
        return 0;
    }
    int moyentableau(int tableau[], int tailletableau){
    int i=0,somme;
    double moy;
    for(i=0;i<tailletableau;i++){
            somme += tableau[i];
    
    moy = somme / tailletableau;
    } printf("%f",moy);
    
    
    }
    

    -
    Edité par ali ha 14 août 2017 à 23:28:41

    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2017 à 23:54:13

      Initialise ta variable `somme` à 0.

      La ligne 15 provoque un comportement indéfini dû au fait que tu additionnes une valeur non initialisée sur la variable `somme` avec `tableau[i]`.

      -
      Edité par Ra'Jiska 15 août 2017 à 12:14:33

      • Partager sur Facebook
      • Partager sur Twitter
        15 août 2017 à 0:08:37

        En ajout, sors le statement ligne 17 du bloc de la boucle. Et indente ton code source.

        • Partager sur Facebook
        • Partager sur Twitter
          15 août 2017 à 8:53:34

          très bien ....le problème c'est au niveau de l'initialisation de variable somme merci beucoup .mais j'ai un autre problème :quand je devise 7 sur 3 par exemple le résultat obtenu c'est 2 .000000 

          et voici mon code

          double moyentableau(int tableau[], int tailletableau);
          int main()
          {
            int  tableau[3]={3,3,1};
            moyentableau(tableau,3) ;
          
              return 0;
          }
          double moyentableau(int tableau[], int tailletableau){
          int i=0,somme = 0;
          double moy = 0;
          for(i=0;i<tailletableau;i++){
                  somme += tableau[i];
          }
          moy = somme / tailletableau;
          
           printf("%f",moy);
          
          
          }
          
          
           

          -
          Edité par ali ha 15 août 2017 à 9:27:39

          • Partager sur Facebook
          • Partager sur Twitter
            15 août 2017 à 9:45:40

            C'est surprenant mais tout à fait logique. À la ligne 17, l'opération à droite du signe égale est une division entière ('somme' et 'tailletableau' sont entiers). Par exemple c'est la division 7/3, qui fait 2 (et il reste 1). Ensuite, le résultat de cette division est stocké dans la variable 'moy' qui est de type 'double', donc 2 est transformé en 2.0.

            Ce qu'il faut, c'est faire en sorte que l'opération à droite du signe égale soit une division à virgule. Une solution, c'est de forcer ça en faisant quelque chose comme :

            moy = 1.0 * somme / tailletableau;
            

            Il me semble que ça marche (mais je n'ai pas essayé) : ça « force » l'opération de droite à être une opération entre nombres à virgule.

            • Partager sur Facebook
            • Partager sur Twitter
              15 août 2017 à 12:13:56

              robun a écrit:

              C'est surprenant mais tout à fait logique. À la ligne 17, l'opération à droite du signe égale est une division entière ('somme' et 'tailletableau' sont entiers). Par exemple c'est la division 7/3, qui fait 2 (et il reste 1). Ensuite, le résultat de cette division est stocké dans la variable 'moy' qui est de type 'double', donc 2 est transformé en 2.0.

              Ce qu'il faut, c'est faire en sorte que l'opération à droite du signe égale soit une division à virgule. Une solution, c'est de forcer ça en faisant quelque chose comme :

              moy = 1.0 * somme / tailletableau;
              

              Il me semble que ça marche (mais je n'ai pas essayé) : ça « force » l'opération de droite à être une opération entre nombres à virgule.


              Cela fonctionne, mais j'aurais plus tendance à cast les opérandes en double par souci de propreté ;)

              moy = (double) somme / (double) tailletableau;



              • Partager sur Facebook
              • Partager sur Twitter
                15 août 2017 à 12:18:34

                Ou carrément déclarer somme en type double.
                • Partager sur Facebook
                • Partager sur Twitter
                  15 août 2017 à 12:21:31

                  GnuAs__ a écrit:

                  Ou carrément déclarer somme en type double.


                  Ce n'est pas cohérent dans le sens où la variable `somme` prendra la somme des éléments de `tableau` déclaré en `int`.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    15 août 2017 à 13:17:01

                    Bref, il y a plusieurs solutions. (Je préfère la cohérence : 'tableau' déclaré comme 'double' et 'somme' aussi.)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    moyen de tableau

                    × 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