begin process at 2008 08 22 06:08:47
1 229 779 membres
50 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FONCTION VRAIMENT ALÉATOIRE


Information sur la source

Catégorie :Maths Classé sous : hasard, aléatoire, probabilités, simulation Niveau : Débutant Date de création : 25/02/2006 Vu / téléchargé: 9 077 / 509

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (32)
Ajouter un commentaire et/ou une note

Description

Comme vous le savez la fonction Random que propose Visual Basic n'est pas réellement aléatoire, c'est un algorithme qui respecte la loi des grands nombres. La raison est que faire une fonction qui retourne un nombre de façon aléatoire est très compliqué.
Voici une fonction qui renvoie un nombre qui est réellement imprévisible, l'astuce:utiliser le temps...

Source

  • 'Fonction générant le nombre aléatoire-------------------------'
  • Public Function Alea() As Double '
  • '
  • TempAlea = "0," 'comme rnd, 0<Alea<1, par conséquent seules les décimales importent
  • '
  • For k = 0 To 9 'il y a 10 décimales '
  • Call QueryPerformanceCounter(TimeStart) '
  • Randomize '
  • For i = 0 To 100000 * Rnd '
  • Next i '
  • 'action qui ralenti le processus (d'une facon psudo-aléatoire) '
  • Call QueryPerformanceCounter(TimeStop) '
  • '
  • Calctps = CStr(TimeStop - TimeStart) / Frequency * 1000 '
  • 'Nous avont ainsi un temps d'execution qui sera toujours différent
  • '
  • Randomize '
  • TempAlea = TempAlea & "" & Mid$(Calctps, 13 * Rnd + 3, 1) & "" '
  • Next k '
  • '
  • Alea = TempAlea 'Alea devient non pas une chaine mais un nombre à virgules
  • '
  • End Function '
  • '--------------------------------------------------------------'
'Fonction générant le nombre aléatoire-------------------------'
Public Function Alea() As Double                               '
                                                               '
TempAlea = "0," 'comme rnd, 0<Alea<1, par conséquent seules les décimales importent
                                                               '
For k = 0 To 9 'il y a 10 décimales                            '
          Call QueryPerformanceCounter(TimeStart)              '
Randomize                                                      '
For i = 0 To 100000 * Rnd                                      '
Next i                                                         '
'action qui ralenti le processus (d'une facon psudo-aléatoire) '
          Call QueryPerformanceCounter(TimeStop)               '
                                                               '
Calctps = CStr(TimeStop - TimeStart) / Frequency * 1000        '
'Nous avont ainsi un temps d'execution qui sera toujours différent
                                                               '
Randomize                                                      '
TempAlea = TempAlea & "" & Mid$(Calctps, 13 * Rnd + 3, 1) & "" '
Next k                                                         '
                                                               '
Alea = TempAlea 'Alea devient non pas une chaine mais un nombre à virgules
                                                               '
End Function                                                   '
'--------------------------------------------------------------'

Conclusion

La fonction est dans le zip accompagnée d'un programme qui permet de vois si la loi des grands nombres est vérifiée. C'est le cas mais beaucoup moins bien qu'avec la fonction Random.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

  • signaler à un administrateur
    Commentaire de Elektordi le 26/02/2006 01:01:46

    Plutot que de perdre du temps (ralentir le processus) tu peut te servir du nombre précédant généré (que tu stocke ds une var statique ou publique) pour avoir des nombres tjrs différents...

    (exemple:

    Alea = TempAlea
    if OldAlea = Alea then
       Alea = Alea + OldAlea
       if Alea > 1 then Alea = Alea -1
    end if
    OldAlea = Alea

    )

  • signaler à un administrateur
    Commentaire de Egyde le 26/02/2006 09:40:25

    Random utilise l'arithmétique des congruences. La valeur pseudo-aléatoire obtenue dépend de la "graine" du générateur, qu'il est possible d'initialiser selon l'heure du système par Randomize Timer...

  • signaler à un administrateur
    Commentaire de bouv le 26/02/2006 11:47:30

    Oui, je vois pas ce que cela a de plus aléatoire qu'un simple :
    Randomize
    Rnd
    Puisque c'est bien c'est deux fonctions que tu utilise. Tes petits tours de passe-passe ne servent pas à grand chose à mon avis.
    Si tu veux une fonction VRAIMENT aléatoire il te faudra reprogrammer Randomize et Rnd.

  • signaler à un administrateur
    Commentaire de Julien39 le 26/02/2006 13:12:15

    Regarde mieux le code et demande toi si c'est aléatoire ou non puis, si tu trouves que sa ne l'est pas dit le moi et je t'expliquerai pourquoi tu te trompes...

  • signaler à un administrateur
    Commentaire de Egyde le 26/02/2006 15:50:03

    Julien39>Je crois que c'est plutôt à toi de prouver le caractère "aléatoire". Pas l'inverse! C'est à TOI de montrer la valeur ajoutée de ton code par rapport à un simple Randomize Timer+Rnd. Tu as des résultats sous la main? Chi-2 ou Kolgomorov peut-être? Je veux dire, c'est pas parce que Windaube est multi-tâche (je pense à ta boucle For...) que statistiquement, les valeurs que tu obtiens sont uniformément distribuées.

  • signaler à un administrateur
    Commentaire de bouv le 26/02/2006 17:00:02

    Je confirme, ce code n'apporte rien de plus.

    'On se demande pourquoi faire
    For i = 0 To 100000 * Rnd
    Next i

    De plus on l'as dit et répéter au moins 1000 fois : Il est inutile d'appeler Randomize 50 fois (20 fois désolé...).
    Une fois au lancement du programme suffit !

    Je me repête si tu veux une fonction VRAIMENT aléatoire reprogramme les fonctions Randomize et Rnd.

  • signaler à un administrateur
    Commentaire de Julien39 le 26/02/2006 20:49:24

    La fonction n'apporte rien de plus que la fonction par défaut.
    Mais nous sommes dans la catégorie Mathématiques et non Modules, je m'explique : pour un programme ne vous en servez pas, elle est moins pratique et moins rapide. Mais au niveau mathématiques il est interresant de voir comment programmer une fonction donne un nombre qui est réelement aléatoire.

    Le fait qu'il soit aléatoire, je ne m'attendais pas à devoir le prouver, c'est relativement simple, on a 2 API qui donne un temps de procédure, les liges For i = 0 To 100000 * Rnd
                            Next i
    servent à faire varier ce temps mais ne sont pas indispenssables, ensuite on choisit chaque décimale une à une de facon pseudo-aléatoire, ainsi on obtient une fonction aléatoire.

    Une démonstration Mathématique rigoureuse, je n'en voit pas, il faudrait démontrer qu'il n'existe aucune suite de réels reliant les différents nombres générés, c'est très compliqué, c'est comme vouloir démontrer qu'il n'existe aucune suite reliant les différents résultats d'une épreuve de lancé de dé.

    Nous sommes obligés de nous satisfaire de démonstrations qui ne sont pas totalement satisfaisantes. Même les test Chi-2 ou Kolmogorov ne sont pas rigoureux, pour le premier, on admet que la fonction est aléatoire si elle répond à certaines conditions, pour le deuxime, c'est un théoreme qui n'est pas une équivalence, on a SI la variables est aléatoire ALORS la somme...... La deuxieme partie ne prouve pas la premiere mais peut donner des soupcons.
    J'ai préferé quelque chose de plus simple la vérification des loi de probabilités ce n'est pas rigoureux mais c'est suffisant je pense.

    pour la phrase "reprogramme les fonctions Randomize et Rnd" c'est exactement ce que je fais ????

  • signaler à un administrateur
    Commentaire de bouv le 26/02/2006 21:06:31

    Je ne dis pas que l'idée n'est pas bonne. Mais ce qui me gêne, c'est le terme VRAIMENT dans le titre de ta source. Il laisse supposé que les fonctions Randomize et Rnd ne le sont PAS VRAIMENT.
    De plus tu utilises ces 2 fonctions dans ta source.
    Le résultat attendu est là et c'est très bien, mais...
    Bref je pense que tu as compris où je veux en venir.

  • signaler à un administrateur
    Commentaire de Julien39 le 26/02/2006 21:49:44

    Les fonctions Randomize et Rnd ne sont effet pas vraiment aléatoires parce que régies par un algorithme.

    Le fait que je les utilise importe peu car le code n'est pas basé là dessus, je ne l'explique pas plus, il me semle que c'est assez clair dans la source mais si ce n'est pas le cas dites le moi.
    J'ai beaucoup hésité à utiliser Rnd parce que cette utilisation pouvait porter à confusion, je me demande si je ne ferait pas mieux de retirer cette fonction du code...

  • signaler à un administrateur
    Commentaire de UniCyclon le 27/02/2006 12:23:40

    Clairement pas d'accord.
    Déjà, qu'est-ce qu'une fonction réellement aléatoire ? Pour ma part c'est une fonction qui renvoie un nombre X d'un ensemble E choisi au hasard, chaque sortie étant strictement équiprobable. Or il a déjà été démontré mathématiquement qu'il est idiot de demander à un ordinateur de choisir un nombre aléatoire au sens le plus strict du terme. Une des méthodes les plus efficaces est d'obtenir l'heure exacte en microsecondes et d'y appliquer quelques transformations pour garantir une certaine imprédictabilité.

    Or, de façon mathématique, il est trivial de démontrer qu'un algorithme basé sur des fonctions pseudo-aléatoires est nécessairement pseudo-aléatoire, et non aléatoire. Au final, je peux te dire que ton algorithme n'est pas équiprobable, et est loin de l'être, et de plus présente une lourdeur non négligeable à l'utilisation dans un programme ayant pour objectif d'être un minimum optimisé.

    Maintenant, je te mets au défi de prouver mathématiquement que ton algorithme est plus aléatoire que celui du compilateur VB.
    Tant que tu ne l'auras pas fait, je ne vois aucune raison de l'utiliser en raison de sa lourdeur.

  • signaler à un administrateur
    Commentaire de Julien39 le 27/02/2006 14:12:33

    - "Maintenant, je te mets au défi de prouver mathématiquement que ton algorithme est plus aléatoire que celui du compilateur VB"

    <MSDN> Remarque sur la sécurité   Du fait que l'instruction Random et que la fonction Rnd commencent par une valeur initiale et créent des nombres compris dans une plage finie, les résultats peuvent être prévus par toute personne connaissant l'algorithme utilisé pour les créer. L'instruction Random et la fonction Rnd ne doivent donc pas être utilisées pour créer des nombres aléatoires qui seront utilisés en cryptographie.

    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vblr7/html/vafctrnd.asp

    Par exemple la fonction Randomize(1) Msgbox(Rnd) donne les valeurs
    0,7648737
    0,6820141
    0,4617513
    ........
    Si elles sont différentes chez vous, vous pourrez observer qu'elles sont malgré tout toujours identiques quand vous relancer l'application.

    La question que je vous pose est "Peut on observer la même chose dans mon programme ?"
    En bonus je vous donne la réponse NON.
    CONCLUSION : mon programme retourne une valeur qui est plus aléatoire que la fonction par défaut.

    Je te déconseille malgré tout de l'utiliser pour tes programmes car elle est bien trop lourde et moins pratique que la fonction classique.

    - "Au final, je peux te dire que ton algorithme n'est pas équiprobable"
    Je suis d'accord pour une centaine d'essais j'ai trouvé des proportions très déséquilibrées, mais je ne sais pas si l'algorithme est équiprobable car il faut tester avec de très grands nombres.
    Assez de mauvaise foie, c'est vrai que c'est pas top, mais la comparaison avec la fonction Rnd est à l'avantage du second qui étant programmé pour sortira toujours des valeurs équiprobables.

    - "il est trivial de démontrer qu'un algorithme basé sur des fonctions pseudo aléatoires est nécessairement pseudo aléatoire"
    Je suis d'accord mais toutes les fonctions que j'utilise ne sont pas pseudo aléatoires.

    - "il est idiot de demander à un ordinateur de choisir un nombre aléatoire au sens le plus strict du terme"
    Cette assertion n'a pas été démontrée à ma connaissance, on peut le dire mais ce n'est qu'une intuition non une démonstration. On peut dire de même qu'il est idiot de chercher un nombre aléatoire car rien n'est aléatoire, même un lancé de dé, s'il est aléatoire c'est que nous sommes incapables de prévoir quel chiffre va sortir. En réalité le hasard n'existe pas. Mais là nous sommes plus proches de la philosophie que des mathématiques.

  • signaler à un administrateur
    Commentaire de UniCyclon le 27/02/2006 14:57:56

    Le hasard mathématique existe. Le hasard pratique non.
    Et je t'en prie, trouve-moi une fonction utilisée dans ton programme qui soit totalement aléatoire.

    Et une démonstration mathématique existe pour prouver que jamais une machine ne pourra donner un nombre choisi parmi un ensemble avec une équiprobabilité parfaite. Je l'ai assez étudiée pour te l'assurer.

  • signaler à un administrateur
    Commentaire de Julien39 le 27/02/2006 15:04:59

    La fonction totalement aléatoire est celle qui donne une décimale du temps d'execution de la procédure.

    Pour la démonstration  que jamais une machine ne pourra donner un nombre choisi parmi un ensemble avec une équiprobabilité parfaite je l'accepte si tu le dis.

    Par conséquent ma fonction n'est pas totalement aléatoire je te l'accorde.

  • signaler à un administrateur
    Commentaire de Egyde le 27/02/2006 15:30:54

    Julien39>Concernant les propos que tu as tiré de MSDN, il est clair qu'un algorithme déterministe peut toujours être prédit.

    Dans ton exemple, Randomize(1) suivi de Rnd te renverra effectivement toujours les valeurs que tu as obtenu. C'est un principe de base des générateurs de ce type (voir
    http://www.apprendre-en-ligne.net/random/congrulin.html)

    Là où je voulais en venir précédemment, c'est que "Randomize Timer" initialise le générateur en prenant pour "germe" la valeur courante de l'horloge. Dans ce cas, à chaque exécution de ton programme, tu obtiendras une séquence différente. Pourquoi donc s'embêter avec ton code (d'autant qu'il ne marche pas en l'état : QueryPerformanceCounter n'est pas déclaré et si on en croit la déclaration de cette API, "TimeStop - TimeStart" est la différence de 2 LARGE_INTEGER, ce que VB ne sait pas faire tout seul).

  • signaler à un administrateur
    Commentaire de Egyde le 27/02/2006 15:55:13

    J'ai trouvé ça qui devrait t'interesser julien39 :

    http://www.pscode.com/vb/scripts/ShowCode.asp?lngWId=1&txtCodeId=58875

    Y'a pas de boucle For comme toi mais je te laisse constater que le principe est le même. Lis bien les commentaires en fin de page, c'est très interessant.

  • signaler à un administrateur
    Commentaire de bouv le 27/02/2006 16:11:56

    Je sais pas comment vous faites les gars :

    "Si elles sont différentes chez vous, vous pourrez observer qu'elles sont malgré tout toujours identiques quand vous relancer l'application"

    FAUX et ARCHI-FAUX.
    Faites des tests avant d'avancer un truc pareil.

    La suite est la même uniquement si on ne commence pas le prog par un Randomize.

    Prenez un feuille mettez un ListBox et placez ce code
    Private Sub Form_Load()
        Dim i As Integer
        Randomize
        For i = 0 To 10
            List1.AddItem Rnd
        Next i
    End Sub
    Lancez plusieurs fois vous verrez.

    Attention je me repettes mais Randomize ne doit être appeler qu'une seule fois au lancement du programme. Si vous utilisez de nouveau Rnd par la suite il ne faut pas rappeler Randomize !
    Le mieux est de commencer le programme par un module (Sub Main) et d'appeler Randomize une fois pour toutes !!!

  • signaler à un administrateur
    Commentaire de bouv le 27/02/2006 16:21:47

    PS : Ne confondez pas aléatoire et equiprobable.

    "La fonction totalement aléatoire est celle qui donne une décimale du temps d'execution de la procédure"
    => VRAI c'est aléatoire puisque cela depend de la machine, des autres processus qui tournent en même temps.

    Est-ce équiprobable ?
    =>FAUX puisqu'il faudrait définir une intervalle (meilleur exemple : zero ne sera jamais renvoyé) et que de toute façon les resultat se concentreront sur la moyenne.

  • signaler à un administrateur
    Commentaire de Sebast91 le 27/02/2006 16:37:13

    Bonjour,

    encore une querelle de mathématiciens.

    Mais pourquoi ?

    Quel que soit le langage et donc le compilateur ou interpréteur, la fonction de génération doit être déterministe.
    Heureusement pour les informaticiens ! Comment reproduire une situation si l'aléatoire "vraiment aléatoire" intervenait !

    Tout ceci pour dire qu'il y a un malentendu sur le besoin initial:
    Ce programme essaye de nous proposer une solution d'un point de vu mathématique qui ne convient pas aux informaticiens, tandis que la fonction par défaut convient aux informaticiens car déterministe mais pas aux mathématiciens.

    Le monde des mathématiques et de l'informatique semblent proches mais les besoins et les objectifs ne sont pas les mêmes.

  • signaler à un administrateur
    Commentaire de Egyde le 27/02/2006 17:48:53

    Bouv>Si tu relis bien l'exemple de julien39, tu verras que la syntaxe est : Randomize(1) puis Rnd, ce qui a pour effet d'utiliser 1 pour seed du générateur Rnd. Dans ce cas, séquence identique si tu relances le prog! Donc, je te renvoi la balle :

    VRAI et ARCHI-VRAI.
    Test toi-même et tu verras!!

    D'autre part, si tu mets pas Randomize, Rnd utilise la valeur précédemment généré pour seed. Avec Randomize, tu changes de seed à chaque appel. Et alors??? C'est plutôt positif tout ça :)

  • signaler à un administrateur
    Commentaire de Egyde le 27/02/2006 18:06:20

    Je précise que "Randomize" (sans arguments) est équivalent à "Randomize Timer", ce qui explique qu'en relançant ton prog, tu n'obtiennes pas la même séquence. Maintenant, tu sais le pourquoi du comment du kicékikafékoi...

  • signaler à un administrateur
    Commentaire de Gobillot le 27/02/2006 18:20:20

    pas tout à fait
    Randomze(1) modifie le seed mais ne donne pas 1 pour seed
        Randomize 1:  MsgBox Rnd
        Randomize 1:  MsgBox Rnd
    donne 2 valeurs différentes

    pour réinitialiser le seed il faut un nombre négatif:
        Rnd -1234

    à partir d'un seed donné (graine) tous les Rnd() qui suivent donne la même suite. 1677216 valeurs possibles ni plus ni moins.



  • signaler à un administrateur
    Commentaire de bouv le 27/02/2006 18:23:18

    Ouai effectivement j'ai survolé le code trop rapidement...
    En fait je ne pensais pas que quelqu'un se servait de se parametre. Mais tu as bien fait de me reprendre.

    Cela dit, lorsque je fais un Randomize Timer, qui peux prétendre qu'il est capable de determiner à l'avance qu'elle sera la suite des valeurs obtenues ???

  • signaler à un administrateur
    Commentaire de Gobillot le 27/02/2006 18:43:11

    à part la première valeur, oui, on peut retrouver toutes les valeurs qui suivent.
    seul un Randomize (ou un Rnd négatif) peut briser la séquence
    le premier seed de départ toujours le même pour tout le monde est 327680

    fonction de la forme: (X0 * A * C) / M

    X0 = 327680
    A = 1140671485
    C = 12820163
    M = 16777216

    la partie entière sert de nouveau seed
    la partie décimale est le Rnd()

    Randomize modifie la valeur X0, mais je sais pas comment.

  • signaler à un administrateur
    Commentaire de Gobillot le 27/02/2006 18:47:27

    correction:
    désolé  C est une constante:

    (X0 * A + C) / M

  • signaler à un administrateur
    Commentaire de crenaud76 le 27/02/2006 23:52:11

    Pour conclure, je vous propose de nous mettre d'accord sur les points suivant :
    1- Le couple Randomize/Rnd fait du pseudo-aléatoire
    2- La séquence des nombres est déterminable
    3- Cela suffit largement à contenter un programmeur 'de base', ce que nous sommes tous ici
    4- Cela fait hurler les mathématiciens 'pointilleux' de nature, quand nous oublions de préciser le "Pseudo-"
    5- Le code proposer ne semble pas etre beaucoup plus du goût d'un mathématicien et rebute les programmeurs.
    6- Mais c'est une belle figure de style ...

    CR

  • signaler à un administrateur
    Commentaire de crenaud76 le 28/02/2006 00:04:34

    En guise d'extreme conclusion je dirais, comme l'un d'entre vous l'a noté mais je ne sais plus lequel -il se reconnaitra- :
    L'aléatoire n'existe que d'un point de vu mathématique. Dans la réalité, ce que nous appelons le "hasard" n'est que la solution d'un système d'équation dont le nombre d'inconnus est bien trop important, pour que notre esprit puisse se représenter ce système d'équation lui-même. Alors qu'en a en trouver la solution !!! Voila ! Le "Hasard", c'est cela.
    Je vous renvoi a toute la littérature qui concerne les théories du chaos -l'effet papillon notament, qui est édifiant !!- car cela correspond exactement à ce dont nous parlons en ce moment.
    Notre ami Egyde a déposé un eautre source sur ce sujet -http://www.vbfrance.com/codes/OBTENIR-VRAIS-NB-ALEATOIRE_36293.aspx- ou il se base sur un service fourni par 1 site internet pour obtenir du "VRAI aléatoire". Si j'ai bien compris, ce site se base sur l'ambiance sonore dans une pièce pour donner un nombre aléatoire à un instant T. Cela n'est pas plus "non-reproductible" (=prévisible) que la source ci-dessus : Suffit de refaire exactement le même boucan au même rythme devant le micro et l'affaire est dans le sac.

    CR

  • signaler à un administrateur
    Commentaire de Egyde le 28/02/2006 08:12:47

    crenaud76>J'ai répondu à ta dernière remarque sur la page que tu cites. Pour aller un peu plus loin : en traitement du signal, le signal utile (la voix par exemple), est toujours additionné avec une composante appelé bruit blanc... Contrairement à l'informatique, le monde électronique est loin d'être binaire!

    Cela dit, comme cette source, ce que j'ai proposé est plutôt une "belle figure de style" comme tu l'a dit. Personnellement, je me contente de Randomize+Rnd

  • signaler à un administrateur
    Commentaire de bouv le 28/02/2006 09:12:20

    Et bien je viens d'apprendre quelques choses... et pas des moindres. Merci Gobillot.

  • signaler à un administrateur
    Commentaire de zifnig le 10/03/2006 16:21:33

    Un vrai signal aléatoire (en théorie du signal) est un bruit blanc.

    En pratique il peut être obtenu en réupérant la tension sur l'émetteur d'un transistor (NPN ou PNP, peut importe) dont la base est en l'air (pas connectée), et en ayant amplifié le signal.

    En récupérant le signal de l'entrée micro (non connectée) de la carte son, en l'amplifiant et en récupérant l'amplitude du signal à chaque appel de la fonction, on obtiendra, à priori, un nombre aléatoire (à tester).

  • signaler à un administrateur
    Commentaire de toutancamon le 03/06/2006 12:02:11

    Au lieu de discuter inutilement sur ce sujet je vous sugère de vous rencontrer et d'en d'écoudre avec des preuves à l'appui.

  • signaler à un administrateur
    Commentaire de yohannc le 07/06/2006 22:57:06

    Pour défendre Julien39
    Donc voila déjà je me présente vite fais (mon premier post) je suis vraiment un faible en programmation, (j'ai commencé à apprendre à programmer en terminale sur une 10 aine d'heures) et je vais bientôt passer le bac.
    Bon passons aux choses sérieuses.
    J'ai décidé de créer un générateur de grilles de Sudoku, donc 81 nombre aléatoire de 1 à 9 logiquements. Mon programme c'est du vrai bricolage, et faut en moyenne 7 à 8 secondes pour générer une grille.
    J'ai donc eu l'idée d'avoir la possibilité entre clicker sur un boutton pour générer une grille et un autre pour charger une grille dans un fichier texte contenant 10000 grilles. Il m'a donc fallu créer ce fichier text.
    Avec randomize timer puis rnd je retrouve 43 ou 44 fois la même grille sur 10000.
    En ce sens je trouve que le code de Julien39 est plutôt intéréssant, avec le temps j'imagine que cela me permettrait de ne jamais trouver la même grille, impossible de faire une suite correcte, le pc fait tourner pleins de processus qui ne sont pas régulier (j'ai pas encore testé il va me falloir du temps :) )
    A mon goût le petit algorithme de Vb est insuffisant mais utiliser un code avec le temps comme celui de Julien39 l'est.

    Enfin voila, mais faut pas me demander de poster une source ici, je n'apporterai rien d'intéréssant (il m'a fallut 700 lignes de code pour que je puisse créer une grille de 81 chiffre en respectant les règles du sudoku et avec randomize timer et rnd)

    A+ et ces forum sont super utile, c'est vraiment une bonne aide !

  • signaler à un administrateur
    Commentaire de _DoOmy_ le 17/09/2006 14:52:22

    Le hasard n'est pas qu'une notion mathématique, il est aussi une réalité physique (Quantique), il est donc possible de générer une suite entièrement aléatoire, cependant ce moyen n'est pas à la porté de nos ordinateurs actuels. Il est donc clair que pour l'instant un programme "vraiment aléatoire" ne peut exister, toute fonction résultant du calcul pur ne pouvant etre que pseudo-aléatoire. Cependant cette fonction, au même titre que le "Randomize", sont largement suffisante pour les besoins d'un programme simple. En revanche, pour ce qui est de l'expérimentation mathématique, leur utilisation est inacceptable.
    Merci de votre attention

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS