Un random spécial

Résolu/Fermé
Akuro Messages postés 234 Date d'inscription lundi 7 mars 2011 Statut Membre Dernière intervention 23 avril 2020 - 16 sept. 2012 à 19:12
Akuro Messages postés 234 Date d'inscription lundi 7 mars 2011 Statut Membre Dernière intervention 23 avril 2020 - 16 sept. 2012 à 20:22
Bonjour, je crée un petit programme en C++ pour lequel j'ai besoin de générer des nombres aléatoirement. Pour cela, j'utilise
srand(time(NULL));
puis
(int)(rand()/(float)RAND_MAX * (max)+min)

pour les générer.
Mon problème est que le programme étant très petit, le premier nombre généré est toujours le même puisqu'il met le même temps pour s'exécuter à chaque fois.

J'ai rajouté un cin avec "Voulez-vous commencer?" pour temporiser le premier résultat mais ça n'a apparemment rien changé. Je suppose que le temps écoulé pendant l'attente de la réponse n'est pas pris en compte.

J'ai donc pensé à réaliser un random à partir du temps de l'ordinateur et non du temps d'exécution du programme mais je ne sais pas comment faire ni si cela résoudra mon problème.


A voir également:

1 réponse

KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 16/09/2012 à 19:34
"le premier nombre généré est toujours le même puisqu'il met le même temps pour s'exécuter à chaque fois."
Ce n'est pas comme ça que ça fonctionne, c'est basé sur la valeur donné en paramètre de srand(unsigned int) qui dépend donc de l'heure à laquelle l'instruction time(NULL) a été exécuté, et pas au temps écoulé entre le srand() et le rand().

Je pense que l'erreur est dans ton /(float)RAND_MAX
Essaye plutôt : rand()%(max-min)+minLa confiance n'exclut pas le contrôle
1
Akuro Messages postés 234 Date d'inscription lundi 7 mars 2011 Statut Membre Dernière intervention 23 avril 2020 20
16 sept. 2012 à 20:13
Ok, c'était peut-être un coup de malchance. Par contre, ta fonction diminue l'équilibre des chances du random, ce qui fait qu'un random de 1 à 2 retourne toujours 1.
0
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
16 sept. 2012 à 20:17
Oui, comme j'ai fait c'est entre "min" inclus et "max" exclu, c'est souvent comme cela qu'on le présente (un peu comme l'histoire du 0 à n-1).
Si tu veux faire entre "min" inclus et "max" inclus, il faut faire rand()%(max+1-min)+min
1
Akuro Messages postés 234 Date d'inscription lundi 7 mars 2011 Statut Membre Dernière intervention 23 avril 2020 20
16 sept. 2012 à 20:22
Ok merci, je préfère parce que je me suis rendu compte que ma formule était bizarre voire mal faite. Ta dernière a l'air de bien fonctionner.

Merci, j'ai un peu de mal à réfléchir un dimanche soir x)
0

Discussions similaires