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
A voir également:

24 réponses

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
Canard007 Messages postés 5936 Statut Contributeur 215
 
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
David
 
slt canard007 je vais essayer et si ca marche pas je te ferai signe
Merci pour ta réponse ^^
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
Canard007 Messages postés 5936 Statut Contributeur 215
 
error C2065: 'MAXRAND' : undeclared identifier
error C2065: 'RANDMAX' : undeclared identifier

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