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 avec srand


Sujet :

C++

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Par défaut Problème avec srand
    Bonjour,

    Je bloque complètement sur un exercice de "Programmation, principes et pratique avec c++" de Stroustrup, il est question de mettre au point un Mastermind, (ça j'y suis arrivé), puis de faire en sorte de générer les chiffres a deviner aléatoirement à partir d'une graine (srand) demandée à l'utilisateur. Voilà le 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
    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
    53
    54
    55
     
    #include "../std_lib_facilities.h"
     
     
    int main()
    {
        srand(3);
        int seed = 0;
        while (cout << "Entre un chiffre" )
        {
        vector<int>nombres(4);
        nombres[0] = randint(10);
        nombres[1] = randint(10);
        nombres[2] = randint(10);
        nombres[3] = randint(10);
     
        int rouge = 0;
        int blanc = 0;
        int r1 = 0;
        int r2 = 0;
        int r3 = 0;
        int r4 = 0;
     
     
        while (cin>>r1>>r2>>r3>>r4)
        {
            vector<int>reponse;
            reponse.push_back(r1);
            reponse.push_back(r2);
            reponse.push_back(r3);
            reponse.push_back(r4);
            for (int i = 0; i < 4; ++i)
            {
                if (reponse[i] == ordi[i]) ++rouge;
                else
                for (int x = 0; x < 4; ++x)
                    if (reponse [i] == ordi[x]) ++blanc;
            }
            if (rouge == 4){
                cout << "Bravo ! Try Again !\n";
                cout << "Entrez un chiffre ";
                cin >> seed;
                srand(seed);
            }
            else
                cout << "rouges : " << rouge << " blancs : " << blanc << endl;
     
            rouge = 0;
            blanc = 0;
     
        }
        }
     
        return 0;
    }

    Le problème c'est que le programme génère tout le temps les même chiffres au démarrage avec srand ou pas, et sans surprise après une victoire les chiffres ne changent toujours pas. Il doit y avoir une subtilité qui m’échappe.

    Si quelqu'un peut m'éclairer, merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 455
    Par défaut
    randint ???

  3. #3
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    srand(3);
    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.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Par défaut
    srand(3) c'était pour voir si ça changeait quelque chose si je passais pas par cin, mais avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cin>>seed;
    srand(seed);
    il se passe la même chose.

    Pour randint, voilà sa définition dans std_lib_facilities.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    inline int randint(int min, int max) { static default_random_engine ran; return uniform_int_distribution<>{min, max}(ran); }
     
    inline int randint(int max) { return randint(0, max); }

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 755
    Par défaut
    srand et une fonction C pour initialisé la graine de la fonction rand. Si tu utilises <random>, oublie srand et initialise la graine de l'engine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    static std::default_random_engine ran(
      static_cast<std::default_random_engine::result_type>(
        std::chrono::high_resolution_clock::now().time_since_epoch().count()
      )
    );

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 3
    Par défaut
    Ok, merci beaucoup, j'ai finalement utilisé rand() au lieu de randint() du coup, c'était donc dans le livre que se situait l'erreur.

Discussions similaires

  1. Problème avec srand() et rand()
    Par rouliane dans le forum C++
    Réponses: 10
    Dernier message: 16/12/2007, 19h35
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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