Random?????

Slt a tous ^^
Apres mon pb de tempo ki a finalement etait resolu grace o personne sur ce forum que je remercie.
Mais g un nouveau petit soucie ,je n'arrive pas a utiliser le random
sur vc++ pour creer un nb aleatoir de 1 a 5 si c possible
Merci d'avance

24 réponses

Résumé de la discussion

Le problème abordé consiste à générer un nombre aléatoire compris entre 1 et 5 en C/C++ en utilisant rand() et srand(), et à comprendre comment placer correctement l'intervalle et la semence. Plusieurs conseils évoquent l'initialisation de la semence avec srand((unsigned) time(NULL)) et l'utilisation d'une opération modulo ou d'une formule équivalente pour obtenir l'intervalle souhaité, tout en évitant les biais éventuels. Des échanges mentionnent RAND_MAX comme constante définie par l'implémentation et discutent de l'uniformité des tirages, certains proposant des alternatives comme 1 + (int)(10.0 * rand() / (RAND_MAX + 1.0)) pour limiter les biais.

Bobot (l’IA à votre service)
  1. Ah ouais... c'est pas bête, j'y avais pas pensé!!
    merci de ton tuyau!
    1. Je me r'explique mieux:

      Comment fait on pour avoir un choix aléatoire entre plusieurs lettre et plusieurs chiffres ou encore d'autre truc:

      par exemple on pourrai demander à l'ordi de choisir entre a, d et 2...
      1. Salut, je te propose l'algo suivant :

        1) tu te crées un vecteur qui contient tous tes caractères (il est de taille N)
        2) tu tire un nb aléatoire p suivant la loi uniforme sur [0, 1]
        3) tu fais des test :

        si 0<= p< 1/N alors tu tires la 1e composante de ton vecteur
        si 1/N <= p < 2/N alors tu tires la 2e composante de ton vecteur
        et ainsi de suite
    2. Juste une question: comment on fait si on veut faire un choix aléatoire entre plusieurs truc différent ( par exemple entre a,
      b
      ,
      k
      , 6 et
      2
      ????!!!
      1. dans l'aide de Linux, il dise de faire plutot
        j=1+(int) (10.0*rand()/(RAND_MAX+1.0));

        que j=1+(rand() % 10);

        parce que la premiere ligne c'est "plus aleatoire " que l'autre! C'est une histoire de bit de poid faible... bref des truc que je comprend pas!
        1. Je garde ton code Canard007. Je vais surement m'en servir un jour ou l'autre. Mais concernant la constante RAND_MAX (je suis sur qu'il existe une constante qui porte ce nom la), je crois qu'elle doit servir à tirer des nb aléatoires entre 0 et RAND_MAX. Je crois (je me rappelle l'avoir utilisée dans un TP) que c'est une constante déjà définie par le compilateur.

          Et savez-vous si le tirage des nb aléatoires est uniformément répartis (entre 0 et 5 par exemple) ?

          pom
          1. quand tu initialise comme j'ai di plus hau normalement oui
        2. ^^merci grace a toi je connai les instruction rand et tempo ce ke je n arrivai pa a utilisai maintenant je pe realiser presque n'importe quel programme je crois et au autre bien sur.
          1. Contributeur
            srand () permet d initialiser la fonction rand... il fo lui passer un entier non signé..
            Time(NULL) te renvoie la date machine comme elle bouche tout le temps
            rand()+1 pour avoir un resultat superieur a 0 et enfin %marge c est comme un modulo grosso modo tu lui donne la taille max du nombre..
            1. Je sais qu'il marche mais ce q je ve savoir c la signification ou le commentaire de la ligne srand((unsigned) time (NULL)) et la ligne chiffre = (rand()+1) % Marge car je ne les comprend pas
              merci d'avance ^^
              1. Contributeur
                regarde mon code ca roule ca marche il est bon mon code qui n en veut?
                1. canard007 effectivement t trop fort :)
                  est ce q tu pe m'expliquer les lignes chiffre et srand stp
                  merci d'avance
                  1. Contributeur
                    bon ba finallement je l aurai fait..j suis trop bon...

                    ca marche ca ca te donne un nombre aleatoir compris entre 1 et 5
                    t a juste a le modifier pour en faire une fonction...

                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <time.h>
                    
                    void main(  )
                    {
                    
                    	int Chiffre;
                    	int Marge=5;
                             
                    	srand ((unsigned) time (NULL));
                    	Chiffre = (rand()+1) % Marge;
                    	printf("%d\n",Chiffre);
                    	
                    
                    } 
                    
                    
                    
                    1. Je n'ai pas beaucoupe fais de c++, mais comme canard dit: il faut prendre un nombre basé sur les secondes.
                      En fait presque tous les autres langages prennent un nombre basé sur le temps automatiquement, mais on ne le vois pas.
                      1. srand(time(NULL));
                        c'est bien pour initialiser il fo ^pas oublier #include"time.h"
                        1. Contributeur
                          fo pas virer srand(nombre) car si tu fait juste rand() tu aura toujours le meme nombre au debut...
                          l ideal c est de prendre un chiffre qui bouge style le nombre de secondes pour faire le randInit.
                          Si tu regarde bien les nombres tu te rendra compte qu'il n y a rien d aleatoir tu aura toujours les meme nombre pour le meme randinit..
                          Donc le mieux a faire c est de recuperer par exemple la date system en seconde (par exemple) et dire randinit= cette date...
                          ensuite tu prend toujours le n éme chiffre generé (tu peux augmenter l aleatoire en choissisant en fonstion des secondes par exemple) ...
                          donc tu aura ensuite un nombre compris entre 0 et 64000 (apparement) don ya plus qu a faire une conversion pour les faire passer entre 1 et 5 la c est des maths ^^

                          ..cependant je vais vois sur le net s'il n'y a pas plus simple...
                          1. o fait pour const maxrand=5 je pe remplacer 5 par n'importe quel chiffre ca ne change a rien :s
                            1. Contributeur
                              error C2065: 'MAXRAND' : undeclared identifier
                              error C2065: 'RANDMAX' : undeclared identifier

                              vous la prenez ou votre constante??
                              1. Resultat de vos proposition ^^
                                pour canard007 ton programme marche mais je ne sais pas où mettre nombre=rand()/10000 avec nombre entier et si il faut q je l'ecrit comme toi.

                                pour pom ton instruction marche mais donne des chiffres immense du style41 , 18467 etc . Ton instruction je l'ai mis avant le for du programme de cannard007 tout en enlevant randInit et srand

                                pour pierre ton instruction marche pas a moins qu'il faut rajouter qqchose o programme ou en enlever

                                Merci de m'aider c vraiment sympas ;)
                                1. si ma memoire est bonne MAXRAND est déja defini est correspond au nombre max renvoyé par rand();
                                  il faut faire
                                  nb_alea=(int)rand()*5/RANDMAX
                                  • 1
                                  • 2