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 :

Problème de compréhension boucle do while


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Points : 61
    Points
    61
    Par défaut Problème de compréhension boucle do while
    Bonjour à toutes et tous .

    Je recherche un correcteur (Bénévole.) sympa .

    J'ai créé un petit morceau de code , que je ne parviens pas à faire fonctionner selon mes désirs .
    Je voudrais (Pour le moment .)tester l'entrée "longueur ":
    1° Si l'utilisateur n'écrit pas des nombres , afficher un message d'erreur ,et continuer le programme .
    2° Si l'utilisateur entre des nombres .. ras ..
    Voici mon oeuvre ... ....
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #include "std_lib_facilities.h"
     
    int main()
    {
        double  a , b , c , e ;              // pour stocker les surfaces
        double  va = 0 , vb = 0  ;                    // pour stocker les volumes
        double longueur = 0 ;
        double largeur = 0, largeur_b  = 0 ;
        double hauteur = 0 ;
        double epaisseur = 0 ;
        double nombres =  ( nombres > 0 , nombres < 1999);
     
     
             cout << '\n' << "Entrez la longueur de votre conteneur en mètre :" << '\n';
             cin >> longueur;
             do
                {
                if (!(longueur != nombres))
     
                cout << '\n'<< "Erreur , veuillez entrer des nombres  :  " << '\n';
                break ;
                cout << '\n'<< "Entrez la longueur de votre conteneur en mètre : " << '\n';
                cin >> longueur;
            }
                while    (longueur == nombres);
                  cout <<'\n' << "Entrez la largeur de votre conteneur :" << '\n';
                  cin >> largeur ;
     
        a = (longueur * largeur);
        cout << "Surface de base de votre conteneur : \n " << a << " m2" << '\n';
        cout << '\n' << "Entrez sa hauteur en mètre : \n ";
        cin >> hauteur ;
        va = (a * hauteur);
        cout << "Volume total de votre conteneur : \n " << va << " m3 " << '\n';
     
        cout << '\n' << "Entrez l'épaisseur des planches en mètre : \n ";
        cin >> epaisseur;
     
        b = ((longueur * hauteur) * epaisseur) * 2 ;             // calculer le volume des 2 grands côtès
        //cout << "Volume des  grands côtés : " << b << '\n';      // pour controler l'exactitude des opérations
        largeur_b = (largeur - (epaisseur * 2 ));                // calculer la largeur des 2 petits côtés
        //cout << "Largeur du petit côté :" << largeur_b << '\n';  // pour controler l'exactitude des opérations
        c = ((largeur_b * 2) * hauteur)* epaisseur;              // calculer le volume des 2 petits côtés
        //cout << "Volume des petits côtés 2 : " << c << '\n';     // pour controler l'exactitude des opérations
        e = ((longueur * largeur) *epaisseur) * 2;               // fond et couvercle
        //cout << "Volume du fond et du couvercle :" << e << '\n'; // pour controler l'exactitude des opérations
     
        vb = (b + c + e ) ;
        cout << '\n' << "Le volume de bois  utilisé est de  : \n  " << vb  << " m3" << '\n';
        cout << '\n' << "La contenace de votre conteneur est de : \n  " << va - vb << " m3" << '\n' << '\n';
    }
    Merci .
    Cordialement.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Je pense qu'il y a déjà une erreur ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double nombres =  ( nombres > 0 , nombres < 1999);
    nombres aura la valeur de l'expression donc sera soit 0, soit 1.... et je pense que ce n'est pas du tout ce que tu veux.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Points : 61
    Points
    61
    Par défaut probleme de comprehension boucle do while
    Bonsoir à toutes et tous .

    Bon je ne voulais pas l'annoncer d'entré , mais je pense que mes problèmes proviennent du fait que l'énoncé de mon contrôle de départ est faux .

    J'ai tenté plusieurs solutions sans succès :
    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
     
             cout << '\n' << "Entrez la longueur de votre conteneur en mètre :" << '\n';
             cin >> longueur;
             do
                {
                if (!(longueur == longueur > 0 || longueur < 1999))
     
                cout << '\n'<< "Erreur , veuillez entrer des nombres  :  " << '\n';
                break ;
                cout << '\n'<< "Entrez la longueur de votre conteneur en mètre : " << '\n';
                cin >> longueur;
            }
                while    (longueur == longueur > 0 || longueur < 1999);
                  cout <<'\n' << "Entrez la largeur de votre conteneur :" << '\n';
                  cin >> largeur ;
    Cela ne me donne pas le résultat escompté .

    Que dois-je mettre et pourquoi je ne trouve pas ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!(longueur == longueur >0 || longueur < 1999 ))
    Merci .
    Cordialement.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    j'essaye de te mettre sur la piste...

    renvoie un booléen (est ce que oui ou non, longueur > 0) donc quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    longueur == longueur >0
    tu testes si longueur est égal au booléen renvoyé parSinon, la première chose que tu fais dans ta boucle est le même test que celui de ton while, pourquoi ne pas faire directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (condition) {...}
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    do {...} while (condition);
    ?

    A quoi sert dans ta boucle ?
    Repense bien à ce que tu veux faire...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Points : 61
    Points
    61
    Par défaut Problème de compréhension boucle do while
    Bonsoir à toutes et tous .

    Merci @GeantVert13 .
    Oui je pense avoir compris le renvois booléen . Vrais ou Faux , Oui ou Non .
    Je voudrais tester l'entrée :
    Donc longueur == a des nombres , c'est la que je coince ...
    Ma première idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (longueur == 1,2,3,4,5,6,7,8,9,0)
    (longueur == 1||2||3||4||5||6||7||8||9||0)
    cela ne fonctionne pas non plus .
    En fait je ne parvient pas à trouver comment vérifier .
    Si c'est oui == à des nombres fait cela ,
    Si c'est non fait ceci .

    Ca m'énerve ...

    Cordialement.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    je ne comprends pas du tout ce que tu souhaites faire.
    Une comparaison est un opérateur binaire, il est utilisé entre son membre de gauche et son membre de droite.
    Partant de là, il est aberrant de vouloir écrire if (0 < a < 10), le résultat n'est pas du tout celui qu'un esprit mathématique croira, et indéterminé.
    De même que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (longueur == 1,2,3,4,5,6,7,8,9,0)
    (longueur == 1||2||3||4||5||6||7||8||9||0)
    Bien que l'opérateur , existe, son utilisation est rarement souhaitée par un débutant. (http://en.wikipedia.org/wiki/Comma_operator)

    Et en général http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

    J'ai beau relire, je ne parviens pas à comprendre ce que tu veux réaliser comme test.
    A la limite, en extrapolant, je me dis "peut-être qu'il veut vérifier si la longueur est comprise entre 2 nombres".
    Auquel cas :
    - si tu as 2 bornes, tu dois avoir 2 variables, et pas une variable au pluriel (nombres )
    - une variable de type basique ne peut contenir qu'une unique valeur (ouf)
    - pour tester des bornes, on teste si l'on est supérieur à la borne inférieure, ET inférieur à la borne supérieure
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Points : 61
    Points
    61
    Par défaut Problème de compréhension boucle do while
    Bonjour à toutes et tous .

    @Bousk . Merci pour ton aide .
    J'ai beau relire, je ne parviens pas à comprendre ce que tu veux réaliser comme test.
    Je désirerait juste comprendre comment vérifier que l'utilisateur entre des nombres . Si il écrit abcde à la place , afficher un message d'erreur qui lui demande d'inscrire des chiffres et redemande la longueur du conteneur en mètre .

    Merci .

    En fait le test "primaire" , je pense avoir compris . Ce que je ne parviens pas à réaliser , c'est continuer le programme après le message d'erreur .

    La console me renvoie :

    Entrez la longueur de votre conteneur en mètre : // Si j'écris des nombres RAS
    mp // Si j'écris mp le programme ce ferme
    Erreur , entrez des nombres !
    logout
    programme terminé

    Cordialement .

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Je suis tombé sur ceci http://www.cplusplus.com/forum/articles/6046/
    Et tu as également ceci http://www.cplusplus.com/reference/i...perator%3E%3E/

    A priori, tu as un moyen avec des exceptions à intercepter.
    Sinon la méthode courante est d'utiliser un char (ou string), et de vérifier qu'il contient un chiffre (ou un nombre) avant de le transformer dans un int.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     double longueur=0;
        bool valeur_ok = false;
     
        do
        {
            std::cout << "Entrez la longueur: ";
            std::cin.clear();
            std::cin.sync();
            std::cin >> longueur;
            if (longueur > 0)
                valeur_ok = true;
            else
                std::cout << "Veuillez entrer un nombre > 0 !" << std::endl;
        } while (!valeur_ok);
    mais si zero est une valeur correcte ça ne marchera pas, il faudra prendre la méthode de Bousk.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Points : 61
    Points
    61
    Par défaut Problème de compréhension boucle do while
    Bonjour à toutes et tous .

    @Bousk Merci .

    Je n'ai pas encore tout compris (Le fonctionnement , mon anglais est ...) mais mon code fonctionne exactement comme je le voulais .

    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
     
    int main()
    {
        double  a , b , c , e ;              // pour stocker les surfaces
        double  va = 0 , vb = 0  ;                    // pour stocker les volumes
        double hauteur = 0 ;
        double epaisseur = 0 ;
        string input = "";
            int longueur = 0 ; int largeur = 0 ; int largeur_b = 0;
     
     
            while (true) {
             cout << '\n' << "Entrez la longueur de votre conteneur en mètre :" << '\n';
             getline(cin, input);
     
             stringstream myStream(input);
             if (myStream >> longueur)
                 break;
                cout << '\n'<< "Erreur , veuillez entrer des nombres  !  " << '\n';
     
        }
            while (true) {
        cout << '\n' << "Entrez la largeur de votre conteneur en mètre :" << '\n';
        getline(cin, input);
     
        stringstream myStream(input);
        if(myStream >> largeur)
            break;
        cout << '\n' << "Erreur , veuillez entrer des nombres ! " << '\n';
            }
    Merci à tous .
    Cordialement.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Points : 61
    Points
    61
    Par défaut Problème de compréhension boucle do while
    Bonsoir à toutes et tous .

    Je me suis "trompé" ... car je n'ai encore pas tout compris .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     int longueur = 0 ; int largeur = 0 ; int largeur_b = 0;
    Avec cette partie , j'obtiens des résultats totalement faux si mes multiplications ont des virgules .
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        double  a , b , c , e ;                           // pour stocker les surfaces
        double  va = 0 , vb = 0  ;                    // pour stocker les volumes
        double longueur = 0 ;
        double largeur = 0 , largeur_b = 0 ;
        double hauteur = 0 ;
        double epaisseur = 0 ;
        string input = "";
    Cordialement .

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 176
    Points : 258
    Points
    258
    Par défaut
    Donc ?

    à la base tu avais mis des doubles... pourquoi avoir changé si tu veux stocker des nombres à virgule flottante ?

    si tu déclares une variable 'int' tu ne peux y stocker qu'un entier.

Discussions similaires

  1. Problème avec une boucle do while
    Par azertym dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/02/2012, 14h37
  2. Problème avec deux boucles do whiles imbriquées
    Par breizh297 dans le forum Fortran
    Réponses: 1
    Dernier message: 15/11/2010, 08h37
  3. [AC-2003] Problème avec ma boucle Do While
    Par maw59 dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/03/2010, 11h21
  4. [AC-2007] Probléme avec une boucle DO While
    Par theBinette dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2010, 17h10
  5. Problème Boucle Do-While?!
    Par Julien_C++ dans le forum C++
    Réponses: 6
    Dernier message: 29/07/2006, 12h23

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