Random?????
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
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.
-
Ah ouais... c'est pas bête, j'y avais pas pensé!!
merci de ton tuyau! -
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...-
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
-
-
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 et2
????!!! -
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! -
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 -
^^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.
-
Contributeursrand () 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.. -
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 ^^ -
Contributeurregarde mon code ca roule ca marche il est bon mon code qui n en veut?
-
canard007 effectivement t trop fort :)
est ce q tu pe m'expliquer les lignes chiffre et srand stp
merci d'avance -
avec RAND_MAX ca marque erreur il doit manquer qqchose
-
Contributeurbon 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); } -
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. -
srand(time(NULL));
c'est bien pour initialiser il fo ^pas oublier #include"time.h" -
Contributeurfo 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... -
escuse c pas RANDMAX mais RAND_MAX
-
o fait pour const maxrand=5 je pe remplacer 5 par n'importe quel chiffre ca ne change a rien :s
-
Contributeurerror C2065: 'MAXRAND' : undeclared identifier
error C2065: 'RANDMAX' : undeclared identifier
vous la prenez ou votre constante?? -
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 ;) -
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