Bonjour,
Qu'elle valeur peut prendre nbAlea ?
Reponse A : de 1 a Nbre
Reponse B : de 1 a (Nbre +1)
CordialementCode:
1
2
3 qsrand( QDateTime::currentDateTime().toTime_t() ); nbAlea = qrand() % (Nbre + 1);
Version imprimable
Bonjour,
Qu'elle valeur peut prendre nbAlea ?
Reponse A : de 1 a Nbre
Reponse B : de 1 a (Nbre +1)
CordialementCode:
1
2
3 qsrand( QDateTime::currentDateTime().toTime_t() ); nbAlea = qrand() % (Nbre + 1);
La paramètre RAND_MAX ne devrait-il pas intervenir dans la réponse ?
Reponse C : de 0 à Nbre :mrgreen:
a bobti89 :
Dans ce que j'ai trouve sur qrand le fait de faire nbre + 1 c'est justement d'eviter le zero !!! ????
Cordialement
Pour éviter le zéro, il faut mettre le +1 en dehors de la parenthèse :
nbAlea = (qrand() % Nbre) + 1;
(qrand() % Nbre) \in [0; Nbre - 1]
(qrand() % Nbre) + 1 \in [1; Nbre]
Petite remarque, si tu utilises le modulo, tu n'as plus une probabilité constante pour chaque valeur.
Par exemple, avec un RAND_MAX = 15 et Nbre = 10, alors les nombres entre 0 et 5 on 2 fois plus de chance de sortir que les nombres entre 5 et 1.0.
Si tu veux une probabilité constante, il faut utiliser RAND_MAX :
qrand() -> entre 0 et RAND_MAX
qrand()*Nbre/RAND_MAX -> entre 0 et Nbre
etc.
Si tu veux un nombre entre 1 et Nbre, il faut donc écrire :
1+rand()*(Nbre-1)/RAND_MAX -> entre 1 et Nbre
Pas si simple la question !!!
Merci pour toutes ces precisions
j'ai été trop vite a valider le dernier message;
Renvoi toujour le même nombre !!!Code:qrand()*Nbre/RAND_MAX
Cordialement
Attention aux divisions entières ;)
Passe tout en float ou en "qreal"