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

Langage C++ Discussion :

problème avec un while


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut problème avec un while
    un joueur doit entrer un mot. Si il est trop grand (+ de 8 lettres par exemple), il doit en entrer un autre jusqu'à ce qu'il entre un mot de 8 lettres ou moins.

    Pourriez-vous me dire ce qui ne va pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	while (taille > 8)
                		{ 
                         cout << " Votre mot comporte " << taille <<" lettres. Veuillez entrer un mot de MAXIMUM huit lettres" << endl;
                         cin >> motSecret;
                        break;
                                   }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Je vais te la faire soft parce que ton code "envoie du rêve" ... ou pas

    • Crois-tu que ta variable taille se met automatiquement à jour lorsqu'on saisi le mot? Il ne te semble pas qu'il manque un truc?
    • Un break non protégé par un test à la fin de ta boucle: que va-t-il se passer? A) Quitter B) Quitter C) Quitter D) la réponse D

  3. #3
    Invité
    Invité(e)
    Par défaut
    j'aurai peut-être du mettre la partie du dessus

    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
    while (jouer)
                	{
                		cout <<"entrer un mot de 8 lettres"<<endl;
                		cin >> motSecret;
                		std::string s=motSecret;
                int taille=s.size();
     
                string motATrouver(motSecret.size(), '*'); // pour avoir autant d'étoiles que de caractères
     
                		while (taille > 8)
                		{ 
                         cout << " Votre mot comporte " << taille <<" lettres. Veuillez entrer un mot de MAXIMUM huit lettres" << endl;
                         cin >> motSecret;
                        break;
                                   }

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    C'est encore pire

    Le mot à trouver sera constitué que d’étoiles: il va être dur à trouver

    Je pense qu'il faut mieux expliquer avec des mots en français ce que tu comptes coder

  5. #5
    Invité
    Invité(e)
    Par défaut
    lol je débute

    en fait c'est un jeu du pendu. Et je voudrai que ce soit le joueur qui entre lui-même le mot qu'il va devoir trouver. Ce mot doit avoir au maximum 8 lettres. Aussi longtemps que le mot est plus long, le joueur doit entrer un mot plus court.

    Je me doute bien que mon code doit pas être génial mais bon ça fait qu'une bonne semaine que je fais de la programmation ^^. Là le code fonctionne quand j'entre une première fois un mot plus long que 8 lettres, mais quand j'entre une seconde fois un mots de plus de 8 lettres, il accepte ce mot là, et il me demande de saisir une lettre...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    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 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Débutant ou pas en C++, ton problème n'est pas un problème de C++ mais avant tout de logique et algorithmique.
    Commence par décrire dans ta tête ce que tu veux faire, puis traduis-le.
    Je t'ai fait un code de pendu en 5mn tout à fait acceptable sur ton autre sujet.

    Si tu ne sais pas dire/comprendre/remarquer que tu veux
    - entrer un mot
    - vérifier sa taille
    - si taille < 8, retourner au 1° tiret
    tu risques pas de savoir l'écrire en C++.
    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
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Citation Envoyé par julieen03 Voir le message
    en fait c'est un jeu du pendu. Et je voudrai que ce soit le joueur qui entre lui-même le mot qu'il va devoir trouver. Ce mot doit avoir au maximum 8 lettres. Aussi longtemps que le mot est plus long, le joueur doit entrer un mot plus court.
    Même ton explication est bizarre : parce que si on demande à un utilisateur de saisir un mot un moment ou un autre il faudra le comparer avec de nouvelles saisies pour déterminer s'il l'a trouvé

  8. #8
    Invité
    Invité(e)
    Par défaut
    Pourriez-vous me dire ce que vous pensez de mon algotithme?
    Nom : 1.JPG
Affichages : 188
Taille : 63,3 Ko
    Nom : 2.JPG
Affichages : 158
Taille : 33,5 Ko
    Je vous le propose également comme ceci mais il y a à chaque fois un retour à gauche ...
    Variable motSecret, pseudo, reponse, jouer, lettreSaisie, nombreEssais, i

    Début

    nombreEssais <- 8
    Afficher (« bienvenue dans le jeu du pendu »)
    Afficher (« entrer votre pseudo »), lire (pseudo)
    Afficher (« bienvenue ») pseudo
    Afficher règlement

    Debut

    Afficher (« donnez un mot de 8 lettres »), lire (motSecret)
    i<– 1 ‘on compte le nombre de lettre du mot
    TANTQUE (motSecret> 8) Faire i<–1 FTQ
    nbtrouve<– i -1;


    Debut

    Var points, lettreSaisie, lettredejatappée ;

    Tant que nombreEssais >0

    Afficher « veuillez saisir une lettre », lire lettre
    Si letttreSaisie = motATrouver[i] lettredejatappée
    Afficher « vous avez déjà fait apparaitre cette lettre »
    nombreEssais++


    Sinon

    Debut

    Si lettreSaisie=motSecret[i]
    lettreSaisie=motSecret[i]
    Afficher « la lettre est bien dans le mot »
    Sinon
    Si motATrouver=motSecret
    Afficher « vous avez trouvé le mot »
    Fsi

    Sinon

    Si lettre pas dans le mot
    nombreEssais—
    Si nombreEssais=0
    Afficher perdu

    Sinon raté

    Fin

  9. #9
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Utilise la balise [ CODE ] pour éviter les retours à gauche.

    Sinon, quelques points qui sont incompréhensible pour le pauvre ordinateur stupide que je suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TANTQUE (motSecret> 8)
    motSecret, c’est un mot, une chaîne de caractère, et 8, un entier. Je ne sais pas les comparer entre eux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Si letttreSaisie = motATrouver[i] lettredejatappée
    C’est quoi motATrouver ? J’ai l’impression que c’est vaguement la liste de ce que l’utilisateur a déjà rentré, mais là, mon compilateur commence à avoir du mal à suivre où tu veux en venir.

    Donc, plusieurs remarques :
    * nomme tes variables mieux que ça. motSecret me semble approprié, motATrouver ne m’a pas l’air de correspondre à ce qu’il dit être
    * décompose le problème en fonctions unitaires, plutôt que tout dérouler d’un coup. Je t’aide un peu, je te donne un exemple de découpage :
    * lire le mot secret. Ça, c’est un truc qu’on fait au début, qui mérite un traitement à part entière
    * tester si une lettre a déjà été saisie
    * tester si une lettre appartient au mot secret
    * afficher le mot secret (en tenant compte des lettres déjà trouvées)
    * stocker le fait qu’une lettre a été saisie

    Déjà, essaie de réaliser l’algorithme avec ces fonctions « de base ». Ensuite, tu verras comment réaliser chacune d’entre elles. Le problème devrait être beaucoup plus simple ainsi.

  10. #10
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 186
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 186
    Points : 17 126
    Points
    17 126
    Par défaut
    Je l'aurais plus écrit comme un ensemble de petite choses à faire.

    Je le présenterai ainsi

    algorithme =
    accueil()
    tant que (choix = menu()) est différent de quitter le jeu
    selon menu():
        si nouvelle partie faire une partie
        si scores afficher les scores
    fin tant que
    
    avec accueil() = 
    afficher splash
    afficher règles du jeu
    
    
    avec menu() =
    ...
    
    avec faire une partie =
    choisir mot secret()
    mot affiché = autant de '_' que de lettres dans le mot secret
    nombreEssais = 8
    tant que nombreEssais > 0 et mot non completement révélé
        Afficher « veuillez saisir une lettre »
        lire lettre non déjà jouée()
        --nombre d'essai (et pas ++)
        si mot secret ne contient pas lettre
            compter echec
        sinon
            remplacer les _ cachant la lettre lettre par lettre
        finsi
        fin tant que
    fin tant que
    si nombre essais = 0
        afficher "perdu, le mot était" mot secret
    sinon
        afficher "bravo, il vous à fallu" (8-nombre essais) "tentatives"
    fin si
    
    avec choisir mot secret() =
    afficher "quel est le mot secret?"
    mot secret = lire un mot()
    tant que la taille du mot secret n'est pas suffisante
        afficher "le mot secret doit faire au moins " taille minimale "lettres"
        mot secret = lire un mot()
    fin tant que
    effacer écran
    afficher "merci"
    
    avec lire lettre non déjà jouée() =
    ...
    
    Ca, c'est une présentation algorithmique.
    On y retrouve quand même quelques notions très importantes:
    • nommer les choses.
    • garder les choses simples.
    • grouper les actions homogènes ensembles, et déléguer chaque fois que ca casse le rithme de lecture
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 627
    Points : 10 551
    Points
    10 551
    Par défaut
    Il y a pleins de petites choses que ne sont pas terribles.

    Donc le but de l'algo c'est de trouver le mot secret, saisi en premier (cela semble logique), lettre par lettre

    Les petites choses:
    1. Les boucles for ne sont pas affichées dans ton algo: c'est plus difficile à comprendre.
    2. Au vu de l'algo, le mot secret a au plus 8 lettres. Alors tout semble faire croître qu'il faut que le mot secret est exactement 8 lettres.
    3. Il y a un compteur du nombre de tentatives ... qui par défaut c'est le nombre de lettres dans le mot secret (donc 8). C'est un peu limite. Mais comme une lettre peut apparaître plusieurs fois, cela rajoute un peu de tentatives.
    4. On a une variable "chaîne de caractères" lettreSaisie qui permet de savoir si on a trouvé une lettre ou pas. On soupçonne qu'elle initialisée avec des espaces et au fur et à mesure on rajoute au bonne place les lettres trouvées. Le truc c'est la comparaison entre lettreSaisie et motSecret pour l'arrêt de l'algo. Un compteur de lettres trouvées ou à trouver serait mieux.
    5. La variable lettrededejatappée (<- SIC) n'est jamais utilisée (<- RE-SIC)

Discussions similaires

  1. [FPDF] Problème avec un while dans un tableau
    Par nigg4z dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 11/10/2007, 16h13
  2. [MySQL] Problème avec un "while"
    Par fantasygirl dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/08/2007, 03h09
  3. Réponses: 2
    Dernier message: 17/10/2005, 23h16
  4. Problème avec Do while rs.EOF
    Par lauraned dans le forum ASP
    Réponses: 12
    Dernier message: 21/05/2004, 13h00

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