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 QuickBASIC :
- DECLARE FUNCTION Mult! (p, q)
- DECLARE FUNCTION Randm! ()
- CONST m = 100000000
- CONST ml = 10000
- CONST b = 31415821
- DIM I AS INTEGER
-
- a = 1
- PRINT "Génération de 10 nombres aléatoires statique:"
- FOR I = 1 TO 10
- a = (Mult(a, b) + 1) MOD m
- PRINT USING "########"; a
- NEXT
-
- FUNCTION Mult (p, q)
- 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
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.