Wypełnij tablicę losowymi liczbami w C ++

Wypełnij tablicę losowymi liczbami w C ++
Wypełnienie tablicy losowymi liczbami brzmi prosto, jeśli zakłada się, że tablica dotyczy 10 elementów. Aby to zrobić, wygeneruj liczbę losową i umieść do tablicy jako pierwszy element. Wygeneruj inną liczbę losową i włóż jako drugi element. Następnie wygeneruj ponownie trzecią liczbę losową i umieść jako trzeci element. Kontynuuj w ten sposób, aż do osiągnięcia dziesiątego elementu.

Oto jednak inne rzeczy, które należy docenić przed zakodowaniem. Liczby losowe wygenerowane przez C ++ 20 podążają za sekwencją. Istnieje wiele takich sekwencji, więc liczby losowe nie są naprawdę losowe. Użytkownik programu prawie nie będzie w stanie wiedzieć, która sekwencja wybrała programista i jak określić następny numer, gdy funkcja losowa jest wywoływana, w tym samym kodzie.

Każda sekwencja ma numer początkowy. Nasiona jest związane z początkową liczbą sekwencji. Każda sekwencja zależy od nasion i rozkładu sekwencji. Rozkład sekwencji jest profilem sekwencji.

W tym artykule wyjaśniono, jak wypełnić tablicę liczbami losowymi zaczynającymi się od klas: Random_Device, Default_Random_Engine i Uniform_int_distribution. Te klasy znajdują się w losowej bibliotece, którą należy uwzględnić. Szkielet programu wypełniający tablicę 10 elementów, losowymi liczbami, jest następujący:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int arr [10];
int main ()

//sprawozdania
powrót 0;

Zauważ, że każdy typ arytmetyczny może być używany jako typ elementu dla tablicy. Rozmiar tablicy wynosi 10. Można jednak uzyskać dowolną liczbę liczb losowych.

Silnik i dystrybucja

W tym temacie silnik jest generatorem liczb losowych.

Random_device

To jest klasa, z której obiekty są tworzone. Obiekt z tej klasy to urządzenie, a nie silnik. Potrzebuje generatora, aby był przydatny. Generator może uznać za argument Random_Device.

Default_Random_Engine

Silnik w tym temacie generuje liczby losowe. Istnieją różne silniki, z których może wybrać programista. Należy to wybrać, gdy programista nie jest pewien, który silnik wybrać. To jest klasa, z której obiekty są tworzone. Zakłada obiekt losowego_device jako argument.

mundliform_int_distribution

Istnieje wiele profili dystrybucji sekwencji, z których może wybrać programista. Wybrany do tego artykułu to: Mundliform_int_distribution. Jest to klasa, z której można tworzyć obiekty. Jego konstrukcja przyjmuje silnik jako argument, a także dolne i górne liczby graniczne dla liczb losowych. To właściwie szablon klasowy. Jedną z jego składni konstrukcyjnych jest:

jawne mundury_int_distribution (inttype a, inttype b = numeric_limits:: max ());

Następujące trzy oświadczenia działają razem:

Random_device rd;
Default_Random_Engine eng (rd ());
mundliform_int_distribution Dist (4, 13);

Od 4 do 13 to dziesięć liczb całkowitych, w tym limity dolne i górne. Specjalizacja szablonu dla obiektu dystrybucji, dist, jest int int. Z tego zakresu można wybrać dziesięć różnych liczb losowych (4–13). Zauważ, że argumentem dla ENG () jest Rd (), a nie RD. Należy również zauważyć, że dowolny typ arytmetyczny może być specjalizacją szablonu dla tej konstrukcji dystrybucji.

Z tego kodu, aby uzyskać następną liczbę losową, użyj „Dist (Eng);” .

Produkowanie dziesięciu losowych liczb całkowitych

Poniższy program produkuje dziesięć losowych liczb całkowitych, od 4 do 13 włącznie.

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

Random_Devicerd;
default_Random_engineeng (rd ());
mundliform_int_distributiondist (4, 13);
Cout<Cout<powrót 0;

Dane wyjściowe z komputera autora to:

7 10 4 10 6
8 12 6 12 8

Niektóre liczby miały miejsce więcej niż raz. Program zaczyna się od włączenia biblioteki iostream do wejścia i wyjścia. Następnie losowa biblioteka jest dołączona do liczb losowych. Następny wiersz jest stwierdzeniem, a nie dyrektywa. Kończy się półkolisem. Nalega, aby każda nazwa, nie poprzedzona „std ::” jest standardową przestrzenią nazw.

Następnie jest główna funkcja C ++. Pierwsze trzy stwierdzenia głównej funkcji zostały wcześniej wyjaśnione. W następnym segmencie kodu Dist (ENG) wysyła następny numer losowy; Oczywiście w zakresie (włącznie), podawany jako argumenty konstruktora dystrybucji.

Wypełnienie tablicy losowymi liczbami

W powyższym kodzie powstało dziesięć losowych liczb z wyrażeniem, Dist (ENG). Wpisano go dziesięć razy. Można go wpisać raz i nazwać dziesięć razy, jeśli wykonane w pętli. Za pętla będzie musiała iterować dziesięć razy. W tej sytuacji liczba losowa zwrotna nie zostanie wysłana do terminala (ekran); zostanie wysłany do następnego miejsca, tablicy. Poniższy program ilustruje to:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int arr [10];
int main ()

Random_Devicerd;
default_Random_engineeng (rd ());
mundliform_int_distributiondist (4, 13);
dla (int i = 0; i<10; i++)
arr [i] = dist (eng);
dla (int i = 0; i<10; i++)
Cout<Cout<powrót 0;

Tym razem wyjście z komputera autora jest:

9 8 12 10 8 10 8 5 4 11

Zwróć uwagę, jak zakodowano pierwszą pętlę. Oczywiście można wybrać dowolny zakres, następujący program wykorzystuje zakres od 0 do 100:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int arr [10];
int main ()

Random_Devicerd;
default_Random_engineeng (rd ());
mundliform_int_distributiondist (0, 100);
dla (int i = 0; i<10; i++)
arr [i] = dist (eng);
dla (int i = 0; i<10; i++)
Cout<Cout<powrót 0;

Tym razem wyjście z komputera autora jest:

43 52 52 24 90 81 21 72 33 42

Chociaż zasięg ma ponad dziesięć liczb całkowitych, wyprodukowano tylko dziesięć losowych liczb.

Wniosek

Wykonaj następującą procedurę wypełniania tablicy losowymi liczbami: Wygeneruj liczbę losową i umieść w tablicy, jako pierwszy element. Wygeneruj inną liczbę losową i włożyć, jako drugi element. Wygeneruj trzecią liczbę losową i włożyć jako trzeci element. Kontynuuj w ten sposób, aż do osiągnięcia liczby wymaganych liczb losowych. Ważny jest następujący segment kodu:

int arr [10];
Random_device rd;
Default_Random_Engine eng (rd ());
mundliform_int_distribution Dist (0, 100);
dla (int i = 0; i<10; i++)
arr [i] = dist (eng);