Random [Résolu]

Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
- - Dernière réponse : sebleboss2002
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
- 26 févr. 2005 à 01:31
Voilà, j'ai bien l'impression d'avoir un problème...



Je suis en train de coder un Yams, avec cinq dés donc, et je trouve que
les chiffres qui sortent à chaque tirage sont trop ressemblants...

Exemple, un tour je tire un carré de trois du premier coup, le tour
d'après, idem avec les cinq... Mais également, je n'ai jamais tiré de
trois en même temps que des cinqs ou de 1 avec des six...

Bref, ça fait tout sauf du vrai Random quoi...

Voici mon code :




 Randomize (6)



 valDe1 = Int(Rnd * 6) + 1



 valDe2 = Int(Rnd * 6) + 1



 valDe3 = Int(Rnd * 6) + 1



 valDe4 = Int(Rnd * 6) + 1



 valDe5 = Int(Rnd * 6) + 1





J'ai également essayé en mettant "Randomize" simple au lieu de "Raondomize (6)", mais aucun changement...



Quelqu'un aurait-il la solution ?
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
18
3
Merci
Arrêter de mettre un argument dans vos appel à Randomize !! Ca ne serrt a rien (et visiblement ca foire tout !!)
La ligne suivante ...
Randomize
... suffit a rendr ele pseudo-aléatoire suffisamment variable pour qu'on le considère variable !
Alros pourquoi Randomize accepte un argument ? Pour pouvoir ne pas faire d'aléatoire du tout justement !!!! Ca peu paraitre con mais on a parfois besoin que le pseudo-aléatoire ne le soit pas du tout ! Si vous êtes en train de débugger un programme ave cdu random dedans, et bien mieux vaudrait pour vous que le pseudo-aléatoire ne soit pas du tout aléatoire !! Il suffit alors de remplacer la ligne ...
Randomize
... par ca ...
Randomize(1)
... ou ca ...
Randomize (1000)
et vous avez du pseudo-aléatoire figé ! C'est a cela que sert l'argument de Randomize !! Pas a rendre celui-ci plus aléatoire. Quand vous ne mettez pas d'argument à Randomize, il prend l'horloge système comme racine de l'algo de génération de nombre pseudo-aléatoire, donc c'est toujours unique et suffisamment pour que le pseudo-aléatoire paraisse vraiment aléatoire !!

Christophe R

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 199 internautes nous ont dit merci ce mois-ci

Messages postés
29
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
1 mars 2005
0
Merci
Randomize Timer

Essai, on n' sait jamais

tryborg
Messages postés
125
Date d'inscription
samedi 11 décembre 2004
Statut
Membre
Dernière intervention
12 août 2008
1
0
Merci
Tu peux aussi essay :
Function Rand()
Randomize (now)
Rand = Int(Rnd * 6) + 1
End Function


valDe
1 = Rand
valDe
2 = Rand
valDe
3 = Rand
valDe
4 = Rand
valDe
5 = Rand

En fait, Randomize ne génaire pas vraimenr des chiffre de facon aléatoire. Ce n'ai qu'une formule qui VB utilise. Morale de l'histoir si on connais la formule on peux prédire le résultat que va sortir lordinateur
le meilleur moyent d'éviter ce la c de taper sur la clock interne a chaque fois en envoyant le paramètre now a la commande Randomize.
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
0
Merci
Alors euh... Après test des deux méthodes :



Avec un Randomize Timer,
je tire toujours des nombres identiques à chaque fois (soit trois as,
soit trois trois...) ou alors des nombres dans une certain interval
(des as, deux et trois, mais pas de quatre cinq et six, ou vice-versa).



Avec une fonction Rand utilisant Randomize (Now), je tire les
mêmes séries de nombre à chaque fois (premier tirage = as, trois, cinq,
quatre, trois. Second tirage = quatre, cinq, quatre, deux, as.
Troisième tirage = trois, deux, as, as, cinq).



Existe-t-il vraiment une fonction permettant de renvoyer un nombre
vraiment au hasard en VB ? Si non, dans quel autre langage aurais-je
plus de chances de trouver une vraie fonction random ?
Messages postés
29
Date d'inscription
lundi 31 janvier 2005
Statut
Membre
Dernière intervention
1 mars 2005
0
Merci
Crée un nouveau module et rentre ce code dedans, ce code n'est point de moi, je ne l'ai pas encore testé ...


<HR>
Option Explicit


Public Type RandomDistribution
Value As Single
Weight As Single
Probability As Single

End Type


Public Sub NormalizeDistribution(dist() As RandomDistribution)


Dim i As Long
Dim s As Single
Dim w As Single


s = 0
For i = 0 To UBound(dist)
s = s + dist(i).Weight

Next i


w = 0
For i = 0 To UBound(dist)
w = w + dist(i).Weight
dist(i).Probability = w / s


Next i


End Sub


Public Function Rand(Optional Max As Variant, Optional Min As Variant, Optional Seed As Variant) As Single


Dim Range As Single
Dim Offset As Single


Range = 1
Offset = 0


If Not IsMissing(Max) Then
Range = Max

End If


If Not IsMissing(Min) Then
Range = Range - Min
Offset = Min


End If


If IsMissing(Seed) Then
Rand = Rnd() * Range + Offset


Else
Rand = Rnd(Seed) * Range + Offset

End If


End Function


Public Function CRand(dist() As RandomDistribution) As Single


Dim i As Long
Dim r As Single


r = Rnd()


i = 0
Do While (r > dist(i).Probability) And (i < UBound(dist))
i = i + 1

Loop

If i = 0 Then
CRand = Rand(dist(i).Value)

Else
CRand = Rand(dist(i).Value, dist(i - 1).Value)

End If


End Function


Public Function DRand(dist() As RandomDistribution) As Single


Dim i As Long
Dim r As Single


r = Rnd()
i = 0
Do While (r > dist(i).Probability) And (i < UBound(dist))
i = i + 1

Loop


DRand = dist(i).Value


End Function

<HR>


tryborg
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
0
Merci
Ok Crenaud, tu viens de m'apprendre quelque chose, merci :)

Mais par contre pour mon code euh... Ben avec un Random standard, j'ai
toujours des nombres qui reviennent trop souvent dans ma série de cinq
nombres (genre un carré d'as ou de cinq dès le premier tirage). J'ai
essayé de mettre un Randomize avant le tirage de chaque dé (randomize,
tirage dé1, randomize, tirage dé2, randomize, tirage dé3...), mais cela
n'arrange rien...



Je n'y comprends plus rien...
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
18
0
Merci
Un randomize suffit normalement ! Voici mes cinquante premier tirage ...
3
4
6
3
5
6
3
1
3
2
5
3
1
6
6
6
5
5
2
3
3
6
3
6
1
5
5
2
5
4
5
3
3
5
1
4
5
4
4
2
4
4
2
4
2
6
3
3
6
1


Ca m'a l'air plutot alétoire ca non !!
Voici le code

Dim i As Long


Randomize


For i = 1 To 50
Debug.Print Int(Rnd * 6) + 1
Next

Christophe R
Messages postés
189
Date d'inscription
lundi 30 décembre 2002
Statut
Membre
Dernière intervention
3 avril 2005
0
Merci
Oui... Vérifié... Les apparitions de *paquets* de trois ou quatres
chiffres identiques successifs doivent être dues au fait qu'il n'y a
que 6 chiffres possibles...

J'vais me coucher moi !



Enfin, merci à tous d'avoir pris le temps de réfléchir à mon problème