IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

programme moyenne de 3 nombres


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Par défaut programme moyenne de 3 nombres
    bonjour,
    j'ai fait un petit programme pour calculer la moyenne de 3 nombres mais il me donne des resultats vraiment étranges, donc je pense qu'il y a un probleme dedans mais je ne le trouve pas.
    voilà mon programme et merci d'avance pour votre aide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include<iostream.h>
     
    float fonc_moy()
    {
         float a, b, c, moyenne;
                       cout<< "entrer 3 notes"<<endl;
                       cin>> a;
                       cin>> b;
                       cin>> c;
                            {
                                       moyenne = (( a+b+c )/3) ;
                            }
         return moyenne;
    }
     
     
    int main()
    {
        float moyenne;
        fonc_moy();
        cout<<"la moyenne est de :"<<moyenne<<endl;
        system("PAUSE");
        return 0;
    }

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    La variable moyenne déclarée dans la fonction fonc_moy n'a rien à voir avec la variable de même nom déclarée dans la fonction main. c'est le principe de variables locales. La solution : mettre dans main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    float moyenne;
    moyenne = fonc_moy();
    ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Par défaut
    ok merci beaucoup

    je pensait qu'un nom de variable valait pour tout le programme, je ne pensait pas que c'était une variable locale qui pour moi ne servait qu'a faire des boucles.

    merci encore je pense que cela va m'aider à résoudre mes autres problèmes

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par moman Voir le message
    ok merci beaucoup

    je pensait qu'un nom de variable valait pour tout le programme, je ne pensait pas que c'était une variable locale qui pour moi ne servait qu'a faire des boucles.

    merci encore je pense que cela va m'aider à résoudre mes autres problèmes
    Salut, et bienvenue sur le forum.

    Pour information, une variable existe pour le programme entre le moment où l'on croise sa déclaration (float moyenne; par exemple) et celui où l'on croise l'accolade fermante correspondant au bloc d'instructions dans lequel la variable est déclarée.

    Ainsi, dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    float fonc_moy()
    {
        float a, b, c, moyenne;
        cout<< "entrer 3 notes"<<endl;
        cin>> a;
        cin>> b;
        cin>> c;
        { // !!! cette accolade ne sert strictement à rien et pourrait etre
          // supprimée !!!
        moyenne = (( a+b+c )/3) ;
        } // si on supprime l'accolade ouvrante, supprimer également celle-ci
         return moyenne;
    } /// (1)
    toutes les variables déclarées dans fonct_moy (a, b, c et moyenne) sont détruites au même endroit : en (1)

    Pour être complete, une variable est globale lorsqu'elle apparait en dehors de toute fonction, mais il est largement préférable d'en éviter l'usage autant que faire se peut (cela t'intéresse de savoir pourquoi, n'hésite pas à le demander )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Par défaut
    merci pour la petite précision
    pour la variable globale il me semble qu'on m'a deja dit de ne pas l'utiliser car je risquait de " m'embrouiller " dans un programme trop long

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Il y a de cela, mais il y a surtout deux problèmes principaux:

    Le premier est que tu n'a strictement aucun contrôle sur l'utilisation qui est faite d'une variable globale: n'importe quelle fonction est susceptible de la modifier, et tu ne peux donc strictement jamais faire la moindre présomption sur son état de validité.

    Le deuxième est que, si tu déclares une variable de même nom qu'une variable globale dans une fonction, tu "cache" la déclaration de la variable global tant que la variable locale existe.

    Tu *risque* donc de croire que tu es occupé à modifier la variable globale alors qu'en réalité les modifications sont faites sur... la variable locale
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 63
    Par défaut
    ok merci pour l'explication

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/03/2012, 10h32
  2. [Débutant] Programme moyenne
    Par LeonHONORE dans le forum Pascal
    Réponses: 5
    Dernier message: 04/05/2008, 21h48
  3. Réponses: 2
    Dernier message: 20/02/2008, 22h44
  4. Réponses: 9
    Dernier message: 12/10/2006, 00h36
  5. Comment calculer des moyennes sur des nombres positifs
    Par robertetgorgette dans le forum Access
    Réponses: 2
    Dernier message: 20/07/2006, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo