Informatika gyűjtemény

NézetNyomtat

Véletlen számok használata

Mire jó a véletlen?

  1. Szimuláció
  2. Játékok
  3. Hatékony "randomizált" algoritmusok
  4. 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; {mag beállítás}
    s := 0;
    while s < 100 do
    begin
        x := random(6)+1; {a random(6) 0 és 5 között ad értéket}
        s := s + x;
        writeln(x,' ',s);
    end;
    if = 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,: integer;
    v   : byte;
    i   : integer;
begin
    x := 0; y := 0;
    Randomize;
    for i := 1 to 10000 do
    begin
        v := random(4);
        if = 0
            then y := y + 1
        else if = 1
            then x := x + 1
        else if = 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 (<= round(sqrt(n))) and ((MOD d)<>0) do
            d := d + 1;
        writeln(db,'. lépés');
        if 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,: 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.