Générer des nombres toujours aléatoire [Résolu]

cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 1 janv. 2013 à 18:54 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 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 !
Afficher la suite 

Votre réponse

60 réponses

Meilleure réponse
Utilisateur anonyme - 2 janv. 2013 à 00:05
3
Merci
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

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
Utilisateur anonyme - 2 janv. 2013 à 00:27
3
Merci
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

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
Utilisateur anonyme - 2 janv. 2013 à 17:57
3
Merci
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.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
Utilisateur anonyme - 2 janv. 2013 à 22:40
3
Merci
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

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 3 janv. 2013 à 08:29
3
Merci
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.

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de ucfoutu
Utilisateur anonyme - 1 janv. 2013 à 19:27
0
Merci
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.
Commenter la réponse de Utilisateur anonyme
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 1 janv. 2013 à 19:28
0
Merci
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.
Commenter la réponse de ehjoe
Utilisateur anonyme - 1 janv. 2013 à 19:31
0
Merci
Bonjour EhJoe,

Randomize et Int sont obsolètes ou deprecated comme on dit chez bilou.
Commenter la réponse de Utilisateur anonyme
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 1 janv. 2013 à 19:48
0
Merci
Bonsoir Dayvid

cela serait beaucoup mieux pour toi d'essayer
d'écrire ton propre code
enfin fais comme tu veux
Commenter la réponse de cs_ShayW
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 1 janv. 2013 à 19:58
0
Merci
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 !
Commenter la réponse de cs_dayvid
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 1 janv. 2013 à 21:13
0
Merci
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 ?
Commenter la réponse de cs_ShayW
ehjoe 728 Messages postés samedi 4 avril 2009Date d'inscription 30 mars 2014 Dernière intervention - 1 janv. 2013 à 21:26
0
Merci
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.
Commenter la réponse de ehjoe
Utilisateur anonyme - 1 janv. 2013 à 22:00
0
Merci
Pour EhJoe :

Voici un simple affichage d'un entier aléatoire compris entre -10 et 10
MessageBox.Show(New Random().Next(-10, 10).ToString)
Commenter la réponse de Utilisateur anonyme
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 1 janv. 2013 à 23:46
0
Merci
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 !
Commenter la réponse de cs_dayvid
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 1 janv. 2013 à 23:48
0
Merci
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
Commenter la réponse de cs_dayvid
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 1 janv. 2013 à 23:54
0
Merci
C'est sur que mon code c'est du bourrin tous ça pour quedale
Commenter la réponse de cs_dayvid
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 2 janv. 2013 à 00:00
0
Merci
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
Commenter la réponse de cs_dayvid
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 2 janv. 2013 à 00:18
0
Merci
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.
Commenter la réponse de cs_dayvid
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 2 janv. 2013 à 00:50
0
Merci
Merci beaucoup Banana32
Commenter la réponse de cs_dayvid
cs_dayvid 212 Messages postés mardi 18 janvier 2011Date d'inscription 12 février 2013 Dernière intervention - 2 janv. 2013 à 11:39
0
Merci
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
Commenter la réponse de cs_dayvid

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.