Section courante

A propos

Section administrative du site

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 ASP.NET :

ASP.NET (VB.NET) ASP.NET (C# (C Sharp))
  1. <%@ Page Language="VB" %> 
  2. <script runat="server"> 
  3.      Const m = 100000000
  4.     Const ml = 10000
  5.     Const b = 31415821
  6.  
  7.     Dim a As Long = 1
  8.  
  9.     Function Mult(ByVal p As Long, ByVal q As Long) As Long
  10.         Dim p1 As Long = Int(p / ml)
  11.         Dim p0 As Long = p Mod ml
  12.         Dim ql As Long = Int(q / ml)
  13.         Dim q0 As Long = q Mod ml
  14.         Return (((p0 * ql + p1 * q0) Mod ml) * ml + p0 * q0) Mod m
  15.     End Function
  16.  
  17.     Function Random() As Long
  18.         a = (Mult(a, b) + 1) Mod m
  19.         Return a
  20.     End Function 
  21. </script> 
  22. <%
  23. Dim I As Integer
  24. Response.Write("Génération de 10 nombres aléatoires statique:<br />")
  25. For I = 1 To 10
  26.     Response.Write(Random() & "<br />")
  27. Next 
  28. %>
  1. <%@ Page Language="C#" %> 
  2. <script runat="server"> 
  3.     public static readonly int m = 100000000;
  4.     public static readonly int ml = 10000;
  5.     public static readonly int b = 31415821;
  6.     static int a = 1;
  7.  
  8.     public static int Mult(int p, int q)
  9.     {
  10.         int p1, p0, ql, q0;
  11.         p1 = p / ml;
  12.         p0 = p % ml;
  13.         ql = q / ml;
  14.         q0 = q % ml;
  15.         return (((p0 * ql + p1 * q0) % ml) * ml + p0 * q0) % m;
  16.     }
  17.  
  18.     public static int Random()
  19.     {
  20.         a = (Mult(a, b) + 1) % m;
  21.         return a;
  22.     } 
  23. </script> 
  24. <%
  25. Response.Write("Génération de 10 nombres aléatoires statique:<br />");
  26. for (int I = 1; I <= 10; I++) Response.Write(Random() + "<br />");  
  27. %>

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» de C# ou «GetTickCount» de VB.NET, pour provoquer une effet de «Randomize Timer» du bon vieux BASIC.

Voir également

Science - Mathématique

Dernière mise à jour : Samedi, le 31 août 2017