Nombre Secret (Probleme de Proba)
Bonsoir,
Voila, je suis en train de faire un algorithme, le but est est de trouve un "Nombre secret" ce nombre secret est generé par un Random:
Float: Rand: Random()
Random donne un nombre (float) compris entre 0 et 1
les borne pour trouver le chiffre son demandé au joueur (genre de 0 à 100..)
Pour l'example on va dire de : 0 à 10
Le probleme maintenant c'est qu'il faut que CHAQUE CHIFFRE EST LA MEME PROBABILITE D?ETRE CHOISIT...
la premiere chose qui me vien a l'esprit c'est de faire:
PS: dans le language que j'utilise (Integer) ARRONDI, donc 1.5 -> 2
NbSecret = (Integer)Rand * 10
donc la j'aurai un chiffre qui se trouvera entre 0 et 10 (Compris)
mais le probleme c'est que les borne (0 et 10) on 2fois moi de chance d'etre choisi...
example de 0 à 2
de 0 à 0.4 = 0 ( la y a en 5)
de 0.5 à 1.4 = 1 (la 10)
de 1.5 à 2 = 2 (et la 6)
j'ai donc fait un ca (par ex de 0 à 10):
NbSecret := ((10 +1)*Rand) mod (10 + 1));
avec ceci chaque chiffre a la meme probabilité detre choisit (car la on a agrandi la borne (de 10 a 11) et le mod(10+1) agrandi la borne (0)
de 0 à 0.4 = 0 ( la y a en 5)
de 0.5 à 1.4 = 1 (la 10)
de 1.5 à 2.4 = 2 (et la 10)
de 2.5 à 3 = 3 (et la 6)
en faite le mod sert en GROS a mettre tout les '3' dans les 0... (car 3 mod 3 = 0..)
Mais je n'ai pas le droit d'utilise Mod,
Il me faut donc une autre Equation..
et la je bloque :(
si quelqu'un pourrai me donné quelque indice?
d'avance merci
Re: Nombre Secret (Probleme de Proba)
Citation:
Envoyé par BoBy9
Code:
NbSecret := ((10 +1)*Rand) mod (10 + 1));
ne sert pas a grand chose au contraire il desequilibre ton algo en excentrant tes stats. fait plutot :
Code:
NbSecret := (Integer)((11)*Rand);
il faut savoir que les fonctions Rand renvoient un nombre réel [0;1[ en les multipliant metont par 10 on obtient [0;9] ([0;10[) en rajoutant + 1 on décale les résultats d'un crant soit toujours avec un coef 10 : [1;10] ([1;11[)donc si on veux alle de 0 a n il faut donner au programme (n+1) comme coef et ne pas rajouter +1 apres le calcul. le generateur de nombres aleatoire doit logiquement donner autant de chance a tout les nombres mais certains generateurs sont plus aboutis que d'autres.
si par maleur ta calculatrice ne sortait jammais le 0 avec le code que je t'ai donné essaye :
Code:
NbSecret := (Integer)(((12)*Rand) - 1);
Ca voudrais dire que ton Rand ne sort tes intervales que dans ]0:1[ ce qui est bizare mais que j'ai déjà vu ailleur
Re: Nombre Secret (Probleme de Proba)
Citation:
Envoyé par BoBy9
dans le language que j'utilise (Integer) ARRONDI, donc 1.5 -> 2
NbSecret = (Integer)Rand * 10
donc la j'aurai un chiffre qui se trouvera entre 0 et 10 (Compris)
mais le probleme c'est que les borne (0 et 10) on 2fois moi de chance d'etre choisi...
Il ne faut pas arrondir le résultat mais récupérer sa partie entière :
Pour un nombre aléatoire entre 0 et n : trunc(random * (n + 1))
avec : 0 <= random < 1
et : trunc(0,99999999) = 0
Bloon