algorytm.org

Implementacja w Delphi/Pascal



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Generator LCG (Liniowy Generator Kongruentny) - Implementacja w Delphi/Pascal
Ocena użytkownikóww: *****  / 4
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 13 września 2008 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Generator LCG - Delphi/LCG.dpr:
//generowanie liczb pseudolosowych
//generator LCG
//www.algorytm.org (c) 2008 Tomasz Lubinski

program LCG;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
m: Int64;
a: Int64;
c: Int64;
x: Int64;

low, high: Int64;
i, n : Integer;

// Calculate a*x mod m
function Mult(a,x,m : Int64) : Int64;
var b,n,r : Int64;
begin
  r := 0;
  n := 1;
  b := 1;
  while n <= 64 do
  begin
    if a and b <> 0 then
       r := (r + x) mod m;
    x := (x + x) mod m;
    b := 2 * b;
    n := n + 1;
  end;
  Mult := r;
end;


function genRand(): Int64;
begin
   x := (Mult(a, x, m) + c) mod m;
   result := x;
end;

begin

   writeln('Podaj wspolczynnik m');
   readln(m);

   writeln('Podaj wspolczynnik a');
   readln(a);

   writeln('Podaj wspolczynnik c');
   readln(c);

   writeln('Podaj wartość ziarna x[1]');
   readln(x);

   writeln('Podaj ile liczb pseudolosowych wylosowac');
   readln(n);

   writeln('Podaj dolna wartosc zakresu generowanych liczb');
   readln(low);

   writeln('Podaj gorna wartosc zakresu generowanych liczb');
   readln(high);

   for i:=1 to n do
      writeln(low + (genRand() mod (high - low + 1)));
end.
Dodaj komentarz