Ocena użytkownikóww: ***** / 4
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.