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 :

boucle while, precision syntaxe


Sujet :

C++

  1. #1
    S2S
    S2S est déconnecté
    Membre averti Avatar de S2S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 336
    Points : 403
    Points
    403
    Par défaut [*]boucle while, precision syntaxe
    lu,
    je n'arive pas a faire fonctionné le test d'une boucle do...while
    ca marche si je la simplifie comme ca:
    mais (il en fallait un...), je doit tester si la saisi est egale a 1 OU 2 OU 3,
    j'ai donc essayer ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while (mode!= 1 || 2 || 3)
    while (mode!= 1 || mode!= 2 || mode != 3)

    mais la boucle ne fini jamais meme si 'mode' est bien egale a 1,2 ou 3 (verifier)
    je n'ai pas trouver de syntaxe tres precise sur mes doc. (pdf, htm...)

    Je souhaiterai donc avoir des precisions sur la syntaxe 'do...while'

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Les opérateurs logiques (||, &&, etc.) renvoient un booléen. Tu ne peux donc pas les chaîner de cette manière (mode!= 1 || 2 || 3).
    Ta seconde syntaxe est plus correcte, il faut juste remplacer les || par des && (tu veux boucler tant que mode n'est pas 1 ET mode n'est pas 2 ET mode n'est pas 3).

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    EDIT : après avoir lu la réponse de Laurent, je crois que je me suis embrouillé avec les || et les &&

    EDIT2 : bon j'ai rien dit, je me suis trop embrouilllé

  4. #4
    S2S
    S2S est déconnecté
    Membre averti Avatar de S2S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 336
    Points : 403
    Points
    403
    Par défaut
    rapide merci,

    un apercu de la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int mode;
    do
    {
    cout << "Choix du mode (1,2 ou 3) : ";
    cin >> mode;
    cout << "mode = " << mode << endl;
    } while (mode!= 1 || mode!= 2 || mode != 3);
    cout << "valeur de sorti : " << mode;
    return 0;
    }
    je souhaite sortir de la boucle quand 'mode' prend une des valeur suivante: 1,2,3

    ca resemble a un OU quand meme, et pourtant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    do
    {
    cout << "Choix du mode (1,2 ou 3) : ";
    cin >> mode;
    cout << mode << endl;
    } while (mode!= 1 && mode!= 2 && mode != 3);
    && fonctionne a merveille.
    j'ai besoin d'une petite explication la suis perdu (mais ca marche)

  5. #5
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    je souhaite sortir de la boucle quand 'mode' prend une des valeur suivante: 1,2,3
    C'est à dire lorsque mode est égal à 1, ou mode est égal à 2, ou mode est égal à 3, or l'opérateur est égal est ==, donc :

    while (mode == 1 || mode == 2 || mode == 3);

    or toi tu utilises !=, donc différent de. Ton code se traduit par :

    Je souhaites sortir de la boucle lorsque mode est différent de 1, différent de 2 et différent de 3 (donc quand mode vaut 1, 2, ou 3), ce qui se traduit en C++ par :

    while (mode != 1 && mode != 2 && mode != 3);

  6. #6
    S2S
    S2S est déconnecté
    Membre averti Avatar de S2S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 336
    Points : 403
    Points
    403
    Par défaut
    apparament, do...while execute la boucle tant que la condition est vrai:
    La structure de contrôle do permet, tout comme le while, de réaliser des boucles en attente d'une condition. Cependant, contrairement à celui-ci, le do effectue le test sur la condition après l'exécution des instructions. Cela signifie que les instructions sont toujours exécutées au moins une fois, que le test soit vérifié ou non. Sa syntaxe est la suivante :

    do opération;
    while (test);
    opération est effectuée jusqu'à ce que test ne soit plus vérifié.

    L'ordre d'exécution est :

    opération
    test

    Exemple 2-4. Boucle do

    p = i = 1;
    do
    {
    p = p * i;
    i = i + 1;
    } while (i != 10);
    donc !=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (mode != 1 || mode != 2 || mode != 3);
    mais non, ca na fonctionne pas
    il faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (mode != 1 && mode != 2 && mode != 3);
    maintenant j'aimerai comprendre pourquoi '&&' fait un 'OU'...

  7. #7
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    Citation Envoyé par bakura
    Je souhaites sortir de la boucle lorsque mode est différent de 1, différent de 2 et différent de 3 (donc quand mode vaut 1, 2, ou 3).

  8. #8
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Lit mon message juste avant le tiens .

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Le grand problème vient, le plus souvent, du simple mauvais usage, en francais de OU par rapport au ET...

    Quand on parle, on dira par exemple
    Tant que a est différent de 1 OU que a est différent de 2 OU que a est différent de 3
    alors qu'il faudrait, dans ce contexte, dire
    Tant que a est différent de 1 ET que a est différent de 2 ET que a est différent de 3
    En effet, le test doit donner VRAI tant que a n'a pas l'une des trois valeurs, et, passer à FAUX si a passe à une des valeurs envisagée.

    Or, l'opérateur qui permet de passer de VRAI à FAUX si une des parties du test devient fausse, c'est l'opérateur ET

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu veux sortir de la boucle lorsqu'il vaut 1 ou 2 ou 3. Or la condition de while est la condition pour continuer la boucle, donc l'inverse.
    Donc : tu veux rester dans la boucle tant qu'il ne vaut pas 1 et pas 2 et pas 3.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 947
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 947
    Points : 5 660
    Points
    5 660
    Par défaut
    Sie,
    Citation Envoyé par koala01
    Quand on parle, on dira par exemple ...
    Ah bon, qui ça ?

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    N'importe qui...

    Bien souvent, tu entendra les gens utiliser un OU alors qu'en fait ils auraient du utiliser un ET, voire l'inverse

    EDIT entend par là le fait que, sémantiquement parlant ils auraient du utiliser le ou au lieu du et... ou l'inverse

  13. #13
    Membre confirmé
    Avatar de gb_68
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 232
    Points : 546
    Points
    546
    Par défaut
    Ah bon, qui ça ?
    N'importe qui...
    Je dirais plutôt ceux qui ne connaissent pas la logique booléen de base

    sortir si (il fait beau) OU (j'ai un parapluie)
    devient
    rester tant que NON [ (il fait beau) OU (j'ai un parapluie)]
    soit
    rester tant que NON(il fait beau) ET NON(j'ai un parapluie)
    rester tant que (il ne fait pas beau) ET (je n'ai pas de parapluie)
    Et dans ce genre de cas (phrases qui sont plus parlantes que !(a!=0) || (b && c) ... ) tout le monde est d'accord sur l'usage des OU et des ET.

  14. #14
    S2S
    S2S est déconnecté
    Membre averti Avatar de S2S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 336
    Points : 403
    Points
    403
    Par défaut
    dzl plantage du net (j'etait en train de repondre)
    Apres moulte test, ceci fonctionne comme il faut (du moin comme je veut)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int mode;                                                   
    do
    {
    cout << "Choix du mode (1,2 ou 3) : ";
    cin >> mode;
    cout << "mode = " << mode << endl;
    } while (mode != 1 && mode! = 2 && mode != 3);
    cout << "valeur de sorti : " << mode; 
    return 0;
    }
    en bon francois:
    continue tant que "mode" different de "1" =VRAI
    ET continue tant que "mode" different de "2" =VRAI
    ET continue tant que "mode" different de "3" =VRAI

    DONC si une des conditions devient FAUX, on on sort j'ai bon la

  15. #15
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int mode;                                                   
    do
    {
    cout << "Choix du mode (1,2 ou 3) : ";
    cin >> mode;
    cout << "mode = " << mode << endl;
    } while ( !(mode == 1 || mode == 2 || mode == 3) );
    cout << "valeur de sorti : " << mode; 
    return 0;
    }
    Faire la boucle tant qu 'il n' y a pas mode = 1, mode = 2 ou mode = 3.
    sinon t'as bon

  16. #16
    S2S
    S2S est déconnecté
    Membre averti Avatar de S2S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 336
    Points : 403
    Points
    403
    Par défaut
    alors c'est bon.

    un dernier chose pour que ce soit complet...le OU:continue tant que "mode"

    Pouquoi ca ne fonctionne pas si je met:
    continue tant que "mode" different de "1" =VRAI
    OU continue tant que "mode" different de "2" =VRAI
    OU continue tant que "mode" different de "3" =VRAI

    d'apres mes cours (resorti du placard pour l'ocasion):
    ET logique // DONC (pour move= 1 2 ou 3) :
    | A | B |out|/| 1 | 2 | 3 |out|
    | 0 | 0 | 0 |//| 0 | 0 | 0 | 0 | VRAI SEULEMENT
    | 1 | 0 | 0 |//| 1 | 0 | 0 | 0 | SI TOUS SONT FERMER (=1)
    | 0 | 1 | 0 |//| 1 | 1 | 0 | 0 |
    | 1 | 1 | 1 |//| 1 | 1 | 1 | 1 |
    OU logique
    | A | B |out|/| 1 | 2 | 3 |out|
    | 0 | 0 | 0 |//| 0 | 0 | 0 | 0 |
    | 1 | 0 | 1 |//| 1 | 0 | 0 | 1 | VRAI SI AU MOIN UN EST FERMER (=1)
    | 0 | 1 | 1 |//| 1 | 1 | 0 | 1 |
    | 1 | 1 | 1 |//| 1 | 1 | 1 | 1 |

    et je ne voudrai pas lacher avant d'avoir bien comprit
    car la, c'est un peut l'inverse quand meme
    dailleur le ET ne devait jamais etre vrai= move ne peut etre a la foit 1 ET 2 ET 3.

    je met quand meme resolu, la boucle fonctionne (du moin ca fait ce que j'en attend).

  17. #17
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pouquoi ca ne fonctionne pas si je met:
    continue tant que "mode" different de "1" =VRAI
    OU continue tant que "mode" different de "2" =VRAI
    OU continue tant que "mode" different de "3" =VRAI
    Parce que mode sera toujours différent de 1 ou différent de 2 ou différent de 3, ça n'a aucun sens d'écrire ça. S'il vaut 1 il sera différent de 2, s'il vaut 2 il sera différent de 1, etc. Donc il y aura toujours au moins deux des trois conditions qui seront vraies, et le test sera par conséquent toujours vrai.

  18. #18
    S2S
    S2S est déconnecté
    Membre averti Avatar de S2S
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2006
    Messages : 336
    Points : 403
    Points
    403
    Par défaut
    Merci 'Laurent Gomila', tu la dit dans le bonne ordre pour que mon cerveau comprene a la premiere lecture.

    donc c'est vraiment [RESOLU]
    merci @++

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

Discussions similaires

  1. boucles while/for : syntaxe incompréhensible
    Par Loceka dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 14/12/2006, 21h04
  2. probleme de syntaxe et boucle while
    Par ben23 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 13/01/2006, 18h04
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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