Czy jest możliwe zmniejszenie szansy na wylosowanie liczby z funkcji Randomize; Random(x);

0

Jak w temacie, czy jest szansa w pascalu na zmniejszenie szansy na wylosowanie liczby np 5 z przedziału <1;10> przy użyciu funkcji np

Randomize;
x:=Random();

albo jakiejś innej funkcji czy wiąże się o z napisanie jakiegoś skomplikowanego kodu?
Nie bardzo wiem jak w googlach wpisać żeby znaleźć odp na to pytanie, a też nie chcę szukać wiatru w polu.

0

Jest możliwe. "Kombinatoryka" się kłania.

Randomize;
x:=Random(z_przedziału);
if x=temu_zdarzeniu_zmniejszyć_prawdopodobieństwo_wystąpienia then x:=Random(z_przedziału); // można np. w ten sposób, zmniejszyć szansę (prawdopodobieństwo) wylosowania;
0

omg takie oczywiste :D dzięki

0

W rozwiązaniu MartinaEagle prawdopodobieństwo wylosowania liczby 5 wynosi 1/n2, a pozostałych liczb 1/n + 1/n2. Jeżeli potrzebujesz innych (nierównych) prawdopodobieństw, to możesz zrobić tak: załóżmy, że chcesz mieć takie losowanie
wylosowana_liczba prawdopodobieństwo
1 1/6 = 10/60
2 1/3 = 20/60
3 1/10 = 6/60
4 1/4 = 15/60
5 1/20 = 3/60
6 1/10 = 6/60
Tworzysz 60-elementową tablicę tab , w której umieszczasz (kolejność nie ma znaczenia) 10 liczb 1, 20 liczb 2, 6 liczb 3, 15 liczb 4, 3 liczby 5 i 6 liczb 6.
Wywołujesz k=Random(60) i zwracasz tab[k] jeżeli tablica jest indeksowana od zera, lub tab[k+1] jeżeli tablica jest indeksowana od 1.

0

Może coś w stylu rozkładu pseudonormalnego?
x:=(Random()+Random()+Random())/3;

0
function GiveMeString(Number: Integer): String;
var
  I : Integer;
begin
  for I := 1 to Number do
    Result := Result + IntToStr(Number);
end;
function MojRandom(Range: Integer): Integer;  
var
  Tablica: array of Integer;
  I : Integer; 
  S: String;
begin
  for I := 1 to Range do
    S := S + GiveMeString(I);
  Result := S[Random(Length(S))];
end;

Im większa liczba, tym większe prawdopodobieństwo wylosowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1