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 Pascal:
- Program RandomStatic;
- Const
- m=100000000;
- ml=10000;
- b=31415821;
- a:Integer=1;
-
- Function Mult(p,q:Integer):Integer;
- Var
- pl,p0,ql,q0:Integer;
- Begin
- pl:=p div ml;
- p0:=p mod ml;
- ql:=q div ml;
- q0:=q mod ml;
- Mult:=(((p0*ql+pl*q0) mod ml)*ml+p0*q0) mod m;
- End;
-
- Function Random:Integer;Begin
- a:=(Mult(a,b)+1) mod m;
- Random:=a;
- End;
-
- Var
- I:Integer;
-
- BEGIN
- WriteLn('Génération de 10 nombres aléatoires statique:');
- For I:=1 to 10 do WriteLn(Random);
- END.
on obtiendra le résultat suivant:
Génération de 10 nombres aléatoires statique:24078
-31305
9036
-3875
24890
-10509
-6568
-7303
-9178
-7185
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.