Partage
  • Partager sur Facebook
  • Partager sur Twitter

calcul d'une moyenne

Sujet résolu
    2 février 2012 à 12:04:04

    Bonjour à tous,

    Voici un programme qui me paraissait simple je dois simplement entrer le nombre de nombre composant ma moyenne, ensuite entrer c'est fameux nombre et pour finir en calculer la moyenne, seulement je ne comprend pas pourquoi mon programme ne me prend jamais en compte dans le calcul de la moyenne le dernier nombre entrer. Pour être clair si je lui dis que je vais entrer 4 nombre, il va me calculer la moyenne à partir des 3 nombres entrer et non des 4...

    voici le programme


    #include <stdio.h>
    
    
    
    int main()
    {
        double moy,resultat;
        int nb,nb1,i;
        scanf("%d\n",&nb);
        for (i=1;i<nb;i++)
        {
            scanf("%d\n",&nb1);
            resultat+=nb1;
        }
        moy=resultat/nb;
        printf("%lf",moy);
        return 0;
    }
    


    merci à tous
    • Partager sur Facebook
    • Partager sur Twitter
      2 février 2012 à 12:34:22

      for (i=1;i<nb;i++) devrait être :
      for (i=0;i<nb;i++) ou bien :
      for (i=1;i<=nb;i++)
      • Partager sur Facebook
      • Partager sur Twitter
        2 février 2012 à 12:43:54

        Comme dit plus haut, c'est parce que tu ne fais pas assez de tours.
        Petit moyen de savoir combien tu dois faire de tours : imagine les extrêmes. Ici, l'extrême est de prendre 1 note. Tu entres donc nb = 1.
        i = 1.
        i < nb ? i = 1 ; nb = 1 donc i < nb est faux.
        Tu fais 0 tour de boucle.
        Il te manque donc au moins un tour de boucle.
        • Partager sur Facebook
        • Partager sur Twitter
          2 février 2012 à 12:56:06

          Ben je ne comprends pas ça ne fonctionne pas avec les réponses données plus haut, enfaite j'avais déjà essayé c'est solution, mais pour le coup si je lui dis que je vais entrer 3 nombre par exemple et bien il m'en demande 4...le calcul de la moyenne ce fait bien sur 3 nombre par contre je dois en entrer 4...

          JE ne comprends pas ce qu'il ce passe sur ce code...

          Merci
          • Partager sur Facebook
          • Partager sur Twitter
            2 février 2012 à 13:12:12

            Le problème vient de tes "\n" dans tes scanf , retire les et ça marche (et bien sur ta boucle for qui doit être initialisée à i=0 et non i=1) ;) Je t'ai mis des printf en plus pour que ce soit plus compréhensible à l'utilisateur.

            int main()
            {
                double moy,resultat=0,nb1=0;
                int nb=0,i;
                printf("Combien de nombre pour la moyenne ? ");
                scanf("%d",&nb);
                
                for (i=0;i<nb;i++)
                {
                    printf("Nombre %d : ", (i+1));
                    scanf("%lf",&nb1);
                    resultat+=nb1;
                }
                
                moy=resultat/nb;
                printf("%f",moy);
                
                return 0;
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              2 février 2012 à 13:57:54

              Le truc de fou!!!! pourrais je avoir une explication sur ce point là? pourquoi les\n faisait bugger mon prog? (ou pas)

              Merci pour l'info.

              Arnd
              • Partager sur Facebook
              • Partager sur Twitter
                2 février 2012 à 14:03:10

                Je n'ai pas vraiment d'explication, même si ça parait plutôt logique, tu enregistres un entier dans la variable "nb" mais tu lui donnes une valeur qui n'est pas un entier "%d\n" puisqu'il y a un retour à la ligne...
                • Partager sur Facebook
                • Partager sur Twitter
                  2 février 2012 à 14:40:01

                  Yep enfin ça marche donc merci ;-)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 février 2012 à 16:08:12

                    scanf doit tenter de lire un caractère après le dernier à lire puis le remet dans la chaine. Comme il doit lire un '\n', il attend un autre caractère et se met à attendre. Quand tu appuies à nouveau sur '\n', ça débloque scanf, ce qui te permet de mettre le suivant.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    calcul d'une moyenne

                    × 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