IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

tirage au sort


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Par défaut tirage au sort
    voilà je m'explique je souhaiterais créer un programme qui face des tirages au sort.
    Donc j'aimerais savoir comment trier des valeur aléatoirement

    Par exemple j'ai comme variable "OM" "OL" "PSG" et je voudrais les ranger aléatoirement
    Par exemple le résultat obtenu serait OL PSG OM ou OM PSG OL

    Quelqu'un peu m'aider?

    merci d'avance

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    une solution possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Randomize
     
    Dim Coll As New System.Collections.Generic.List(Of String)
    Coll.Add("OM")
    Coll.Add("PSG")
    Coll.Add("OL")
     
    Dim nbAlteatoire As Integer
    Dim s As String
    For i As Integer = 0 To 1000 'on fait 1000 déplacement d'ordre
        nbAlteatoire = CInt(Rnd() * (Coll.Count - 1)) 
     
        s= Coll(nbAlteatoire)
        Coll.Remove(s) ' on retire le string de la collection à l'index où il est
        Coll.Add(b) ' et on le remets dans la collection mais à la fin
    Next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Par défaut
    ok merci je vais tester mais je comprend pas les 2 dernières ligne en fet

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    le principe c'est qu'on prend une collection, qu'on rempli

    e0 e1 e2 e3 e4 e5 e6


    on demande un nombre au hasard entre 0 et 6 prenons comme exemple 4
    on met la valeur de e4 dans une variable, on retire ensuite e4 de la liste ce qui nous donne

    e0 e1 e2 e3 e5 e6

    puis on rajoutes l'element mis de coté

    e0 e1 e2 e3 e5 e6 e4


    et on répète ca plein de fois, donc ca mélange ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    1000 étapes pour trier 3 valeurs ? ... mouais
    Sinon, j'ai ça (j'ai fait l'effort du vb .... merci les convertisseurs )
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    Public Overridable Function Randomisationner(Of T)(ByVal original As List(Of T)) As List(Of T)
        Dim result As New List(Of T)()
     
        Dim m As New Random(CInt(DateTime.Now.Ticks))
        Dim nx As Integer = 0
        While original.Count > 0
            nx = m.Next(0, original.Count)
            result.Add(original(nx))
            original.RemoveAt(nx)
        End While
     
        Return result
    End Function
     
    Public Sub Test()
        Dim equipes As List(Of String) = Randomisationner(Of String)(New List(Of String)(New String() {"OM", "OL", "PSG", "Brazil"}))
    End Sub

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Encore une variation sur le même thème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Public Shared Sub Shuffle(ByVal list As IList, ByVal nbSwaps As Integer)
            Dim rnd As Random = New Random()
            Dim i As Integer = 0
            For i = 1 To nbSwaps
                Dim i1 As Integer = rnd.Next(0, list.Count)
                Dim i2 As Integer = rnd.Next(0, list.Count)
                Swap(list, i1, i2)
            Next
        End Sub
     
        Public Shared Sub Swap(ByVal list As IList, ByVal i1 As Integer, ByVal i2 As Integer)
            Dim tmp As Object = list(i1)
            list(i1) = list(i2)
            list(i2) = tmp
        End Sub
    Le paramètre nbSwaps indique le nombre d'échanges à effectuer : plus il est élevé, mieux la liste sera mélangée.

    A priori c'est un peu plus performant que les méthodes précédentes (variable selon le nombre d'échanges bien sûr...), vu que ça ne fait pas de Add et de Remove. Et ça marche pour tout ce qui implémente IList (tableaux, collections en tous genre). Par contre ça ne renvoie pas une copie mélangée de la liste, ça mélange directement la liste elle même

    PS: merci aussi au convertisseur C#/VB
    dommage qu'il traduise un for par un While, et un i++ par System.Math.Max(System.Threading.Interlocked.Increment(i),i - 1)

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Citation Envoyé par smyley Voir le message
    1000 étapes pour trier 3 valeurs ?
    j'ai repris ca ... mais c'est en effet c'est à mettre en relation avec Coll.Count
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 101
    Par défaut
    merci pour votre aide je vais tester ça

Discussions similaires

  1. Quelle fonction pour faire un tirage au sort de noms
    Par Sofie109 dans le forum VBA Access
    Réponses: 6
    Dernier message: 01/06/2007, 14h52
  2. Tirage au sort
    Par Titeuf82 dans le forum Ada
    Réponses: 5
    Dernier message: 17/04/2007, 11h05
  3. Tirage au sort d'un mot
    Par Dav-D dans le forum C
    Réponses: 39
    Dernier message: 04/01/2007, 17h04
  4. [VBA-E] Tirage au sort avec probabilité
    Par clarisse dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/05/2006, 11h01
  5. Tirage au sort
    Par clampin dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2005, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo