Générer un nombre entier aléatoirement en VB

Fermé
Ean21 Messages postés 84 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 7 février 2007 - 24 mars 2005 à 22:38
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 1 déc. 2012 à 11:22
Bonjour à tous!
Voilà, mon problème est résumé dans le titre: j'aimerais savoir comment générer un nombre entier aléatoirement. Exemple: un fonction qui me génère un nombre entier compris entre 1 et 5,...
Merci à tous ceux qui prendront le temps de me répondre.
Bonne fin de soirée
Ean
A voir également:

8 réponses

Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
25 mars 2005 à 08:28
Bonjour Ean21,

Je sais faire en VBA, et je suppose qu'en VB c'est très ressemblant.
Utilise Rnd, qui génère aléatoirement un nombre entre 0 (inclus) et 1 (exclus).
Donc : (Rnd * 5) génère un nombre entre 0 inclus et 5 exclus.
Pour avoir un entier de 1 à 5 : Int(Rnd * 5) + 1
La suite "aléatoire" générée étant toujours identique, prendre la précaution de faire un "Randomize" avant la première utilisation, de façon à initialiser une valeur tirée de l'horloge interne.
Ajx.
21
Ean21 Messages postés 84 Date d'inscription samedi 28 août 2004 Statut Membre Dernière intervention 7 février 2007 23
31 mars 2005 à 20:52
Merci pour ton aide, la génération fonctionne très bien!!
Pourrait-tu m'expliquer en quoi la fonction Randomize() est-elle nécessaire, car je ne comprends pas vraimen?...
Merci
6
Armojax Messages postés 1858 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 22 mars 2024 1 528
31 mars 2005 à 23:39
Bonsoir Ean21,

La fonction Rnd est un générateur de nombres "aléatoires". Chaque valeur suivante résulte d'un algorithme assez compliqué, appliqué à la valeur précédente. La suite de nombres générée dépend donc de la valeur initiale du premier tirage.
Randomize fournit une valeur initiale tirée de l'horloge interne. Donc, à chaque fois qu'on lance Excel, il y a peu de chances que les séries tirées soient identiques.
Si on n'initialise pas avec Randomize, Excel partira toujours d'une même valeur initiale, et à chaque fois, on obtiendra une série "aléatoire" identique.

En fait d'aléatoire, le tirage est un tirage "calculé". La distribution des valeurs obtenues peut être considérée comme semblable à un tirage au sort. Tout dépend de la qualité de l'algorithme utilisé.
0
public function NomDeTaFonction(ArgumentDeTaFonction)
Dim u as double
Randomize
u=Rnd
...
2
Bonsoir Kev 22
Comment initialiser la fonction Randomise?
Débutant en vba.
1

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

Posez votre question
Bonjour j 'utilise visual basic 2010( je débute et je galère).
Est ce que quelqu'un connait le code pour:
Quand j appuye sur un bouton
Cela m'affiche a l'écran un nombre entier de 15 chiffres au hazard.
Donc cela doit afficher un nombre entre 100000000000000 et 999999999999999
il faudrai que je puisse selectionner ce nombre avec la souris et par exemple faire un copier/coller.
Et que quand je reclique sur le bouton j'ai un nouveau nombre de 15 chiffres qui apparait
Merci aux personnes qi pourront m'aider
1
Int(( 100000000000000 * Rnd()) + 999999999999999)
0
Comment faire pour choisir un nombre entre deux définis et pas seulement entre zéro et un chiffre choisit. (En gros je voudrais pouvoir changer le zéro et le second chiffre)
Comme par exemple un chiffre entre 3 et 15.
Merci,
cecomog
1
Bonjour cecomog,

La fonction rnd() sort un nombre au hasard entre 0 et 1 (ne pas oublier de faire précéder par randomize, comme expliqué par Anonymous le 7 mars 2012 à 11:20).

Pour tirer un nombre qui soit ou 3 ou 15, tu peux donc procéder ainsi :

Randomize
u=Rnd
if u<0.5 then
tirage=3
elseif u>=0.5 then
tirage=15
endif


Je te l'ai fait ici avec une proba 50% pour chacun des deux nombres.
Mais tu peux également passer la proba à x/(1-x) comme tu le souhaites, en changeant dans mon code le 0.5 par la proba x que tu désires.
1
Bonjour à tous,

J'ai à mon tour une question, concernant la fonction Randomize.
J'ai fait des tests à partir de 3 programmes légèrement différents. La proba théorique à simuler était de 0,36%.

1. Lecture du randomize à chaque tirage :
Le randomize est ici dans la fonction qui fait les tirages au sort, donc lu avant chaque Rnd.
Résultat : proba simulée = 0,54% (obtenue une vingtaine de fois de suite, avec un nombre de tirages effectués variant de 1000 à 30000).

2. Pas de randomize dans le programme :
D'après ce que dit Armojax plus haut, je suis sensé obtenir à chaque fois le même résultat. J'ai lancé 2 fois (avec nombre de tirages au sort = 1000), je n'ai pas obtenu les mêmes résultats...
Proba simulée = 0,38%

3. Lecture du randomize une seule fois dans le programme :
J'ai cette fois mis le randomize à un endroit qui n'est lu qu'une seule fois dans l'ensemble du programme.
Proba simulée = 0,38% (obtenue sur 2 fois 1000 tirages au sort).

Ma question est donc : comment utiliser la fonction randomize de manière adéquate (à savoir : qui donne une proba simulée proche de la proba théorique, et avec un aléa qui ne soit pas "pré-déterminé") ?

Merci d'avance
1
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
1 déc. 2012 à 11:22
Bonjour,

randomize sert, si tu veux des nombres de 1 à 100, à ne pas avoir 71, 54, 58, etc à chaque fois que tu lances le programme.
Il ne sert qu'à ça et à rien d'autre.
L'utiliser une seule fois est suffisant. Avec 13 chiffres significatif la 'chance' d'avoir 2 fois la même initialisation est quand même très faible.

Et si tu lances 1000 fois un dé, la probabilité d'avoir 1000 fois un 3 est faible, mais elle existe.
La loi des grands nombres nous dit seulement que plus l'échantillon est élevé, plus on s'approche de la probabilité calculée.
Donc augmente ton échantillon.

D'autre part, à partir du moment ou un nombre aléatoire est calculé à partir du précédent c'est un nombre pseudo-aléatoire et non pas de l'aléatoire pur.

eric
0