Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment tirer un nombre aleatoire sans qu'il sa repete

    19 février 2006 à 12:27:36

    bonjour

    comment faire pour tirer un nombre aleatoire qui ne soit pas deja sortit

    exemple :
    char nombre1 = 0, nombre2 = 0, nombre3 = 0;
    const char min = 1, max = 3;
    nombre1 = (rand () % (MAX - MIN + 1)) + MIN;
    nombre2 = (rand () % (MAX - MIN + 1)) + MIN != nombre1;
    nombre3 = (rand () % (MAX - MIN + 1)) + MIN != nombre1 && != nombre2;

    je sais que mon code est faux

    j'avais essayé ca mais c'est un code qui est tres lourd :


    nombre1 = (rand() % (MAX - MIN + 1)) + MIN;
        do
        {
        nombre2 = (rand() % (MAX - MIN + 1)) + MIN;
        }while (nombre1 == nombre2);
       
        do
        {
        nombre3 = (rand() % (MAX - MIN + 1)) + MIN;
        }while (nombre3 == nombre1 || nombre3 == nombre2);
       
        do
        {
        nombre4 = (rand() % (MAX - MIN + 1)) + MIN;
        }while (nombre4 == nombre1 || nombre4 == nombre2 || nombre4 == nombre3);
       
        do
        {
        nombre5 = (rand() % (MAX - MIN + 1)) + MIN;
        }while (nombre5 == nombre1 || nombre5 == nombre2 || nombre5 == nombre3 || nombre5 == nombre4);

    le probleme c'est qu'il faut le faire plein de fois et a chaque fois la boucle est plus grosse

    qui sait comment faire pour fair cela plus simplement

    merci
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      19 février 2006 à 12:31:02

      ce que tu peux faire c'est déclarer un tableau dans lequel sont nombre1, nombre2 ....
      et tu demande a ce que le nombre soit re-tirer s'il existe deja dans le tableau
      • Partager sur Facebook
      • Partager sur Twitter
        19 février 2006 à 13:23:30

        Hello,
        Il y a un tuto sur le site du zero à cette adresse http://www.siteduzero.com/tuto-3-2426-1-les-nombres-aleatoires-en-c-c.html
        bonne lecture
        ++
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          19 février 2006 à 13:27:56

          Tu peux aussi créer une fonction qui génère un nombre aléatoire...

          Duarna
          • Partager sur Facebook
          • Partager sur Twitter
            19 février 2006 à 14:32:41

            j'ai reussit en faisant un tableau

            merci a tous

            j'ai un probleme avec mon programme

            il marche jusqu'a 15 nombre aleatoires mais a 16 il y a une genre de surcharge de processeur

            #include <stdio.h>
            #include <stdlib.h>

            int main(int argc, char *argv[])
            {
                srand (time (NULL));
                char nombre[16] = {0};
                char i = 0, i2 = 0, aleatoire = 0, aleatoire2 = 0, securite = 0, maximum = 0;
                const char MIN = 1, MAX = 16;
                maximum = MAX - 1;
                while (aleatoire == 0)
                {
                      i = 0;
                      i2 = 0;
                      aleatoire2 = 0;
                      securite = 0;
                      while (i != maximum + 1)
                      {
                            nombre[i] = (rand () % (MAX - MIN + 1)) + MIN;
                            i++;
                            }
                      i = 0;
                      while (aleatoire2 == 0)
                      {
                            if (nombre[i] == nombre[i2])
                            {
                                          if (i == i2)
                                          {
                                               
                                             }
                                          else
                                          {
                                              aleatoire2 = 1;
                                              }
                                          }
                            if (i2 == maximum && i != maximum)
                            {
                                   i++;
                                   if (i == maximum)
                                   {
                                         securite = 1;
                                      }
                               }
                            if (i2 == maximum)
                            {
                                   i2 = -1;
                               }
                            if (i2 < maximum)
                            {
                                   i2++;
                               }
                            if (i == maximum && i2 == maximum)
                            {
                                  securite = 0;
                               }
                            if (i == maximum && i2 == maximum && aleatoire2 == 0 && securite == 0)
                            {
                                  aleatoire = 1;
                                  aleatoire2 = 1;
                               }
                            }
                      }
                      i = 0;
                while (i != maximum + 1)
                {
                printf("Nombre%ld : %ld\n", i + 1, nombre[i]);
                i++;
                }
                system("PAUSE");
              return 0;
            }


            qui sait d'ou sa vient

            pour mettre plus ou moins de nombre changez le nombre du tableau et celui de la variable MAX

            merci

            • Partager sur Facebook
            • Partager sur Twitter
              19 février 2006 à 16:21:12

              Il me semble que c'est bien compliqué pour pas grand chose pourtant... Une simple boucle aurait suffit...

              do {
              carte1 = (int) (min + ((float) rand() / RAND_MAX * (nombre_cartes - min + 1)));
              carte2 = (int) (min + ((float) rand() / RAND_MAX * (nombre_cartes - min + 1)));
              carte3 = (int) (min + ((float) rand() / RAND_MAX * (nombre_cartes - min + 1)));
              carte4 = (int) (min + ((float) rand() / RAND_MAX * (nombre_cartes - min + 1)));
              carte5 = (int) (min + ((float) rand() / RAND_MAX * (nombre_cartes - min + 1)));
              } while(carte1==carte2 || // Recommencer tant que les valeurs
                      carte1==carte3 || // ne sont pas uniques.
                      carte1==carte4 ||
                      carte1==carte5 ||
                      carte2==carte3 ||
                      carte2==carte4 ||
                      carte2==carte5 ||
                      carte3==carte4 ||
                      carte3==carte5 ||
                      carte4==carte5);


              (C'est pour coder un jeu de pocker là, à prendre à titre d'exemple...)

              Après je dois me tromper parce que ça me semble pas trop dur si ?

              ++
              • Partager sur Facebook
              • Partager sur Twitter

              Comment tirer un nombre aleatoire sans qu'il sa repete

              × 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