Générer des nombres toujours aléatoire

Résolu
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 - 1 janv. 2013 à 18:54
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 4 janv. 2013 à 11:42
Bonsoir,

Je coince sur ce code, je ne comprends pas pourquoi c'est toujours les mêmes nombres
qui sortes alors que tous se passe bien dans ma fonction à première vue
Module Module1

    Function Random(ByVal Minimum As Single, ByVal Maximum As Single) As Single

        Dim TableauNombreAleatoire As New LinkedList(Of Single)
        Dim Aléatoire As New Random
        Dim NombreAleatoire As Single = 0
        Dim Difference As Integer = 0
        Dim Interupteur As Integer = 0

        For Nombre As Integer = Minimum To Maximum - 1 Step 1
            Difference += 1
        Next

        ' Remplissage de la liste de nombre aléatoire
        For Remplissage As Integer = 1 To Difference

            Do
                NombreAleatoire = Aléatoire.NextDouble() * Maximum + Minimum
            Loop Until NombreAleatoire >= Minimum And NombreAleatoire <= Maximum

            Interupteur = Aléatoire.NextDouble()

            If Interupteur = 0 Then
                NombreAleatoire += -NombreAleatoire - NombreAleatoire
            End If

            TableauNombreAleatoire.AddLast(NombreAleatoire)

        Next

        Return TableauNombreAleatoire(Aléatoire.NextDouble() * Difference)

    End Function

    Sub Main()

        For Aléatoire As Integer = 1 To 25
            Console.WriteLine("Le nombre aléatoire est = à: " & Random(-10, 10))
        Next

        Console.ReadLine()

    End Sub

End Module


De plus, je ne comprends même pas le système du random:
NombreAleatoire = Aléatoire.NextDouble() * Maximum + Minimum

Pour moi, ça devrais renvoyer un nombre entre 0 et 1 vue que la fonction retourne un nombre aléatoire entre 0.0 et 1.0 si j'ai bien suivis
Donc met-on que ça retourne 1, 1 * Maximum (qui est à 10) 10 + Minimum (qui est à = -10) = 0 car 10 + -10 = 0, le totale est donc 1
met-on que ça retourne 0, 0 * Maximum (qui est à 10) 0 + Minimum (qui est à = -10) = 0 car 0 + -10 = -10, le totale est donc -10

Au faite: je cherche à générer des nombre vraiment aléatoire, je veux dire que jamais les même séquence de nombre serais pareil
c'est pour ça que je crée une liste que je remplie de nombre aléatoire entre X et X puis que je choisie dans cette même liste
un élément aléatoirement pour en fin de compte crée ce fameux nombre aléatoire !

Je ne sais pas si je m'y prends bien, d'ailleurs je pense que non
La fonction Random retourne t-elle des nombre vraiment 100% aléatoire, car j'ai crue comprendre que non justement !

Bref, j'y comprends plus rien moi
Mes excuses d’avance pour ce bazar !

60 réponses

Utilisateur anonyme
2 janv. 2013 à 00:05
Je répondais à EhJoe.

Tu peux faire comme ceci simplement :
Option Strict On
Module Module1
    Dim Rand As New Random
    Sub Main()
        Do
            For x = 0 To 25
                Console.WriteLine(Aleatoire)
            Next
            Console.WriteLine("q pour quitter, autre touche pour refaire...")
            If Console.ReadLine = "q" Then Exit Do
        Loop
    End Sub

    Function Aleatoire() As Integer
        Return Rand.Next(-10, 10)
    End Function

End Module
3
Utilisateur anonyme
2 janv. 2013 à 00:27
Bien que Random fournit déjà des nombres aléatoires mais que tu tiens quand même à piocher un numéro dans une liste, tu peux faire comme ceci :
Option Strict On
Module Module1
    Dim Rand As New Random
    Dim MaListe As New List(Of Integer)

    Sub Main()
        For x = 0 To Rand.Next(100)
            MaListe.Add(Rand.Next(-10, 10))
        Next
        Dim alea As Integer = Rand.Next(0, MaListe.Count)
        Console.WriteLine("MaListe contient " & MaListe.Count.ToString & " éléments")
        Console.WriteLine("Je choisis maintenant le " & alea & " ème élément qui est : " & MaListe(alea).ToString)
        Console.ReadLine()
    End Sub
End Module
3
Utilisateur anonyme
2 janv. 2013 à 17:57
L'instance du générateur Random doit se faire comme montré sur mon code et non pas dans ta fonction sinon,comme le précise msdn, tu obtiendras effectivement les mêmes chiffres.
Je cite msdn :
Pour améliorer les performances, créez un Random de manière à générer une large quantité de nombres aléatoires dans le temps, au lieu de créer un nouveau Random de façon répétée pour générer un nombre aléatoire.
3
Utilisateur anonyme
2 janv. 2013 à 22:40
Salut ShayW,

Si tu regardes tous les codes du demandeur, Random est placé à l'intérieur d'une boucle. Ce qui fait qu'il obtient toujours les mêmes nombres sauf au changement de l'heure système comme ici :
Sub Main()
     For x As Integer = 0 To 10
         Dim rand As New Random
         Console.WriteLine(rand.Next(-10, 10))
     Next
     Console.ReadLine()
 End Sub


Mais écrit comme ceci, tout change et on a bien des nombres aléatoires :

Sub Main()
    Dim rand As New Random
    For x As Integer = 0 To 10
        Console.WriteLine(rand.Next(-10, 10))
    Next
    Console.ReadLine()
End Sub
3

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 235
3 janv. 2013 à 08:29
Bonjour,
Ba faut quand même des doublon c'est utile quand même mais pas trop quoi

"Pas trop" n'étant pas une grandeur, à combien l'estimes-tu ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
Utilisateur anonyme
1 janv. 2013 à 19:27
Bonjour,

Commence par activer Option Strict dans les propriétés de ton projet. Puis corrige les erreurs.
Random.NextDouble génère des nombres compris entre 0 et 1. Si, comme tu le fais, tu multiplies un double converti en integer tu auras soit 0 soit 1.
ce qui fausse complètement ton résultat.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 6
1 janv. 2013 à 19:28
Bonjour,

' Nombre pseudo aléatoires
' Nombre entiers entre maxi et mini avec un pas de 1
Dim hasard As Integer
Randomize
hasard = Int((maxi - mini + 1) * Rnd + mini)


Cordialement Joe.
0
Utilisateur anonyme
1 janv. 2013 à 19:31
Bonjour EhJoe,

Randomize et Int sont obsolètes ou deprecated comme on dit chez bilou.
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
1 janv. 2013 à 19:48
Bonsoir Dayvid

cela serait beaucoup mieux pour toi d'essayer
d'écrire ton propre code
enfin fais comme tu veux
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
1 janv. 2013 à 19:58
cela serait beaucoup mieux pour toi d'essayer
d'écrire ton propre code
enfin fais comme tu veux

Ba oui mais crée un nombre aléatoire et puis le code est 100% de moi là hein, je le confirme !
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
1 janv. 2013 à 21:13
et puis le code est 100% de moi là hein, je le confirme !


il a l'air compliqué
peux tu expliquer ce que tu veux faire ?
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 6
1 janv. 2013 à 21:26
Bonjour Banana 32,

Et quel code utilises-tu donc désormais, peux-tu me faire un exemple sur la base d'un nombre de type Integer positif entier avec minimum et maximum ?


' exemple fictif
Dim x as integer
x = genere_aleatoire(entier, integer, positif, 2 to 101)


???

Merci, cordialement. Joe.
0
Utilisateur anonyme
1 janv. 2013 à 22:00
Pour EhJoe :

Voici un simple affichage d'un entier aléatoire compris entre -10 et 10
MessageBox.Show(New Random().Next(-10, 10).ToString)
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
1 janv. 2013 à 23:46
J'ai dis que:
Au faite: je cherche à générer des nombre vraiment aléatoire, je veux dire que jamais les même séquence de nombre serais pareil
c'est pour ça que je crée une liste que je remplie de nombre aléatoire entre X et X puis que je choisie dans cette même liste
un élément aléatoirement pour en fin de compte crée ce fameux nombre aléatoire !

Et moi il marche pas ton code la "MessageBox.Show"
Sinon, je suis bluffer
Bin, je suis tous nouveau hein alors je sais pas tous, le but du forum n'est t-il pas justement d'aider les gents débutant comme moi ?!
Bien sur que si
Je cherche à crée des nombre vraiment aléatoire, je ne veux pas que les séquence de nombre se répète
Je veux crée des nombre vraiment aléatoire !
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
1 janv. 2013 à 23:48
Je sais, je radote, je suis très très vieux, 27 balais, c'est énorme pour un pauvre type comme moi car j'ai 5 ans d'âge mentale des fois
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
1 janv. 2013 à 23:54
C'est sur que mon code c'est du bourrin tous ça pour quedale
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
2 janv. 2013 à 00:00
Alors pourquoi se foutue code ne marche pas, pourquoi toutes les nombre son pareil
C'est quoi se bordel
Module Module1

    Sub Main()

        For i = 1 To 24
            Console.WriteLine(New Random().Next(-10, 10).ToString)
        Next

        Console.ReadLine()

    End Sub

End Module
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
2 janv. 2013 à 00:18
Merci beaucoup Banana32

Puis-je te demander si cella n'est pas trop déplacer de bien vouloir me faire voir comment je peut crée
des nombre aléatoire comme dans mon premier code:

Remplir une liste de X nombre aléatoire entre le Minimum et le Maximum, le nombre (X) peut être lui même aléatoire
sa veux dire que le nombre de nombre aléatoire dans la liste peut lui même être aléatoire

Ensuite tu pioche un élément aléatoirement dans la liste et tu le retourne
c'est se que j'ai voulue faire mais j'y arrive pas

De cette façon, j’espérais crée des nombre vraiment aléatoire mais je ne sais pas si c'est la bonne méthode.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
2 janv. 2013 à 00:50
Merci beaucoup Banana32
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013
2 janv. 2013 à 11:39
Bon, j'ai fais ça mais ça marche pas encore, je comprends pas
Option Strict On

Module Module1

    Function Random(Minimum As Single, Maximum As Single) As Single

        Dim GéstionnaireAléatoire As New Random
        Dim MaListe As New List(Of Single)

        For Remplissage = 1 To GéstionnaireAléatoire.Next(100)
            MaListe.Add(GéstionnaireAléatoire.Next(CInt(Minimum), CInt(Maximum)))
        Next

        Return MaListe(GéstionnaireAléatoire.Next(0, MaListe.Count))
    End Function

    Sub Main()

        For i = 1 To 24
            Console.WriteLine(Random(-10, 10))
        Next

        Console.ReadLine()

    End Sub

End Module
0