Tirage aléatoire

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 445 fois - Téléchargée 10 fois

Contenu du snippet

C'est en voyant ce post, que j'ai eu envie d'approndir la question:

http://codes-sources.commentcamarche.net/forum/affich-10066446-une-serie-de-nombre-aleatoire

Voici 5 manières de faire un tirage aléatoire:
Tableau simple
Tableau dynamique
Collection
Collection dynamique
Avec une listbox dynamique a laquelle j'ai ajouté un tirage du loto avec 5 numeros plus numéro complémentaire pour le fun:

Ajout d'une  TextBox1 multiline

 <code>'Avec tableau simple
 
    Sub Tirage_aléatoire()
        Dim montableau() As String ' Tableau contenant les 9 numeros
        Dim nombre As Long ' Nombre de numeros
        Dim n As Long, i As Long ' Variables de travail
        TextBox1.Text = ""
        nombre = 9
        ReDim montableau(CInt(nombre))

        montableau(0) = "1"
        montableau(1) = "2"
        montableau(2) = "3"
        montableau(3) = "4"
        montableau(4) = "5"
        montableau(5) = "6"
        montableau(6) = "7"
        montableau(7) = "8"
        montableau(8) = "9"

        Randomize() ' Initialise le générateur de nombres aléatoires

        For n = 0 To nombre - 1
            i = CLng(Int((nombre - n) * Rnd()))
            TextBox1.AppendText(montableau(CInt(i)) & " ")
            montableau(CInt(i)) = montableau(CInt(nombre - 1 - n))
        Next
    End Sub
    
    'Avec Tableau dynamique
    
    Sub Tiragealéatoire_tableaudynamique(ByVal x As Integer)
        ' Déclare un tableau dynamique.
        Dim Montableau() As Integer
        Dim n As Long, i As Long ' Variables de travail
        TextBox1.Text = ""

        ReDim Montableau(x)   ' Alloue x éléments.

        For j = 0 To x   ' Effectue la boucle x fois.
            Montableau(j) = j + 1   ' Initialise le tableau.
        Next j

        Randomize() ' Initialise le générateur de nombres aléatoires

        For n = 0 To x - 1
            i = CLng(Int((x - n) * Rnd()))
            TextBox1.AppendText(Montableau(CInt(i)) & " ")
            Montableau(CInt(i)) = Montableau(CInt(x - 1 - n))
        Next
    End Sub
    
    Pour lancer
    
     Tiragealéatoire_tableaudynamique(9)
     
     Avec une Collection
     
      Dim nombre_aleat As Integer
        Dim numbers As New List(Of Integer) From
    {1, 2, 3, 4, 5, 6, 7, 8, 9}
        TextBox1.Text = " "
        'On déclare une variable Classe Random() 
        Dim random As New Random()
      
        For index As Integer = 0 To numbers.Count - 1
            '.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
            nombre_aleat = random.Next(numbers.Count)
            'On mémorise l'item d'index (nombre aléatoire) 
            TextBox1.AppendText(numbers(nombre_aleat) & " ") 'ajoute le nombre aléatoire dans la TextBox
            numbers.RemoveAt(nombre_aleat) 'supprime  Le nombre aléatoire de la liste
        Next
     
      'Avec collection dynamique
      
    Sub Tiragealéatoire_collectiondynamique(ByVal x As Integer)
        Dim nombre_aleat As Integer
        Dim lst As New List(Of String)
        TextBox1.Text = ""
        lst.Clear()
        For i = 1 To x
            lst.Add(i & " ")
        Next
        'On déclare une variable Classe Random() 
        Dim random As New Random()
        'On fait autant de tirages que de lignes 
        For index = 0 To lst.Count - 1
            '.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
            nombre_aleat = random.Next(lst.Count)
            'On mémorise l'item d'index (nombre aléatoire) 
            TextBox1.AppendText(CStr(lst(nombre_aleat))) 'ajoute le nombre aléatoire dans la TextBox
            lst.RemoveAt(nombre_aleat) 'supprime  Le nombre aléatoire de la liste
           Next
    End Sub
    
    Pour lancer
      Tiragealéatoire_collectiondynamique(9)
      
     Avec listbox dynamique:
     
        Dim list As New System.Windows.Forms.ListBox()
        Dim index, i, nombre_aleat As Integer
        Dim rep As String
        Dim r As Integer
        Do
            rep = InputBox("Tapez un chiffre entre 9 et 50", " Tirage aléatoire", "49")
            If rep = "" Or IsNumeric(rep) = False Then Exit Do
             r = CType(rep, Integer)
        Loop Until r > 8 And r < 51
        TextBox1.Text = ""
        Me.Controls.Add(list) 'cree listBox
        list.Top = 10
        list.Left = 10
        'on rempli la listBox 
        For i = 1 To r
            list.Items.Add(i & " ")
        Next
        'On déclare une variable Classe Random() 
        Dim random As New Random()
        'On fait autant de tirages que de lignes 
        For index = 0 To list.Items.Count - 1
            '.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
            nombre_aleat = random.Next(list.Items.Count)
            'On mémorise l'item d'index (nombre aléatoire) 
            TextBox1.AppendText(CStr(list.Items(nombre_aleat))) 'ajoute le nombre aléatoire dans la TextBox
            list.Items.RemoveAt(nombre_aleat) 'supprime  Le nombre aléatoire de la listBox 
            If r = 49 Then 'tirage loto
                '.Next permet de retourner un nombre aléatoire contenu dans la plage spécifiée entre parenthèses.
                TextBox2.Text = CStr(random.Next(1, 10)) 'numero complémentaire ajouter textBox2
                If index = 4 Then Exit For
            End If
        Next
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is ListBox Then
                Me.Controls.Remove(ctrl) 'supprime la listbox
            End If
        Next
      

Bonne programmation

A voir également

Ajouter un commentaire

Commentaires

glenat_26
Messages postés
10
Date d'inscription
vendredi 8 février 2019
Statut
Membre
Dernière intervention
12 mars 2019
-
Un gros MERCI.
glenat_26
Messages postés
10
Date d'inscription
vendredi 8 février 2019
Statut
Membre
Dernière intervention
12 mars 2019
-
Désoler je commence en vb. les solution que tu ma donner son génial, cependant il sont tous dans un textbox mais si je transformer chaque chiffre à une donner exemple 2 = chien, 3 = chat. je sais pas comment faire. Avec une listbox je sais comment faire mais pas un textbox multiline. Il y a t'il un moyen svp
vb95
Messages postés
1946
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 octobre 2019
68 > glenat_26
Messages postés
10
Date d'inscription
vendredi 8 février 2019
Statut
Membre
Dernière intervention
12 mars 2019
-
Bonjour !
Un excellent cours pour débuter en VB Net bien qu'il commence à dater : https://plasserre.developpez.com/cours/vb-net/
De plus le code de cs_Le Pivert( bien que fonctionnel) mélange allègrement du VB 6 et du VB Net ( ce qui revient à mélanger les torchons et les serviettes)
Dans le cours que je t'ai mis en lien il est expliqué le pourquoi VB Net tolère encore du pseudo VB 6 et le moyen de s'en affranchir afin de programmer en vrai VB Net de A à Z.
cs_Le Pivert
Messages postés
6272
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
16 octobre 2019
87 > glenat_26
Messages postés
10
Date d'inscription
vendredi 8 février 2019
Statut
Membre
Dernière intervention
12 mars 2019
-
Bonjour,

en réponse à glenat

Voici un exemple en VB.NET

mettre 2 listBox et 5 TextBox plus un Button dans lequel on met ce code:

Option Strict On
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim index, i, nombre_aleat As Integer
        ListBox1.Items.Clear()   'on nettoie pour le prochain tirage
        ListBox2.Items.Clear()
        'on rempli la listBox 
        For i = 1 To 49  'a adapter
            ListBox1.Items.Add(i)
        Next
        'On déclare une variable Classe Random() 
        Dim random As New Random()
        'On fait autant de tirages que de lignes 
        For index = 0 To ListBox1.Items.Count - 1
            nombre_aleat = random.Next(ListBox1.Items.Count)
            'On mémorise l'item d'index (nombre aléatoire) 
            ListBox2.Items.Add(ListBox1.Items(nombre_aleat)) 'rempli la listBox résultat pour voir les doublons
            Select Case index
                Case 0
                    TextBox1.Text = CStr(ListBox1.Items(nombre_aleat))
                Case 1
                    TextBox2.Text = CStr(ListBox1.Items(nombre_aleat))
                Case 2
                    TextBox3.Text = CStr(ListBox1.Items(nombre_aleat))
                Case 3
                    TextBox4.Text = CStr(ListBox1.Items(nombre_aleat))
                Case 4
                    TextBox5.Text = CStr(ListBox1.Items(nombre_aleat))
            End Select
            ListBox1.Items.RemoveAt(nombre_aleat) 'supprime  Le nombre aléatoire de la listBox 
            If index = 4 Then Exit For 'sort au 5ème tirage
        Next
    End Sub
End Class


Voilà ce code est tiré de ce programme:

https://codes-sources.commentcamarche.net/source/101526-tirage-du-loto

Bonne journée

@+ Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.