6 nombres aléatoires parmis une liste prédéfinie

Résolu
cs_nichou Messages postés 2 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 mars 2006 - 5 mars 2006 à 23:21
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre 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

3 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
6 mars 2006 à 09:44
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
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mars 2006 à 00:04
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
6 mars 2006 à 03:04
salut, en tapant "loto" tu devrais trouver des sources pour exemple... ;)
0
Rejoignez-nous