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 Ada :
- WITH TEXT_IO;
-
- PROCEDURE RandomStatic IS
- USE TEXT_IO;
-
- M : CONSTANT := 100000000;
- Ml : CONSTANT := 10000;
- B : CONSTANT := 31415821;
-
- A:Integer:=1;
-
- FUNCTION Mult(P,Q:IN Integer) RETURN Integer IS
- Pl,P0,Ql,Q0:Integer;
- BEGIN
- Pl:=P / Ml;
- P0:=P mod Ml;
- Ql:=Q / Ml;
- Q0:=Q mod Ml;
- RETURN (((P0*Ql+Pl*Q0) mod Ml)*Ml+P0*Q0) mod M;
- END Mult;
-
- FUNCTION Random RETURN Integer IS BEGIN
- A:=(Mult(A,B)+1) mod M;
- RETURN A;
- END Random;
-
- BEGIN
- PUT_LINE("Génération de 10 nombres aléatoires statique:");
- FOR I IN 1..10 LOOP
- PUT_LINE(INTEGER'IMAGE(Random));
- END LOOP;
- END RandomStatic;
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.