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 :

Débutante recherche conseils : boucles


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Débutante recherche conseils : boucles
    Bonjour à tous,

    Le but du programme est de calculer la moyenne de notes inscrites par l'utilisateur.

    J'ai débuté l'apprentissage du C++ il y a peu, et me voila bloquée sur un programme qui s'exécute normalement mais qui, après avoir entré la première note, demande à l'utilisateur s'il souhaite continuer ou pas. Et c'est là que je bloque. Je pense avoir fait une erreur sur les boucles, mais j'ai beau lire et relire mon code, je ne trouve pas la solution.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        //declaration
        int note, cumul, nbre;
        string rep;
     
        //initialisation
        cumul = 0;
        nbre = 0;
     
        do{
            cout << "Entrez une note" << endl;
            do {
                cin >> note;
            } while (note<0 || note>20);
     
            //calculs
            cumul = cumul + note;
            nbre++;
     
            do{
            cout << "Voulez vous continuer ? (Oui/Non)" << endl;
            cin >> rep;
            } while ((rep == "Non") || (rep == "Oui"));
     
        } while (rep == "Non");
     
        //affichage de la moyenne
        cout << "La moyenne de ces" << nbre << " notes est de " << (cumul/nbre) << endl;
     
    }
    Je viens donc quémander votre aide

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    while(condition) indique "tant que 'condition' est vrai faire des tours de boucles".
    Ainsi, il ne faut pas faire while(rep == "non") mais while(rep != "non")

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci Neckara pour votre aide. Effectivement, il y avait bien une erreur à ce niveau là.

    A présent, le programme bloque et réclame toujours une réponse de l'utilisateur "Voulez vous continuer ? (Oui/Non). Il y a aussi un bug au niveau de la boucle qui vérifie la note (entre 0 et 20).

    Les boucles me donnent beaucoup de peine décidément.

    Heureusement, je me suis achetée 3 bouquins qui sont cités dans la rubrique livres C++ de ce site. Peut-être qu'alors je réussirais à comprendre et modifier mon code.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Pour la boucle du "oui"/"non", relisez ce que je vous ai dit au post précédent.

    Pour les notes, il faudrait nous dire quel est le bug pour que nous puissions vous aider.

    A votre niveau, ce n'est pas un problème de connaissance mais de méthode et de rigueur.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'approuve le fait que je n'ai pas la méthodologie nécessaire, mais il faut bien un début à tout. Je suis assez réticente à poster dans les forums pour demander de l'aide car ce n'est pas toujours bien vu par les pros de la programmation. Or, il ne s'agit pas de fainéantise mais d'une réel problème que je n'arrive pas à solutionner.

    Donc, je vous remercie de m'aider.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Hello,

    Citation Envoyé par Elragail Voir le message
    Je suis assez réticente à poster dans les forums pour demander de l'aide car ce n'est pas toujours bien vu par les pros de la programmation. Or, il ne s'agit pas de fainéantise mais d'une réel problème que je n'arrive pas à solutionner.
    C'est pour cela qu'il y a ici un sous-forum « débuter » qui sert précisément à cela (celui dans lequel tu lis ce message).

    Ne t'inquiète pas. Ce qui n'est pas apprécié ici, ce sont les gens qui déposent leur énoncé tel quel sans s'y intéresser, ou les gens qui se contentent de dire « ça marche pas » sans donner plus de précision. Mais si tu fais l'effort de choisir le bon forum, de rédiger proprement tes messages et d'expliquer clairement ce sur quoi tu bloques, tu trouveras toujours quelqu'un pour t'aider.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci Obsidian, vous me rassurez.

    Bon, au niveau du code ça s'est un peu arrangé mais pas totalement puisque lors de l'affichage en mode console, je n'arrive pas à sortir de la boucle "Voulez-vous continuer (Oui/Non).

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        //declaration
        int note, cumul, nbre;
        string rep;
     
        //initialisation
        cumul = 0;
        nbre = 0;
     
        do{
            cout << "Entrez une note entre 0 et 20" << endl;
            do {
                cin >> note;
            } while (note<0 || note>20);
     
            //calculs
            cumul = cumul + note;
            nbre++;
     
            do {
            cout << "Voulez vous continuer ? (Oui/Non)" << endl;
            cin >> rep;
            } while (rep != "Oui");
     
        } while (rep != "Non");
     
        //affichage de la moyenne
        cout << "La moyenne de ces" << nbre << " notes est de " << (cumul/nbre) << endl;
     
    }


    Voilà le soucis, c'est que la moyenne ne s'affiche pas car on reste dans la boucle si on répond Non. Et je ne comprends pas pourquoi.

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Essayez de parcourir votre code et de réfléchir à ce qu'il fait en le parcourant ligne à ligne.

    Dans quel cas la condition est-elle fausse, ie dans quels cas sort-on de la boucle ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    On sort de la boucle quand la condition du while est vraie donc que la réponse soit différente que "Oui". La condition sera fausse si l'utilisateur répond "Oui". Est-ce cela ?

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Indice : attention aux doubles négations !

    Citation Envoyé par Elragail Voir le message
    On sort de la boucle quand la condition du while est vraie donc que la réponse soit différente que "Oui". La condition sera fausse si l'utilisateur répond "Oui". Est-ce cela ?
    « while » signifie « tant que ». Ta boucle peut donc être traduite en français par :

    « Effectue { <contenu du bloc> } Tant Que ( rep Est Différent De "Oui" ) ».

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    J'ai beau triturer mon code, il n'y a rien à faire, je suis bloquée. Je m'en veux de ne pas y arriver.

  12. #12
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    La bidouille c'est bien, mais dans ton code il n'y en a pas besoin. Si tu n'as pas tout compris sur les boucles ou d'autres bases, tu peux toujours regarder des tutos sur le net. Il y a de bons tutoriels pour apprendre C++ sur ce site pour debuter. Sinon montre-nous ton code pour voir ou t'en es.

  13. #13
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Au début, tu avais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            do{
            cout << "Voulez vous continuer ? (Oui/Non)" << endl;
            cin >> rep;
            } while ((rep == "Non") || (rep == "Oui"));
     
        } while (rep == "Non");
    Ce qui est bien, c'est que tu sépare la gestion dela validité de la saisie utilisateur (le premier while) avec ce que tu dois en faire par la suite (le second). Le problème, c'est que tu t'es trompée sur le sens des conditions.

    Par la suite, tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            do {
            cout << "Voulez vous continuer ? (Oui/Non)" << endl;
            cin >> rep;
            } while (rep != "Oui");
     
        } while (rep != "Non");
    Cette fois-ci, les conditions sont dans le bon sens, mais ton premier while n'autorise que la saisie de "Oui". Si l'utilisateur saisi quoi que ce soit d'autre, y compris "Non", on continue à lui demander s'il veut boucler.

    Si on parle en français, on veut que la première boucle continue tant qu'il n'a pas saisi "Oui" ou "Non" (mais attention à l'utilisation de "ou" dans la langue courante). C'est à dire (tu l'écris comme tu veux, c'est équivalent, mais certains y arrivent mieux d'une manière que de l'autre ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (!((rep == "Non") || (rep == "Oui"))); // Tant qu'on n'a pas soit oui, soit non
    while (rep != "Non" && rep != "Oui"); // Tant que la réponse est différente de oui et qu'elle est différente de non
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci JolyLoic, j'étais loin de pouvoir corriger mon erreur toute seule. Mais j'ai compris pourquoi ça ne fonctionnait pas.

  15. #15
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 583
    Points : 1 615
    Points
    1 615
    Par défaut
    Tu peux donc passer le thread en "résolu"
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

Discussions similaires

  1. [UML] Débutant demande conseil
    Par materiel67 dans le forum Débuter
    Réponses: 3
    Dernier message: 28/12/2005, 19h56
  2. Débutant - Recherche une alternative à TStringGrid
    Par TopDelire dans le forum Débuter
    Réponses: 2
    Dernier message: 27/12/2005, 14h47
  3. [Débutant] Recherche controle ActiveX
    Par Invité dans le forum MFC
    Réponses: 2
    Dernier message: 19/10/2005, 17h01
  4. recherche conseil(s)
    Par djynwk dans le forum C++
    Réponses: 1
    Dernier message: 26/09/2005, 13h36
  5. Débutant recherche SGBD ... (mylittlebase ?)
    Par Phil39 dans le forum Débuter
    Réponses: 1
    Dernier message: 10/10/2004, 10h25

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