Véletlen számok használata
Mire jó a véletlen?
- Szimuláció
- Játékok
- Hatékony "randomizált" algoritmusok
- Titkosítás
(Ál)véletlen számok előállítása
Példák
Dobások összege
Egy hatoldalú dobókockával dobálunk, a dobott számokat összeadjuk. Mi a valószínűsége, hogy pont kijön a 100?
program kocka;
var x, s : longint;
begin
Randomize;
s := 0;
while s < 100 do
begin
x := random(6)+1;
s := s + x;
writeln(x,' ',s);
end;
if s = 100
then writeln('Nyert')
else writeln(':(');
end.
Bolyongás
Egy pontszerű részecske mozog a koordinátasíkon. Minden időegységben jobbra, balra, felfele vagy lefele lép egy egységet, egyenlő valószínűséggel. Vizsgáljuk a részecske pályáját!
program brown;
var x,y : integer;
v : byte;
i : integer;
begin
x := 0; y := 0;
Randomize;
for i := 1 to 10000 do
begin
v := random(4);
if v = 0
then y := y + 1
else if v = 1
then x := x + 1
else if v = 2
then y := y - 1
else x := x - 1;
writeln(x,';',y);
end;
end.
Véletlen prím előállítása
Nagy prímek keresése. Véletlen számokat állítunk elő 1 millió és 2 millió között, és teszteljük őket, prímek-e. Az első prímnél megállunk. Érdekes kérdés: átlagosan hányadik próbálkozásra kapunk prímet?
program vprim;
var db, n, d : longint;
van : boolean;
begin
db := 0;
van := false;
Randomize;
while not van do
begin
db := db + 1;
n := Random(1000000)+1000000;
d := 2;
while (d <= round(sqrt(n))) and ((n MOD d)<>0) do
d := d + 1;
writeln(db,'. lépés');
if n MOD d = 0
then writeln(n,' NEM PRÍM')
else begin writeln(n,' PRÍM'); van := true; end;
end;
end.
Lottó-számok sorsolása
Írjunk programot, ami igazságosan sorsol ki $n$ szám közük $k$ különbözőt!
program lotto;
var n,k,sz,i : longint;
begin
Randomize;
n := 90; k := 5; sz := k; i := 1;
while sz > 0 do
begin
if Random < sz / (n-i+1)
then begin
writeln(i);
sz := sz - 1;
end;
i := i + 1;
end;
end.