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 :

Blocage sur un exercice du livre de Bjarne Stroustrup


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Blocage sur un exercice du livre de Bjarne Stroustrup
    Bonjour à toutes et tous .

    Le but de l'exercice :
    Réaliser un programme qui trouve un nombre pensé entre 1 à 100 en sept questions :
    Question du programme :
    (Le nombre auquel vous pensez est inférieur à 50.)

    Je suis complétement perdu ..

    D'avance merci .
    Cordialement.

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    C'est un exercice pour vous faire comprendre le principe de la dichotomie

    Exemple pour trouver 6 (entre 1 et 10).

    Est-ce que le nombre est inférieure à 5 ? Non
    Est-ce que le nombre est inférieure à 7 ? Oui
    Est-ce que le nombre est inférieure à 6 ? Non

    Le nombre est 6.

  3. #3
    Membre éclairé Avatar de aslo92
    Homme Profil pro
    Ingénieur développement logiciels temps réel
    Inscrit en
    Février 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels temps réel
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 43
    Par défaut
    Trademark a raison, c'est le principe de la dichotomie qu'il faut utiliser: à chaque étape, on coupe en deux parties (pas forcément égales) un espace de recherche qui devient restreint à l'une de ces deux parties.

    Le nombre maximal M de questions à poser afin d'obtenir la réponse est la valeur du premier exposant entier de 2 supérieur ou égal au nombre N de réponses possibles, ou encore M est le premier entier supérieur ou égal au logarithme en base 2 de N.

    le premier exposant de 2 supérieur à 100 est 128, soit 2^7, il faut donc un maximum M = 7 essais

    ainsi si une personne choisi le nombre 46, les questions seront:

    - est-ce que le nombre est supérieur à 50 ?
    réponse = non
    - est-ce que le nombre est supérieur à 25 ?
    réponse = oui
    - est-ce que le nombre est supérieur à 37 ?
    réponse = oui
    - est-ce que le nombre est supérieur à 43 ?
    réponse = oui
    - est-ce que le nombre est supérieur à 47 ?
    réponse = non
    - est-ce que le nombre est supérieur à 45 ?
    réponse = oui
    - est-ce que le nombre est 46 ?
    réponse = oui

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Blocage exercice livre Bjarne Stroustrup
    Bonjour à toutes et tous .

    @aslo92 , Trademark , Merci pour vos réponses .

    C'était bien ce que je pensais avoir compris .

    J'essaye d'écrire le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include "std_lib_facilities.h"
     
    int main()
    {
        int debut = 0,fin = 100 ;
     
        int mil = (debut+(fin-debut)/2);
        cout << "Le nombre auquel vous pensez est inférieur à " << mil << "?";
        cin >> mil;
        vector <int> tb (0,100) ;
        int t ;
        while (cin>>mil)
        mil.push_back(tb);
    }
    C'est un début , qui ne fonctionne pas .
    Sauriez-vous m'indiquer mes erreurs ..

    Merci .
    Cordialement.

  5. #5
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Pourquoi utiliser un vector pour récupérer des données de l'utilisateur et... ne rien en faire ?

    L'exercice consiste à afficher la valeur pensée ((borne sup + borne inf) / 2) et demander à l'utilisateur s'il est inférieur ou non, puis changer la borne correspondante.
    Rien de tout cela n'apparait dans ton code.


    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
    int main()
    {
     int inf = 0, sup = 100;
     int iTry = 0;
     char yes_no;
     bool ok = false;
     do {
        // afficher les questions ici, et gérer les réponses
        std::cin>>yes_no;
        ++iTry;
        if (yes_no == 'y')
            ok = true;
     } while (!ok && iTry < 7);
     return 0;
    }
    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.

  6. #6
    Membre éclairé Avatar de aslo92
    Homme Profil pro
    Ingénieur développement logiciels temps réel
    Inscrit en
    Février 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels temps réel
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 43
    Par défaut
    voici le code qui fait ce que tu veux.
    Dans le tien il manque une boucle.

    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
     
    #include <cstdlib>
    #include <iostream>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
        int  debut = 0;
        int  fin   = 100 ;
        int  ok    = 0;
     
        do
        {
            int mil = (debut + (fin - debut) / 2);
     
            std::cout << "Le nombre auquel vous pensez est-il inférieur à " << mil << " ?";
     
            char yes_no;
            std::cin >> yes_no;
     
            if (yes_no == 'y')
               fin = mil;
            else
               debut = mil;
     
            if (debut == fin - 1)
            {
               ok = 1;
               if (yes_no == 'y')
                   std::cout << "Le nombre auquel vous pensez est " << debut << endl;
               else
                   std::cout << "Le nombre auquel vous pensez est " << fin << endl;
            }
        }
        while (ok == 0);
     
        system("PAUSE");
        return EXIT_SUCCESS;
    }

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 182
    Par défaut Blocage exercice livre Bjarne Stroustrup
    Bonjour à toutes et tous .

    @Trademake , merci pour ton aide .

    Donc si je t'écoute , il devrais fonctionner avec un string . Je vais trouver .

    @JolyLoic ,Pour ce qui est de l'écriture de mon code en brouillon sur un papier ....3 blocs rempli .... Et pour le reste , je suis un peu dyslexique ...

    Cordialement.

  8. #8
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Ce n'est pas le fait que ce soit un std::string ou non qui fait que le code marche ou pas.
    C'est ton utilisation du string qui ne doit pas être correcte.

    Cf le code de trademark plus haut qui devrait parfaitement fonctionner.
    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.

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

Discussions similaires

  1. besoin d'une correction sur un exercice.
    Par phakso dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 03/03/2006, 10h01
  2. [10g1][OCI][C++][IIS] Blocage sur un update
    Par Herode dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 21/02/2006, 09h32
  3. [c++] second problème avec exercices du livre Big c++
    Par TERRIBLE dans le forum Contribuez
    Réponses: 6
    Dernier message: 06/11/2005, 21h07
  4. Réponses: 4
    Dernier message: 25/10/2005, 23h40

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