random number generator c
Tento výukový program podrobně popisuje použití funkcí rand () a srand () pro generování náhodných čísel v C ++:
Mnohokrát vyžadujeme použití náhodných čísel v naší aplikaci k výrobě simulací nebo her a dalších aplikací, které vyžadují náhodné události.
Například, ve hře s kostkami, aniž bychom měli náhodné události, se nám při každém hodu kostkou vyskočí stejná strana, což povede k nežádoucím výsledkům.
Je tedy nezbytné, abychom měli k dispozici generátor náhodných čísel. Ve fyzickém prostředí můžeme generovat náhodné události, ale u počítačů to není možné.
=> Přečtěte si sérii školení Easy C ++.
Je to proto, že vše v počítačích je binární, tj. 0 nebo 1 (pravdivé nebo nepravdivé) a nic mezi nimi. Počítače tedy obvykle generují předvídatelné události a nejsou schopné generovat náhodné události.
Místo toho počítače simulují náhodnost, která se provádí pomocí generátor pseudonáhodných čísel (PRNG) . C ++ má generátor náhodných čísel a lze jej použít s mnoha aplikacemi.
V tomto kurzu se budeme podrobně zabývat funkcemi / přístupy ke generování náhodných čísel v C ++.
Co se naučíte:
- Generátor pseudonáhodných čísel (PRNG) v C ++
- Funkce rand a srand v C ++
- Rozdíl mezi rand () a srand ()
- Náhodný float v C ++
- Náhodné číslo v C ++ mezi 0 a 1
- Náhodné číslo v C ++ mezi 1 a 10
- Často kladené otázky
- Závěr
- Doporučené čtení
Generátor pseudonáhodných čísel (PRNG) v C ++
Obecně lze generátor pseudonáhodných čísel (PRNG) definovat jako program, který přebírá semeno nebo počáteční číslo a transformuje ho na jiné číslo, které se liší od semene pomocí matematických operací.
Tento proces se provádí opakovaně tak, že pokaždé vezmete poslední vygenerované číslo. Pokaždé, když vygenerované číslo nesouvisí s předchozími čísly. Tento program je tedy schopen generovat řadu čísel, která se objevují náhodně.
Jazyk C ++ je dodáván s vestavěným generátorem pseudonáhodných čísel a poskytuje dvě funkce rand () a srand (), které lze použít ke generování náhodných čísel.
Pojďme si podrobně promluvit o těchto dvou funkcích.
příklady c ++ programů využívajících funkce
Funkce rand a srand v C ++
srand ()
Funkční prototyp: void srand (unsigned int seed);
Parametry: seed - Celočíselná hodnota, která má být použita jako seed algoritmem generátoru pseudonáhodných čísel.
Návratová hodnota: Žádný
Popis: Funkce srand se používá k inicializaci posloupnosti pseudonáhodných čísel pomocí parametru zvaného „random seed“. Díky tomu bude výstup funkce rand vypadat náhodně. Jinak bude výstup funkce rand () stejný pokaždé, když jej zavoláme.
Pokud tedy naočkujeme generátor náhodných čísel funkcí srand (), spustí generátor od bodu, který je závislý na hodnotě argumentu předané srandovi. Nastavíme-li generátor náhodných čísel se systémovým časem Například, před prvním voláním funkce rand (), bude generovat náhodná čísla pokaždé, když spustíme program.
Všimněte si, že funkci srand () musíme obvykle volat pouze jednou před voláním funkce rand () a ne pokaždé, když generujeme náhodná čísla.
rand ()
Funkční prototyp: int rand (void);
Parametry: žádný
Návratová hodnota: Celočíselná hodnota mezi 0 a RAND_MAX.
Popis: Funkce rand () generuje další náhodné číslo v pořadí. Generované číslo je pseudonáhodné celé číslo mezi 0 a RAND_MAX. RAND_MAX je konstanta v záhlaví, která je obecně nastavena na hodnotu 32767.
#include #include #include int main() { std::srand(static_cast(std::time(nullptr))); for (int count=1; count <= 100; ++count) { std::cout << std::rand() << ' '; // display 5 random numbers per row if (count % 5 == 0) std::cout << '
'; } return 0; }
Výstup:
Ve výše uvedeném programu jsme vygenerovali prvních 100 náhodných čísel tím, že jsme jako počáteční funkci funkce srand dali systémové hodiny. V tomto programu jsme použili jak funkce srand, tak i rand. Všimněte si, že kvůli systémovým hodinám jako semenu se generovaný výstup bude lišit pokaždé, když provedeme program.
Rozdíl mezi rand () a srand ()
řádek() | srand () |
---|---|
Používá se ke generování náhodných čísel. | Naočkuje PRNG používaný funkcí rand (). |
Volali jsme tolikrát, kolikrát chceme generovat náhodná čísla. | Volal pouze jednou, aby viděl generátor náhodných čísel. |
Neberou žádné argumenty. | Vezme parametr, který se používá k nasazení generátoru náhodných čísel. |
Vrátí posloupnost náhodných čísel při každém volání. | Nevrací hodnotu. |
Náhodný float v C ++
Funkce rand (), kterou jsme ve výchozím nastavení viděli výše, vrací celočíselnou hodnotu, která může v určitých případech způsobit přetečení. Můžeme tedy použít float nebo double value. Můžeme generovat float náhodná čísla tak, že vracíme návratovou hodnotu funkce rand () na „float“.
Následující tedy vygeneruje náhodné číslo mezi floatem 0,0 a 1,0 (obě včetně).
cout< Podobně níže uvedený řádek vygeneruje náhodné číslo mezi 1,2 a 3,4
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
V našem následujícím příkladu níže použijeme ke generování výstupu náhodný float.
Náhodné číslo v C ++ mezi 0 a 1
Můžeme použít funkci srand () a rand () ke generování náhodných čísel mezi 0 a 1. Všimněte si, že musíme vložit výstup funkce rand () na desetinnou hodnotu, buď float nebo double.
Výchozí návratová hodnota funkce rand (), tj. Celé číslo, není dostatečné pro zobrazení náhodných čísel mezi 0 a 1, která jsou zlomky.
Níže uvedený program C ++ zobrazuje prvních pět náhodných čísel mezi 0 a 1.
nejlepší nástroj pro odstranění malwaru pro Windows 10
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< Výstup :

Vidíme, že výstupem programu je náhodné číslo mezi 0 a 1, které jsou zlomky.
Pokud nevrátíme návratovou hodnotu funkce rand () na float nebo double, dostaneme 0 jako náhodné číslo.
Náhodné číslo v C ++ mezi 1 a 10
Dalším příkladem je generování náhodných čísel mezi 1 a 10. Následuje program C ++, který generuje náhodná čísla.
Voláme funkci srand se systémovými hodinami a poté voláme funkci rand s operátory modulu 10.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< Výstup:

Ve výše uvedeném programu generujeme prvních 10 náhodných čísel mezi 1 a 10. Všimněte si, že pokaždé, když je program spuštěn, vygeneruje různé sady čísel z důvodu volání funkce srand.
Často kladené otázky
Otázka č. 1) Co je soubor záhlaví pro náhodnou funkci v C ++?
Odpovědět: Funkce pro generování náhodných čísel, rand a srand jsou definovány v< cstdlib > záhlaví C ++.
Otázka 2) Co je Rand_max v C ++?
Odpověď: RAND_MAX je konstanta v záhlaví obecně nastavená na hodnotu 32767. Generátor pseudonáhodných čísel (PRNG) generuje náhodná čísla mezi 0 a RAND_MAX.
Otázka č. 3) Jak funguje náhodná funkce?
Odpovědět: C ++ podporuje dvě náhodné funkce, tj. srand () a rand (). Funkce srand () naočkuje generátor náhodných čísel používaný funkcí rand (), která generuje sekvenci náhodných čísel v závislosti na uvedeném počátečním semeni.
Otázka č. 4) Jak srandujete s časem?
Odpovědět: Funkce srand osadí generátor pseudonáhodných čísel (PRNG) používaný funkcí rand (). Standardním postupem je použít výsledek volání času (0) jako semeno. Tato časová funkce vrací hodnotu, počet sekund od 00:00 hodin, 1. ledna 1970, UTC (aktuální časové razítko UNIX).
Hodnota semene se tedy mění každou sekundu. Proto pokaždé, když je sranda volána s časovou funkcí, je generována nová sada náhodných čísel.
Závěr
V tomto tutoriálu jsme podrobně diskutovali generování náhodných čísel. Programovací jazyky nebo obecně počítače negenerují náhodná čísla, protože jsou navržena tak, aby poskytovala prediktivní výstup. Proto musíme simulovat náhodnost.
Abychom simulovali náhodnost, využíváme generátor pseudonáhodných čísel (PRNG), který je zabudován v C ++. Takže pomocí dvou funkcí, rand () a srand () můžeme generovat náhodná čísla v C ++.
Funkce srand () slouží k poskytnutí semene pro generování náhodných čísel, zatímco funkce rand () generuje další náhodné číslo v pořadí.
=> Podívejte se na celou sérii školení C ++ zde.
Doporučené čtení
- Generátor náhodných čísel C # a generátor náhodných řetězců C # s příklady kódu
- Výukový program pro hlavní funkce Pythonu s praktickými příklady
- Výukový program pro Unix Pipes: Pipes v programování Unixu
- Rekurze v C ++
- Funkce přátel v C ++
- Polymorfismus v C ++
- Objektově orientované programování v C ++
- OOP Java: Úvod do objektově orientovaného programování v Javě