Partage
  • Partager sur Facebook
  • Partager sur Twitter

Génération de nombre aléatoire pas si aléatoire ...

    5 novembre 2006 à 17:36:53

    Bonjour à tous,

    J'aimerais vous soumettre un petit programme: Il s'agit d'un jeu très simple que le Sdz traite dans ses cours de C. Cependant, je le fais en ce moment en C++, et là c'est la misère avec la génération d'un nombre aléatoire compris entre 1 et n (Où n est une borne supérieure)...
    En effet, il me génére une suite qui est toujours la meme quand je démare mon programme (1 puis 11 puis 4 quand je met ne orne à 20 par exemple), et la génération n'est donc pas vraiment aléatoire (Bien qu'il n'existe pas d'aléatoire en informatique).
    Enfin, trève de bavardage, je vous soumet le code source.



    /*******************************/
    /* Inclusion des bibliothèques                 */
    /*******************************/

    # include<stdlib.h>               //Bibliotheque comprenant la fonction
                                                            //pouvant générer un nombre aléatoire
    # include <iostream.h>

    #include <time.h>


    /*********************/
    /* Début du programme       */
    /*********************/

    int main ()
    {
            int   n,            //Borne supérieure
                    nbre,               //Nombre de la machine
                    i,                                    //Nombre de tentative(s) avant réussite
                    valeur;     //Valeur entrée par l'utilisateur




            cout << "Entrer la borne superieur : ";
            cin >> n;

            do
            {
                    nbre = 1 + (int)((float)rand()/(float)RAND_MAX*(n-1));
                    i = 0;

                    cout << "J'ai choisi un nombre entre 1 et " << n << ", a vous de le deviner." << endl;

                    do
                    {
                            i = i + 1;
                            cout << "Essai numero " << i << "(Entrer un nombre): ";
                            cin >> valeur;
                            cout << endl;

                            if (valeur > 0)
                            {
                                    if (nbre < valeur)
                                    {
                                            cout<<"Le nombre choisi est plus petit !"<<endl;
                                    }

                                    else
                                    {
                                            if (nbre > valeur)
                                            {
                                                    cout<<"Le nombre choisi est plus grand !"<<endl;
                                            }
                                            else
                                            {
                                                    cout<<"Vous avez gagne (score : "<<i<<" essais), le nombre choisi etait bien "<<valeur<<"."<<endl;
                                            }
                                    }
                            }

                    }
                    while (valeur != nbre && valeur > 0);
            }
            while (valeur > 0);

            cout<<"Plus envie de jouer ... A bientot."<<endl;
    }


    Voilà donc le code, j'espère que ca ira, et que quelqu'un pourra m'expliquer d'où vient le souci (Je doute que ce soit de mon pc tout de meme ^^ ) et éventuellement me proposer une solution par la même occasion ... ;)

    Merci d'avance

    Burin
    • Partager sur Facebook
    • Partager sur Twitter
      5 novembre 2006 à 17:42:12

      bonjour,
      d'où l'interet de :
      srand(time(NULL));

      TP plus ou moins
      qui va t'initialiser ton générateur "aléatoire" avec l'horloge.
      • Partager sur Facebook
      • Partager sur Twitter
        5 novembre 2006 à 17:51:18

        Merci, j'ai donc ajouter cette partie dans mon code. Mais il subsiste toujours un souci au niveau de la première génération qui est toujours égale à 8 lorsque ma borne supèrieure est à 20 (4 quand la borne est de 10, et cetera); Plus généralement, qui ne changera qu'en fonction de la borne supèrieure semble-t'il.

        Je suppose que c'est normal, mais c'est un peu dommage tout de même. :(

        Merci encore une fois pour le coup de main, je vais le retenir je pense maintenant. :D
        • Partager sur Facebook
        • Partager sur Twitter
          5 novembre 2006 à 17:55:32

          Salut :)
          Emmanuel Delahaye (ed) a écrit un petit (mais utile) article sur son site : rand(), srand()... j'y comprend rien...
          Avec ça, tu en sauras un peu plus sur la génération de nombres aléatoires en C.
          @+


          • Partager sur Facebook
          • Partager sur Twitter
            5 novembre 2006 à 17:56:56

            tu l'as placé où le srand ? il doit être avant ta boucle et pas dedans hein !
            je connais rien au C++ mais je pense que ça doit tourner la dessus non ?
            • Partager sur Facebook
            • Partager sur Twitter
              5 novembre 2006 à 18:00:47

              Citation : Traouspont

              tu l'as placé où le srand ? il doit être avant ta boucle et pas dedans hein !
              je connais rien au C++ mais je pense que ça doit tourner la dessus non ?



              Tout à fait, je l'ai placé avant, juste aprè avoir déclarer mes variables. ;)
              Mais en fait ca marche une fois sur deux, disons qu'il faut attendre probablement, quand je tape directement mon nombre c'est 8, et tout à l'heure j'ai eut 9 ... C'est bisard mais ca marche ! :D

              Merci beaucoup à tous, je regarde l'article proposé (Je comprendrais probablement beaucoup mieux les subtilités de la chose.
              • Partager sur Facebook
              • Partager sur Twitter

              Génération de nombre aléatoire pas si aléatoire ...

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown