Random?????

David -  
 hibougenoucayou -
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

  • 1
  • 2
  1. Lita
     
    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]
    0
  2. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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....
    0
  3. David
     
    slt canard007 je vais essayer et si ca marche pas je te ferai signe
    Merci pour ta réponse ^^
    0
  4. pom
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pi€rre Messages postés 76 Statut Membre
     
    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
    0
  7. David
     
    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 ;)
    0
  8. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    error C2065: 'MAXRAND' : undeclared identifier
    error C2065: 'RANDMAX' : undeclared identifier

    vous la prenez ou votre constante??
    0
  9. David
     
    o fait pour const maxrand=5 je pe remplacer 5 par n'importe quel chiffre ca ne change a rien :s
    0
  10. pi€rre Messages postés 76 Statut Membre
     
    escuse c pas RANDMAX mais RAND_MAX
    0
  11. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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...
    0
  12. pi€rre Messages postés 76 Statut Membre
     
    srand(time(NULL));
    c'est bien pour initialiser il fo ^pas oublier #include"time.h"
    0
  13. drizzt40 Messages postés 133 Statut Membre 25
     
    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.
    0
  14. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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);
    	
    
    } 
    
    
    
    0
  15. David
     
    avec RAND_MAX ca marque erreur il doit manquer qqchose
    0
  16. David
     
    canard007 effectivement t trop fort :)
    est ce q tu pe m'expliquer les lignes chiffre et srand stp
    merci d'avance
    0
  17. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    regarde mon code ca roule ca marche il est bon mon code qui n en veut?
    0
  18. David
     
    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 ^^
    0
  19. Canard007 Messages postés 5954 Date d'inscription   Statut Contributeur 216
     
    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..
    0
  20. David
     
    ^^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.
    0
  21. pom
     
    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
    0
    1. pi€rre Messages postés 76 Statut Membre
       
      quand tu initialise comme j'ai di plus hau normalement oui
      0
  • 1
  • 2