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

Boost C++ Discussion :

[débutant]Simuler un dés avec boost


Sujet :

Boost C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut [débutant]Simuler un dés avec boost
    Bonjour,

    je désire simuler un dés (avec un nombre de face variable) avec la fonction boost. L'idée c'est de rentrer un intervalle compris entre 1 et <le nombre de face du dés> à la fonction et qu'elle me retourne un nombre aléatoire dans cette interval, à chaque appel.

    En gros ceci :

    Citation Envoyé par M.Brucher
    II-A. Les distributions entières uniformes
    Ces distributions retournent un entier - par défaut de type int - dans un intervale connu. uniform_smallint<> prend en outre comme hypothèse que l'intervale dans lequel le nombre sera tiré est petit devant l'intervale dans lequel le générateur aléatoire tire une valeur. En revanche, uniform_int<> n'utilise pas cette hypothèse et tire donc correctement un entier. La petite différence n'est pas critique lorsque l'hypothèse est vérifiée - c'est la différence entre utiliser rand() % 20 et rand() / 20.

    Les constructeurs prennent en argument la valeur minimale et la valeur maximale de l'intervale. A noter que uniform_int<> peut être appelée par operator() pour générer un nombre dans l'intervalle [0; n].

    Les en-têtes correspondants sont boost/random/uniform_smallint.hpp et boost/random/uniform_int.hpp.
    Cependant dans son article ( http://matthieu-brucher.developpez.c.../boost/random/ ), M.Brucher ne donne pas d'exemple de comment obtenir ce genre de résultat.

    La seule indication qu'on ai c'est :
    Les distributions les plus courantes sont proposées par Boost.Random. Pour générer un nombre aléatoire selon une certaine distribution, il faut avoir au préalable un générateur de nombres aléatoires uniforme, et l'appel se fera sous cette forme :


    distribution(generateur);
    Les generateurs sont listé dans le toturial, mais j'avou ne pas comprendre grand chose quand à leur utilisation.

    Malgrés la doc en anglais, les tuto disponible, je n'arrive pas a saisir comment cette biblio fonctionne.

    Si quelqu'un pourrait éclairer ma lenterne :p

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Premier exemple dans la doc de Boost.Random
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      boost::mt19937 rng;                 // produces randomness out of thin air
                                          // see pseudo-random number generators
      boost::uniform_int<> six(1,6)       // distribution that maps to 1..6
                                          // see random number distributions
      boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
               die(rng, six);             // glues randomness with mapping
      int x = die();
    tu fais varier 1,6 pour que ce soit l'intervalle qui t'intéresse.
    (À noter que tu préféreras initialiser rng avec une graine)
    Boost ftw

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    Voila mon main.cpp

    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
     
    #include <iostream>
    #include <fstream>
    #include <ctime>            // std::time
     
    #include <boost/random.hpp>
    namespace std {
      using ::time;
    }
    int main ()
    {
     
            boost::mt19937 rng;                                       // produces randomness out of thin air
                                                                        // see pseudo-random number generators
        boost::uniform_int<> six(1,6)                                  // distribution that maps to 1..6
                                                                        // see random number distributions
        boost::variate_generator<boost::mt19937&, boost::uniform_int<> >
               die(rng, six);                                          // glues randomness with mapping
      int x = die();
    return 0;
    }
    Voila la réponse du compilateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    /home/neocid/Documents/Sources/CPP/boost/main.cpp:17: erreur: expected «,» or «;» before «boost»
    /home/neocid/Documents/Sources/CPP/boost/main.cpp:19: erreur: «die» was not declared in this scope
    /home/neocid/Documents/Sources/CPP/boost/main.cpp:19: attention : unused variable «x»
    Je suis désolé mais j'ai beau retourner leur random_demo.cpp dans tous les sens j'y comprend rien ((

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Il manque un ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::uniform_int<> six(1,6);

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 51
    Points : 33
    Points
    33
    Par défaut
    youps j'ai honte

    merki :p

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

Discussions similaires

  1. Threads avec boost : débutant
    Par tortue3600 dans le forum Boost
    Réponses: 8
    Dernier message: 11/09/2008, 08h44
  2. [Débutant] Jframe/JInternalFrame: prb avec JScrollPane
    Par flzox dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/12/2004, 00h08
  3. [Débutant] Faire un exit avec &
    Par thybo dans le forum C++
    Réponses: 7
    Dernier message: 23/11/2004, 20h33
  4. [Débutant] SWT: composant Texte avec \n
    Par bonnefr dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 18/05/2004, 11h44
  5. [débutant] choix de postgre avec php / migration
    Par bilbon.S dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/03/2004, 14h05

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