Strona główna » Kursy » Kurs C# » Liczby Pseudolosowe
 

Liczby Pseudolosowe

Wstęp

W języku C# można pobierać liczby pseudolosowe przy pomocy klasy Random. Pozwala to na wylosowanie jakieś losowej liczby całkowitej z pewnego zakresu, albo liczby rzeczywistej z przedziału od 0 do 1. W tym artykule zostanie wyjaśnione jak korzystać z metod dostarczanych przez klasę Random.

Klasa Random

Klasa Random jest klasą zaimplementowaną w podstawowej bibliotece System, która jest niezbędna np. do wypisywania danych na konsolę. Dzięki temu nie istnieje potrzeba dołączania kolejnych bibliotek do programu. W celu utworzenia generatora liczb losowych należy wpisać:

  1. Random generator = new Random();

Podczas tworzenia obiektu można jako argument przekazać liczbę całkowitą x, która określi "numer" zestawu losowego, więc jeśli zależy programiście, aby za każdym razem program od początku losował te same wartości to powinien wpisać jakąś wartość x.

Uwaga

Klasa Random pozwala na utworzenie wielu obiektów będących generatorami liczb pseudolosowych, ale nie jest to zalecane. W programie przyjmuje się, że generator powinien zostać utworzony tylko raz, ponieważ dwa generatory utworzone jeden po drugim mogą losować te same liczby, więc w żaden sposób nie przyczynia się do zwiększania losowości danych. Raz utworzony generator można przekazywać do pozostałych funkcji jako argument.

Implementacja

Liczba Całkowita

Do losowania całkowitych liczb pseudolosowych służy metoda Next(). Jej podstawowe wywołanie nie wymaga podania żadnych argumentów. Wtedy liczba ta jest losowana z przedziału od 0 do 2147483647 tj. największej możliwej wartości do zapisania w typie int. Oto przykładowy kod, który wypisze na konsolę jakąś liczbę całkowitą:

  1. int a = generator.Next();

Jednak, aby programistom ułatwić życie można ograniczyć zakres z góry poprzez przekazanie jednej liczby całkowitej jako argument. Wtedy liczba zostanie wylosowana z przedziału od 0 do n - 1, gdzie n to przekazany argument. Przykładowo w celu wylosowania wyników egzaminu na 10 pkt. należy wpisać:

  1. int b = generator.Next(11);

W przykładzie jako górne ograniczenie zostało podane 11, ponieważ chcemy wylosować wyniki od 0 do 10.

W celu zasymulowania rzutu kostką sześcienną możnaby wylosować wartość od 0 do 5, a następnie dodać 1. Wygodniej jest jednak skorzystać z odpowiedniego przeciążanie metody Next(). Podając dwie liczby całkowite a i b określamy zakres losowania od a do b-1. Oznacza to, że w celu zasymulowania rzutu kostką należy wpisać:

  1. int c = generator.Next(1, 7);

Liczba Rzeczywista

Przypuśćmy jednak, że chcemy wylosować wyniki czasów zawodników biegu. Wtedy przydatne może okazać się losowanie wartości z przedziału od 0 do prawie 1 w celu wylosowanie części tysięcznej wyniku. Do losowania należy użyć metody NextDouble(). Oto przykład:

  1. double d = generator.NextDouble();

Warto zauważyć, że po wylosowaniu liczby rzeczywistej, a następnie pomnożeniu jej przez maksymalny zakres zmiennej int i zaokrągleniu części ułamkowej otrzyma się takie samo działanie jakie ma metoda Next().

Zadania

Zadanie 1

Napisz program, który wypisze 10 losowych liczb całkowitych z przedziału od 0 do 100. Przy każdym uruchomieniu programu powinny zostać wypisane te same liczby.

Zadanie 2

Napisz funkcję losowazPrzedzialu(), która będzie losować liczbę z przedziału od a do b-1. W celu wylosowania liczby funkcja powinna korzystać z przekazanego generatora liczb pseudolosowych. Nie wolno korzystać z metody Next()!