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. Je connais pas le c++, mais d'habitude un random crée un nombre aléatoire de 0 à 1. Alors pour avoir un nb aléatoire de 1 à 5, tu fais: [4*Random+1]
    1. Contributeur
      Salut,

      bon voici un bout de code commanté pour faire une nombre aleatoire (enfin pseudo aleatoire)

      #include <stdio.h> 
      #include <stdlib.h>
      
      
      void main () 
      { 
                  unsigned int i, randInit;
         
      	   randInit = 0; //variable a modifier 
      	   printf("genration de nombre aleatoire (rand) avec %d\n",randInit);
      	   srand(randInit);  
         
      	   //on gener 10 nombres now
      	   for (i=0; i<10; i++)
      	   {
      		  printf("rand()=%d \n",rand() );
      	   } 
      	   //bon en testant tu remarquera que les nombre sont enorme mais la solutions pour garantir 
      	   //qu ils soient compris entre 0 et 5 a mon avis:
      	   //c'est de rajouter nombre=rand()/10000 avec nombre entier si le resultat est superireur a
      	   //5 et bien tu recommence...
      }
      
      
      
      


      si tu as des questions....
      1. slt canard007 je vais essayer et si ca marche pas je te ferai signe
        Merci pour ta réponse ^^
        1. Salut, je crois qu'il y a une constante MAXRAND (ou qqch comme ca) dans le c++ qui te génère des nb aléatoire entre 0 et MAXRAND.
          Fais qqch du genre :
          const MAXRAND=5;

          pom
          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. 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. Contributeur
                error C2065: 'MAXRAND' : undeclared identifier
                error C2065: 'RANDMAX' : undeclared identifier

                vous la prenez ou votre constante??
                1. o fait pour const maxrand=5 je pe remplacer 5 par n'importe quel chiffre ca ne change a rien :s
                  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. srand(time(NULL));
                      c'est bien pour initialiser il fo ^pas oublier #include"time.h"
                      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. 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. canard007 effectivement t trop fort :)
                            est ce q tu pe m'expliquer les lignes chiffre et srand stp
                            merci d'avance
                            1. Contributeur
                              regarde mon code ca roule ca marche il est bon mon code qui n en veut?
                              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
                                  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. ^^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. 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
                                    • 1
                                    • 2