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 - 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 !
A voir également:

60 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 janv. 2013 à 13:27
Bonjour

Bon, j'ai fais ça mais ça marche pas encore, je comprends pas


c'est à dire ?
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 13:29
Et ba si tu essaye, tu verra que c'est encore les même nombre qui sorte !
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 13:36
En faite ya un soucis quelque part car même comme ça, ça ne marche pas:
Option Strict On

Module Module1

    Sub Main()

        For i = 1 To 12
            Dim Rand As New Random
            Dim MaListe As New List(Of Integer)

            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)
        Next

        Console.ReadLine()

    End Sub
End Module
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
2 janv. 2013 à 13:45
Bonjour dayvid,

Faut dire que tu fais pas au plus classique et simple (module + fonction + console + vbNet 1789)...

Pourquoi tu ne prends pas une form (comme tout le monde), et que tu ne fais pas ça dans une procédure...

Mets-toi en vb12 et ouvres un nouveau programme pour y mettre ce code testé qui fonctionne avec deux objets (form1 et listbox1) :

Pour la génération, je conserve mon code, le trouvant mieux à mon goût...

Sinon, ce ne sont pas des nombres aléatoires, ça ne se pourrait ainsi, ce sont des pseudo-aléatoires.


Option Explicit On
Public Class Form1
Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim hasard As Integer = 0
    Dim i As Integer = 0
    Dim mini As Integer = 1
    Dim maxi As Integer = 99
    ListBox1.Items.Clear()
    Do While ListBox1.Items.Count < 25 ' 25 numéros
      Randomize()
      hasard = Int((maxi - mini + 1) * Rnd() + mini)
      For i = 0 To ListBox1.Items.Count - 1 ' rejette les doublons
        If ListBox1.Items(i) = hasard Then Continue Do
      Next i
      ListBox1.Items.Add(hasard) ' on prend dans l'odre de la liste, c'est tout.
    Loop
  End Sub
End Class


Cordialement, Joe.
0

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

Posez votre question
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 13:45
Bon, j'en appel à vous svp, me dire se qui cloche là car moi j'en perd mon latin et ça m’énerve !
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 13:51
Bonjour EhJoe

Merci pour ton aide !

Je suis tous nouveau et j’apprends tous juste le VB donc oui, moi je fais avec se que je connais voilà tout !
Quand j'ai un truc en tête, je vais jusqu'au bout tu vois

C'est pourtant pas compliquer de faire se que je veux faire mais j'arrive pas, se foutue code ne marche pas
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 janv. 2013 à 13:55
et qui te promet que tu n'obtiens pas le meme
nombre

pour chaque iteration de i
tu as une liste de x nombres rempli de valeur
aléatoire
disons 4 nombres
0 -10 3 -7
alea choisi un nombre parmis malist
disons 3
tu affiches le résultat
à la prochaine itération tu peux obtenir le meme
résultat ou encore
une liste différente
1 -4 5 6 9 3 7
et alea te donne 3
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 13:55
Pourquoi tu ne prends pas une form (comme tout le monde), et que tu ne fais pas ça dans une procédure...

Heu... faut commencer simple hein
Form, trop tôt pour moi voilà tout !
Mets-toi en vb12 et ouvres un nouveau programme pour y mettre ce code testé qui fonctionne avec deux objets (form1 et listbox1) :

Pas réussi à le faire marche
VB12, berk, quel horreur, j'ai essayer mais j'ai crue que j’allais mourir tellement il est moche
Moi, si mon environnement de programmation ne me plais pas, alors je ne programme pas
Je reste en VB10 car il est sympathique comme style et moi j'aime beaucoup !
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 13:58
Excuse-moi ShayW mais j'ai rien compris
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
2 janv. 2013 à 14:03
dayvid, suite...


...
Moi, si mon environnement de programmation ne me plais pas, alors je ne programme pas
...


Ok, alors joyeux Noël, je débranche

Cordialement, Joe.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 janv. 2013 à 14:17
Excuse-moi ShayW mais j'ai rien compris

pas possible
j'ai tout simplement essayer d'expliquer ton code
essaie de le faire toi meme
tu lances ton prog sans le lancer tu joues le role de l'ordinateur et avec une feuille et un stylo tu éxécutes ton code
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 14:31
Ok, alors joyeux Noël, je débranche

Cella veux dire quoi ?!

essaie de le faire toi meme
tu lances ton prog sans le lancer tu joues le role de l'ordinateur et avec une feuille et un stylo tu éxécutes ton code

Oui je comprends se que tu veux dire, merci
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 18:18
Ah ok, seulement, comment dois-je faire dans mon cas car même avec ton code répété, ça marche pas !
Merci.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 18:23
Hum, je pense que je viens de comprendre se que tu veux dire, en faite il faut faire une seule fois
Dim Rand As New Random

Et les commandes qui vont avec, je vais essayer de faire autrement alors.
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 20:46
Ba en faite, ça, ça marche, comprends rien moi

Option Strict On

Module Module1

    Sub Main()

        Dim Rand As New Random
        Dim MaListe As New List(Of Integer)

        For i = 1 To 12

            MaListe.Clear()

            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)
        Next

        Console.ReadLine()

    End Sub
End Module
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 janv. 2013 à 21:06
ce n'est pas la peine de jongler avec les
random

une fonction qui te rend une liste de nombre
différent

 Private Function GetRandomNumber(ByVal nombre As Integer) As List(Of Integer)
        Dim list1 As New List(Of Integer)
        Dim rd As New Random
        Dim x As Integer = rd.Next(-nombre, nombre)
        For iter As Integer = 0 To nombre - 1
            Do Until Not list1.Contains(x)
                x = rd.Next(-nombre, nombre)
            Loop
            list1.Add(x)
        Next
        Return list1
    End Function
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 janv. 2013 à 22:51
Salut Banana32

For x As Integer = 0 To 10
        Console.WriteLine(rand.Next(-10, 10))
    Next


a t'on 100 % de chance d'obtenir différents nombres ?
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 22:52
Exacte, c'est se que j'ai fais et ça marche !!!
Merci bien !
0
Utilisateur anonyme
2 janv. 2013 à 23:06
a t'on 100 % de chance d'obtenir différents nombres ?

Tu auras forcément des nombres qui vont se répéter puisqu'il s'agit de nombres aléatoires. A toi de gérer les doublons :
If not MaListe.contains(MonChiffre) then MaListe.Add(MonChifrre)
0
cs_dayvid Messages postés 212 Date d'inscription mardi 18 janvier 2011 Statut Membre Dernière intervention 12 février 2013 1
2 janv. 2013 à 23:22
Ba faut quand même des doublon c'est utile quand même mais pas trop quoi
0
Rejoignez-nous