Un algorithme fort simple mais de plus en plus rare dans les livres, s'est le fonctionnement d'une fonction de générateur aléatoire. Je n'ai, entre autre, trouvé la formule dans aucun livre à l'exception de «ALGORITHMS, 1983, Edition Addison-Wesley, par Robert Sedgewick, page 33 à 44». Voici un petit programme inspiré de se livre, permettant d'effectuer la génération de nombre aléatoire statique en LotusScript :
- Const m=100000000
- Const ml=10000
- Const b=31415821
- Dim a As Long
-
- Function Mult(p As Long,q As Long) As Long
- Dim pl,p0,ql,q0 As Long
- pl=Int(p / ml)
- p0=p Mod ml
- ql=Int(q / ml)
- q0=q Mod ml
- Mult=(((p0*ql+pl*q0) Mod ml)*ml+p0*q0) Mod m
- End Function
-
- Function Randm() As Long
- a=(Mult(a,b)+1) Mod m
- Randm=a
- End Function
-
- Sub Main()
- Dim I As Integer
- a =1
- Print "Génération de 10 nombres aléatoires statique:"
- For I=1 To 10
- Print Randm()
- Next
- End Sub
on obtiendra le résultat suivant :
Génération de 10 nombres aléatoires statique:31415822
40519863
62952524
25482205
90965306
70506227
6817368
12779129
29199910
45776111
Le résultat est toujours le même parce que la variable «a» contient invariablement la valeur 1 à chaque démarrage du programme. Pour changer cette situation, il faudra donc affecter le résultat d'une fonction d'horloge, comme «GetTickCount», pour provoquer une effet de «Randomize Timer» du bon vieux BASIC.