Aléatoire en C

melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -  
melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai déjà pas mal regardé sur le net, mais je n'ai pas trouvé de réponse qui me satisfaisait. Voilà mon problème:

L'idée est de trouvée un nombre moyen de coups pour réaliser une certaine expérience (par exemple, combien faut-il de coups en moyenne avant d'obtenir 3 fois le nombre 6 d'affilée sur un dé).

Je décide de faire l'expérience disons, 100 fois, à l'aide d'une boucle for. A l'intérieur de celle-ci, j'appelle la fonction srand(time(NULL) puis (à l'intérieur d'une nouvelle boucle) rand(). Le problème, c'est que l'ordinateur effectue l'expérience trop vite, et quand il retourne dans la 1ere boucle for, le temps n'a pas changé d'une seconde, et il effectue une nouvelle fois la seconde boucle for avec la même "initialisation" de la fonction rand().

J'obtiens donc une sortie sur ma console:

Le nb de coups avant d'obtenir 3 six est : 167
Le nb de coups avant d'obtenir 3 six est : 167
Le nb de coups avant d'obtenir 3 six est : 167
Le nb de coups avant d'obtenir 3 six est : 167

(Il faudrait que ça change pour pouvoir faire une moyenne!)

J'ai essayé de ne pas prendre le temps comme graine pour rand(), par exemple le nb de tours de mon processeur, mais ça ne marche pas non plus...

J'espère que j'ai été quand même assez clair, mais je sais qu'il faut s'accrocher pour bien comprendre...
Une solution?

Merci d'avance à tous!

8 réponses

barbouille94 Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
Salut Melreg,

il te suffit tout simplement d'initialiser la séquence de ton générateur pseudo aléatoire (la ligne srand(time(NULL)) une seule fois au début de ton programme.

Effectivement si tu mets ton init dans ta boucle de 100 tu a de grande chance de partir du même endroit dans ta séquence (ce qui semble être le cas).

Barbouille
0
melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
C'est ce que je pensais Brabouille.
Je l'ai mis en-dehors, mais c'est pareil, j'obtiens chaque fois la même valeur... c'est bizarre!
Tu veux que je poste mon code?
0
barbouille94 Messages postés 30 Date d'inscription   Statut Membre Dernière intervention   > melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Por le code, oui je veux bien que tu le mettes.
0
PeterPeterPeter Messages postés 202 Date d'inscription   Statut Membre Dernière intervention   30
 
J'ai une solution, un peu barbare mais ça marche, vu que c'est juste pour un petit test, niveau optimisation on s'en fout !

En gros rajoute un
usleep(20);
dans ta boucle for, cette fonction fera dodo pendant un très court laps de temps !

Essaye de voir pour une valeur exacte je ne sais plus ce que j'avais mis dans mon cas.

edit : et oui comme dit au dessus, le srand() c'est mieux de l'initialiser une fois puis c'est tout !
0
melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai essayé avec usleep, mais ça ne marche pas non plus...
0
PeterPeterPeter Messages postés 202 Date d'inscription   Statut Membre Dernière intervention   30
 
Tu peux montrer ton code stp ?

Comme ça je vais faire des test en même temps pour voir.
0

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

Posez votre question
melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Euh... là, j'ai l'air bête, j'avais oublié une remise à zéro... aie!!!
Merci pour votre aide, elle n'aura pas été inutile puisque j'ai fini par trouvé et aussi parce que j'en ai appris plus sur la fonction srand.

Merci
0
barbouille94 Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
le test, je viens de le voir ... ;))
0
barbouille94 Messages postés 30 Date d'inscription   Statut Membre Dernière intervention  
 
Plus les erreurs sont grosses et moins on les voit ... et bien souvent il suffit d'exposer le problème pour trouver tout seul !!

Je parle par expérience ;))
0
melreg Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
C'est vrai barbouille! En tout cas, merci!
0