calcul de la moyenne (language C)
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

calcul de la moyenne (language C)



  1. #1
    frankcity

    calcul de la moyenne (language C)


    ------

    Bonjour svp j’aimerais que vous m'aidiez a corriger ce programme .
    En effet il s’exécute mais ne fourni pas le résultat attendu : celle du calcul de la moyenne.
    Soit a écrire un programme qui calcule la moyenne des notes, ses notes étant fournies par l'utilisateur. La saisies des notes devra s'arrêter lorsqu'on entre un nombre négatif.

    Code:
    #include <stdio.h>
    main()
    {float num;
    float som ,note , moy;
    som=0;
    num=0;
    while (note>=0)
    {printf ("entrer un nombre");
    scanf ("%f" ,&note);
    som = som + note;
    num= num+1;
    }
    if (num>0)
    {moy = som/num;
    printf ("la moyenne est %f",moy);}
    }

    -----
    Dernière modification par JPL ; 23/09/2014 à 01h31. Motif: Correction de balise Code

  2. #2
    Paraboloide_Hyperbolique

    Re : calcul de la moyenne (language C)

    Bonsoir,

    Normal, puisque vous calculez la moyenne de TOUS les nombres (le nombre négatif inclus).

  3. #3
    fred1599

    Re : calcul de la moyenne (language C)

    À quoi sert num ? Pourquoi est-il de type float alors que tu incrémentes de 1 et qu'il est initialisé à 0 ?

    Je pense que tu te mélanges dans ton algorithme...

  4. #4
    polo974

    Re : calcul de la moyenne (language C)

    Citation Envoyé par frankcity Voir le message
    Bonjour svp j’aimerais que vous m'aidiez a corriger ce programme .
    En effet il s’exécute...
    La (mal)chance du débutant...
    Tu déclares som sur la pile, et tu testes sa valeur sans l'avoir initialisé...
    c'est vilain, ça, surtout avec un float.

    Bref,
    initialiser les valeurs,
    faire une boucle infinie,
    saisir,
    tester,
    si neg, finir le calcul , afficher la moyenne et faire un break
    sinon, sommer, incrémenter, boucler...
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    fred1599

    Re : calcul de la moyenne (language C)

    @polo974,

    Ce n'est pas la variable som qui n'est pas initialisée mais la variable note...

    @frankcity

    Il n'y a pas tant d'erreur que cela, c'est faisable de trouver par toi même, outre la signature de la fonction main incorrecte, je pense avoir compris certaines choses sur ton raisonnement.
    1. num permet de contrôler le nombre de notes entrées, mais la logique veut un type entier pour ce nombre
    2. scanf dans une boucle peut être dangereuse, il faudrait vérifier le retour de cette fonction
    3. note n'est pas initialisée


    Pour le reste ça me semble un raisonnement qui se tient... compliqué pour pas grand chose, mais ça tient la route.

  7. #6
    frankcity

    Re : calcul de la moyenne (language C)

    Merci bien pour vos explications.

    Code:
    scanf dans une boucle peut être dangereuse, il faudrait vérifier le retour de cette fonction
    En effet j'ai utiliser scanf pour que la lecture des notes soit faite par le programme principal .

    Code:
      note n'est pas initialisée
    pourquoi doit t'on l'initialisé ?

    Code:
    Normal, puisque vous calculez la moyenne de TOUS les nombres (le nombre négatif inclus).
    Ok ça marche bien avec
    Code:
    if (note<0) break;
    apres la lecture de scanf.

    mais je pensais que la boucle
    Code:
    while () ...;
    contrairement a
    Code:
    do ...while ;
    testait la valeur avant son entrée dans la boucle. svp qu'en est t-il ?

  8. #7
    fred1599

    Re : calcul de la moyenne (language C)

    pourquoi doit t'on l'initialisé ?
    Comment faire le test suivant,

    Code:
    while (note>=0)
    si note n'a pas de valeur spécifiée au préalable ?

    En fait le code doit ressembler à cela

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        int num, ret;
        float som ,note , moy;
        som = 0;
        num = 0;
        note = 0;
    
        while (note >= 0)
        {
            printf ("entrer un nombre: ");
            ret = scanf ("%f" ,&note);
            if (ret != 1) break; /* si conversion se passe mal on quitte la boucle */
            som += note;
            num += 1;
        }
    
        if (num > 0)
        {
            moy = som/num;
            printf ("la moyenne est %f", moy);
        }
    
        return 0;
    }

  9. #8
    frankcity

    Re : calcul de la moyenne (language C)

    Merci bien.

  10. #9
    frankcity

    Re : calcul de la moyenne (language C)

    svp pouvez vous m'en dire plus sur la condition ?
    Code:
    (ret != 1)

  11. #10
    fred1599

    Re : calcul de la moyenne (language C)

    scanf est une fonction renvoyant le nombre de conversions correctes. Dans notre cas, on cherche à convertir la valeur entrée par l'utilisateur en nombre flottant, soit une conversion. Si cette conversion est différente de 1, c'est sans doute qu'il y a problème, on doit donc quitter la boucle, sinon on risque la boucle infinie...

  12. #11
    minushabens

    Re : calcul de la moyenne (language C)

    Ce serait plus logique de faire le test note==0 à la fin de la boucle (une fois qu'on a lu note). Il suffit d'initialiser num à -1.

  13. #12
    frankcity

    Re : calcul de la moyenne (language C)

    Merci.
    svp quel est la différence fondamentale entre ses deux boucles ?

    Code:
    mais je pensais que la boucle
    while () ...;
    contrairement a
    do ...while ;
    testait la valeur avant son entrée dans la boucle. svp qu'en est t-il ?

  14. #13
    PA5CAL

    Re : calcul de la moyenne (language C)

    Bonjour

    Citation Envoyé par minushabens Voir le message
    Ce serait plus logique de faire le test note==0 à la fin de la boucle (une fois qu'on a lu note). Il suffit d'initialiser num à -1.
    Pour un compte correct, il faut bien continuer à initialiser num à 0.

  15. #14
    PA5CAL

    Re : calcul de la moyenne (language C)

    Citation Envoyé par frankcity Voir le message
    Merci.
    svp quel est la différence fondamentale entre ses deux boucles ?

    Code:
    mais je pensais que la boucle
    while () ...;
    contrairement a
    do ...while ;
    testait la valeur avant son entrée dans la boucle. svp qu'en est t-il ?
    La boucle "while(...) {...}" effectue le test au début de la boucle, alors que "do {...} while(...);" l'effectue à la fin.

    Avec "do {...} while(...);", on entre forcément au moins une fois dans la boucle, alors qu'avec "while(...) {...}" le contenu de la boucle est ignoré si le test retourne faux au départ.

  16. #15
    frankcity

    Re : calcul de la moyenne (language C)

    svp et pourquoi cette boucle n'exclu pas le terme negatif dans le calcul de la somme (voir programme initial) ?

  17. #16
    PA5CAL

    Re : calcul de la moyenne (language C)

    Certainement parce qu'il y a une erreur dans l'algorithme. Dans le cas où l'on saisit une valeur négative pour indiquer la fin de l'opération, il ne faut pas que cette valeur soit ajoutée à la somme calculée.

    Une façon correcte de procéder serait :

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        int num, ret;
        float som, note, moy;
    
        som = 0.0;
        num = 0;
    
        while (1)
        {
            printf ("entrer un nombre: ");
            ret = scanf ("%f" ,&note);
            if (ret != 1)
                break; /* si la conversion se passe mal on quitte la boucle */
            if (note < 0.0)
                break; /* si la valeur saisie est négative on quitte normalement */
            som += note;
            num ++;
        }
    
        if (num > 0)
        {
            moy = som/num;
            printf ("la moyenne est %f\n", moy);
        }
    
        return 0;
    }
    Dernière modification par PA5CAL ; 23/09/2014 à 16h41.

  18. #17
    minushabens

    Re : calcul de la moyenne (language C)

    Citation Envoyé par PA5CAL Voir le message
    Pour un compte correct, il faut bien continuer à initialiser num à 0.
    ah exact, j'avais mal lu et je pensais que la condition d'arrêt était note==0 (mais c'est vrai qu'on peut obtenir un zéro...).

  19. #18
    hamzadryuzaki

    Re : calcul de la moyenne (language C)

    Svp , comment calculer la moyenne de 25 elev , en utilisant les tableu , PS: Les notes se terminant par -1:
    exemple :
    éleve numero 1:
    12
    15
    -1
    éleve numero 2:
    13
    14
    -1
    .
    .
    éleve numero 25:
    13
    15
    -1
    la moyenne de éleve numero 1 est :
    .
    .
    la moyenne de éleve numero 25 est :

    Merci pour Aide

  20. #19
    polo974

    Re : calcul de la moyenne (language C)

    Tu trouveras le début de la réponse ici...
    Jusqu'ici tout va bien...

  21. #20
    JPL
    Responsable des forums

    Re : calcul de la moyenne (language C)

    Au cas où tu n'aurais pas compris le message précédent attirait ton attention sur : http://forums.futura-sciences.com/pr...ces-forum.html.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

Discussions similaires

  1. T STI Calcul valeur moyenne
    Par Lons dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 12/10/2011, 22h07
  2. Compilation Language C en Language Hex pour PIC16F877
    Par bibi_6919 dans le forum Électronique
    Réponses: 8
    Dernier message: 19/09/2011, 17h43
  3. Calcul d'une valeur moyenne
    Par bouly94 dans le forum Physique
    Réponses: 3
    Dernier message: 29/12/2009, 22h54
  4. Calcul de moyenne sous excel
    Par inviteb73ce398 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 14/06/2006, 10h52
  5. calcul d'une moyenne de notes
    Par invitee685b427 dans le forum Mathématiques du supérieur
    Réponses: 10
    Dernier message: 07/02/2005, 14h22