6 nombres aléatoires parmis une liste prédéfinie [Résolu]

Messages postés
2
Date d'inscription
jeudi 9 janvier 2003
Statut
Membre
Dernière intervention
5 mars 2006
- - Dernière réponse : econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
- 6 mars 2006 à 09:44
Bonjour à tous,

ma question est la suivante : comment faire pour choisir 6 nombres (il ne faut pas qu'il y ait 2 fois le même) dans une liste prédéfinie de 13 nombres et ensuite les stocker par ordre croissant dans un tableau.

Cela me serait utile à la création d'un nouveau jeu.

Merci d'avance pour votre aide...

Exemple :

Liste prédéfinie : 1-2-3-4-5-6-7-8-9-10-25-50-100
Les 6 nombres choisis aléatoirement parmi la liste : 10-4-25-50-8-2
Le contenu du tableau créé : 2-4-8-10-25-50
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
19
3
Merci
Salut,



Voici un exemple de code pour ton problème :


Dim tableau(12) As Long

Dim tableauChoisi(5) As Long





Sub CreeTableau6Nombres()

Dim ll As Long

Dim nbChiffresRestants As Long

Dim Choix As Integer





' On remplit un tableau avec les 13 nombres.

For ll = 0 To 9

tableau(ll) = ll + 1

Next ll

tableau(10) = 25

tableau(11) = 50

tableau(12) = 100





' On initialise le générateur de nombres

' aléatoires.

Randomize Timer



For ll = 0 To 5

nbChiffresRestants = 12 - ll + 1

Choix = Int(Rnd * nbChiffresRestants)

' On affiche la boule sortie.

tableauChoisi(ll) = tableau(Choix)

' On décale les éléments du tableau qui suivent.

For k = Choix To nbChiffresRestants - 2

tableau(k) = tableau(k + 1)

Next k



Next ll

End Sub





Sub trieTableauChoisi()

Dim i As Long

Dim j As Long

Dim nTemp As Long



For i = 0 To 4

For j = 0 To 4 - i

If tableauChoisi(j) > tableauChoisi(j + 1) Then

nTemp = tableauChoisi(j + 1)


tableauChoisi(j + 1) = tableauChoisi(j)

tableauChoisi(j) = nTemp

End If

Next j

Next i



End Sub





Sub test()

' Sub à lancer pour tester les deux procédures ci-dessus.

Dim sTemp As String



CreeTableau6Nombres

trieTableauChoisi



' A partir d'ici, on concatène toutes les données

' du tableau de 6 nombres pour montrer qu'ils sont bien triés.

sTemp = ""

For l = LBound(tableauChoisi) To UBound(tableauChoisi)

sTemp = sTemp & tableauChoisi(l) & " "

Next l

MsgBox sTemp



End Sub




Manu

Dire « Merci » 3

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

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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
0
Merci
Salut
Mets tes chiffres prédéfinis dans un tableau d'index 0 à 12.
Pour choisir un nombre aléatoire entre 0 et 1 (à virgule) --> Rnd()
Pour choisir un nombre entier entre 0 et 12, il suffit de multiplier Rnd par 12 et d'utiliser Int pour faire un entier.
Ta valeur aléatoire choisie sera dans Tableau(ValeurIssueDuRnd)
Si une valeur du tableau est utilisée, mets -1 (par exemple) dedans pour le signaler, comme ça, si tu retires encore ce même numéro d'index, tu liras -1 et donc tu sauras qu'il faut recommencer à recalculer un Rnd.

Bonus : Insère une instruction Randomize dans ton Form_Load, juste une fois. Ca t'évitera de tomber toujours sur les mêmes séquences à chaque lancement de l'appli.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
29
0
Merci
salut, en tapant "loto" tu devrais trouver des sources pour exemple... ;)