random number generator c
Ovaj vodič detaljno opisuje upotrebu funkcija rand () i srand () za generiranje slučajnih brojeva u C ++:
Mnogo puta zahtijevamo upotrebu slučajnih brojeva u našoj aplikaciji za izradu simulacija ili igara i drugih aplikacija koje zahtijevaju slučajne događaje.
Na primjer, u igri kockica, bez slučajnih događaja, pojavit će se ista strana svaki put kad bacimo kocku, dajući neželjene rezultate.
Stoga postaje neophodno da na raspolaganju imamo generator slučajnih brojeva. U fizičkom okruženju možemo generirati slučajne događaje, ali to nije moguće kada je riječ o računalima.
=> Pročitajte seriju Easy C ++ Training Series.
To je zato što je sve u računalima binarno, tj. 0 ili 1 (točno ili netačno), a ništa između. Dakle, računala obično generiraju predvidljive događaje i nisu u mogućnosti generirati slučajne događaje.
Umjesto toga, računala simuliraju slučajnost koja se radi pomoću generator pseudo-slučajnih brojeva (PRNG) . C ++ ima generator slučajnih brojeva i može se koristiti s mnogim aplikacijama.
U ovom uputstvu detaljno ćemo razmotriti funkcije / pristupe za generiranje slučajnih brojeva u C ++.
Što ćete naučiti:
- Generator pseudo-slučajnih brojeva (PRNG) u C ++
- funkcije rand i srand U C ++
- Razlika između rand () i srand ()
- C ++ Random Float
- Slučajni broj C ++ između 0 i 1
- Slučajni broj C ++ između 1 i 10
- Često postavljana pitanja
- Zaključak
- Preporučena literatura
Generator pseudo-slučajnih brojeva (PRNG) u C ++
Generalno, generator pseudo-slučajnih brojeva (PRNG) može se definirati kao program koji uzima sjeme ili početni broj i pretvara ga u neki drugi broj koji se razlikuje od sjemena pomoću matematičkih operacija.
Ovaj se postupak izvodi više puta uzimajući svaki put zadnji generirani broj. Svaki put kada je generirani broj nepovezan s prethodnim brojevima. Stoga je ovaj program sposoban generirati niz brojeva koji se čine slučajnim.
Jezik C ++ dolazi s ugrađenim generatorom pseudo-slučajnih brojeva i pruža dvije funkcije rand () i srand () koje se mogu koristiti za generiranje slučajnih brojeva.
Razmotrimo ove dvije funkcije detaljno.
kako reproducirati .bin datoteke
funkcije rand i srand U C ++
srand ()
Prototip funkcije: void srand (nepotpisano int sjeme);
Parametri: sjeme - cjelobrojna vrijednost koja se koristi kao sjeme algoritmom generatora pseudo-slučajnih brojeva.
Povratna vrijednost: Nijedna
Opis: srand funkcija koristi se za inicijalizaciju niza pseudo-slučajnih brojeva s parametrom nazvanim 'slučajno sjeme'. Izlaz funkcije randa čini slučajnim. Inače, izlaz funkcije rand () bit će isti svaki put kad je pozovemo.
Stoga, ako zasadimo generator slučajnih brojeva srand () funkcijom, on će pokrenuti generator od točke koja ovisi o vrijednosti argumenta prosljeđenoj srand. Ako generator slučajnih brojeva postavimo sa sistemskim vremenom Na primjer, prije prvog poziva funkcije rand (), tada će generirati slučajne brojeve svaki put kad pokrenemo program.
Imajte na umu da funkciju srand () obično moramo pozvati samo jednom prije funkcije call to rand (), a ne svaki puta kada generiramo slučajne brojeve.
rand ()
Prototip funkcije: int rand (void);
Parametri: nijedna
Povratna vrijednost: Cijela vrijednost između 0 i RAND_MAX.
Opis: Funkcija rand () generira sljedeći slučajni broj u nizu. Generirani broj je pseudo-slučajni cijeli broj između 0 i RAND_MAX. RAND_MAX je konstanta u zaglavlju koja je obično postavljena na vrijednost 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; }
Izlaz:
U gore navedenom programu generirali smo prvih 100 slučajnih brojeva davanjem sistemskog sata kao početnog elementa funkcije srand. U ovom programu koristili smo i srand i rand funkcije. Imajte na umu da će zbog sistemskog sata kao početnog, generirani izlaz biti različit svaki put kad izvršimo program.
Razlika između rand () i srand ()
red() | srand () |
---|---|
Koristi se za generiranje slučajnih brojeva. | Sjeme PRNG-a koji koristi funkcija rand (). |
Poziva se onoliko puta koliko želimo generirati slučajne brojeve. | Pozvan samo jednom da vidi generator slučajnih brojeva. |
Ne uzima nikakve argumente. | Uzima parametar koji se koristi za sjeme generatora slučajnih brojeva. |
Vraća redoslijed slučajnih brojeva svaki put kad je pozvan. | Ne vraća vrijednost. |
C ++ Random Float
Funkcija rand () koju smo gore vidjeli prema zadanim postavkama vraća cijelu vrijednost koja u određenim slučajevima može uzrokovati preljev. Dakle, možemo koristiti float ili dvostruku vrijednost. Možemo generirati plutajuće slučajne brojeve lijevanjem povratne vrijednosti funkcije rand () u 'plutajući'.
Stoga će sljedeće generirati slučajni broj između plutajućeg 0,0 i 1,0 (uključujući oba).
cout< Slično tome, donji redak generirat će slučajni broj između 1,2 i 3,4
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
U sljedećem primjeru u nastavku koristimo slučajni float za generiranje rezultata.
Slučajni broj C ++ između 0 i 1
Možemo koristiti funkcije srand () i rand () za generiranje slučajnih brojeva između 0 i 1. Imajte na umu da izlaz funkcije rand () moramo prebaciti na decimalnu vrijednost s plutajućom ili dvostrukom vrijednošću.
Zadana povratna vrijednost funkcije rand () tj. Cijeli broj nije dovoljan za prikaz slučajnih brojeva između 0 i 1 koji su razlomci.
C ++ program dolje naveden prikazuje prvih pet slučajnih brojeva između 0 i 1.
algoritam sortiranja ljuske c ++
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< Izlaz :
Vidimo da je rezultat programa slučajni broj između 0 i 1 koji su razlomci.
Ako ne vratimo povratnu vrijednost funkcije rand () u plutajuću ili dvostruku vrijednost, tada ćemo dobiti 0 kao slučajni broj.
Slučajni broj C ++ između 1 i 10
Sljedeći je primjer generiranje slučajnih brojeva između 1 i 10. Slijedi program C ++ koji generira slučajne brojeve.
Funkciju srand pozivamo sa sistemskim satom, a zatim funkciju rand s operatorima modula 10.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< Izlaz:
U gornjem programu generiramo prvih 10 slučajnih brojeva između 1 i 10. Imajte na umu da će svaki put kada se program pokrene generirati različite skupove brojeva zbog pozivane funkcije srand.
Često postavljana pitanja
P # 1) Koja je datoteka zaglavlja za slučajnu funkciju u C ++?
Odgovor: Funkcije za generiranje slučajnih brojeva, rand i srand definirane su u< cstdlib > zaglavlje C ++.
P # 2) Što je Rand_max u C ++?
Odgovor: RAND_MAX je konstanta u zaglavlju koja je obično postavljena na vrijednost 32767. Generator pseudo-slučajnih brojeva (PRNG) generira slučajne brojeve između 0 i RAND_MAX.
P # 3) Kako funkcionira slučajna funkcija?
Odgovor: C ++ podržava dvije slučajne funkcije, tj. srand () i rand (). Funkcija srand () sjeme generator slučajnih brojeva koji koristi funkcija rand () koji generira redoslijed slučajnih brojeva ovisno o početnom ponuđenom sjemenu.
P # 4) Kako se baratate vremenom?
Odgovor: Funkcija srand postavlja generator pseudo-slučajnih brojeva (PRNG) koji koristi funkcija rand (). Standardna je praksa koristiti rezultat poziva na vrijeme (0) kao sjeme. Ova funkcija vremena vraća vrijednost, broj sekundi od 00:00 sati, 1. siječnja 1970., UTC (trenutna vremenska oznaka UNIX).
Tako se vrijednost sjemena mijenja svake sekunde. Stoga se svaki put kad se srand pozove s funkcijom vremena generira novi skup slučajnih brojeva.
Zaključak
U ovom smo tutorijalu detaljno razgovarali o stvaranju slučajnih brojeva. Programski jezici ili općenito računala ne generiraju slučajne brojeve jer su dizajnirani da daju prediktivne rezultate. Stoga moramo simulirati slučajnost.
Kako bismo simulirali slučajnost, koristimo generator pseudo-slučajnih brojeva (PRNG) koji je ugrađen u C ++. Tako pomoću dvije funkcije, rand () i srand () možemo generirati slučajne brojeve u C ++.
Funkcija srand () koristi se za pružanje sjemena za generiranje slučajnih brojeva, dok funkcija rand () generira sljedeći slučajni broj u nizu.
=> Ovdje potražite cijelu seriju treninga za C ++.
Preporučena literatura
- Generator slučajnih brojeva C # i generator slučajnih nizova C # s primjerima koda
- Vodič za glavne funkcije Pythona s praktičnim primjerima
- Vodič za cijevi za Unix: Cijevi za programiranje u Unixu
- Rekurzija u C ++
- Funkcije prijatelja u C ++
- Polimorfizam u C ++
- Objektno orijentirano programiranje na jeziku C ++
- OOP Java: Uvod u objektno orijentirano programiranje na Javi