Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb nombre aléatoire...

même valeurs dans une table

Sujet résolu
    18 juin 2006 à 0:29:11

    Salut à tous!

    Je suis face à un problème pour créer des nombres aléatoires dans une table à une dimension :
    si je fais :
    srand(time(NULL));

    c1j[0]=((rand() % (53 - 2 + 1)) + 2);
    c1j[1]=((rand() % (53 - 2 + 1)) + 2);
    c1j[2]=((rand() % (53 - 2 + 1)) + 2);
    c1j[3]=((rand() % (53 - 2 + 1)) + 2);
    c1j[4]=((rand() % (53 - 2 + 1)) + 2);

    alors toutes mes valeurs dans la table seront les mêmes.
    Comment cela se fait-il ?


    Merci par avance de votre aide!



    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2006 à 0:59:52

      Citation : r2d2juju

      alors toutes mes valeurs dans la table seront les mêmes.

      Comment cela se fait-il ?



      Ton code est incomplet. Il n'est pas testable. Je l'ai testé en le complétant et il fonctionne.

      19 42 2 6 19

      Press ENTER to continue.


      38 7 6 15 8

      Press ENTER to continue.

      J'en déduis que chez toi, il manque des choses. Montre ton code compilable.

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        18 juin 2006 à 10:11:52

        Rappel:

        srand() n'est à appeller qu'une seule fois en début de programme.
        • Partager sur Facebook
        • Partager sur Twitter
          18 juin 2006 à 13:02:08

          savez vous comment faire un nombre réel aléatoire ? moi je proposerais un truc genre :
          float aléatoire(int nbrChiffre/*nombre de chiffre significatif(apres la virgule*/;int nbrPuissance/*puissance maximale (de deux bien sur)*/)
          {
            int i;
            int entier=0;
            for(i=0;i<(nbrChiffre);i++)
            {
              entier<<1; // opération binaire : on rajoute un zéro ans le système binaire
              entier+=rand()%2;
            }
          // on a maintenant un entier. Il suffit de rajouter la virgule.
            float résultat=((float)(entier))*pow(2,nbrPuissance);
            return résultat;
          }

          êtes-vous d'accord ?
          • Partager sur Facebook
          • Partager sur Twitter
            19 juin 2006 à 11:16:07

            En fait, ce que je souhaite, c'est tirer 15 nombres au hasard en 2 et 54 mais aucun de ces nombres ne doivent être égaux.
            C'est pourquoi, je réalise ce code :


            int robert,i,j,tab[15];
             
            do
            {
                    robert=0;

             srand(time(NULL));

                for(i=0;i<15;i++)
                {
                    tab[i]=((rand() % (54 - 2 + 1)) + 2);

                }


                for(i=0;i<15;i++)
                {
                    for(j=0;j<15;j++)
                    {
                        if(i!=j)
                        {
                        if((tab[i]-tab[j])==0)
                        {robert=1;break;}
                        }

                    }

                        if(robert==1){break;}
                        }


            }while(robert==1);


            Le problème est que à chaque tour de boucle, le rand() donne les mêmes valeurs à chaque case de ma tab[15].
            J'ai l'impression que le rand ne change pas les valeurs à chaque tour de boucle mais seulement au bout d'un certain temps. Ce n'est qu'au bout de quelques secondes que le prog sort du do{}while();
            Et j'aimerais que ce temps soit plus court, en fait, il faudrait que vraiment à chaque boucle, le rand() donne des valeurs différentes (du moins si c'est possible).

            PS: est-ce que la position du srand(time(NULL)); peut changer quelquechose?

            Merci d'avance !
            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2006 à 11:39:05

              Citation : r2d2juju


              int robert,i,j,tab[15];
               
              do
              {
                      robert=0;

               srand(time(NULL));



              PS: est-ce que la position du srand(time(NULL)); peut changer quelquechose?


              Sacré nom d'une pipe ! On se tue à dire que srand() doit être appelé une seule fois au début du programme.Qu'est-ce qu'il fait dans une fonction et en plus dans une boucle ? Il va falloir arréter de fumer la moquette, de lire des mangas, d'écouter de la techno et se mettre au boulot sérieusement...

              http://www.siteduzero.com/forum-83-50533-406147.html#r406147
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                19 juin 2006 à 11:41:02

                Je jubile de voir les tournures des répliques d'-ed- :)
                Vas pas non plus te choper un infarctus à cause de ces sauvageons du code ! ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  19 juin 2006 à 11:43:44

                  :-° oups..... merci beaucoup!
                  • Partager sur Facebook
                  • Partager sur Twitter
                    19 juin 2006 à 11:46:39

                    Citation : Kayl

                    Je jubile de voir les tournures des répliques d'-ed- :)
                    Vas pas non plus te choper un infarctus à cause de ces sauvageons du code ! ;)


                    Image utilisateur
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      19 juin 2006 à 12:12:18

                      loooooool je suis mdr devant mon pc (et oui les pc omniprésents)

                      Citation : -ed-

                      Citation : Kayl


                      Je jubile de voir les tournures des répliques d'-ed- :)
                      Vas pas non plus te choper un infarctus à cause de ces sauvageons du code ! ;)


                      Image utilisateur

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Pb nombre 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