random number generator c
Aquest tutorial descriu l'ús de les funcions rand () i srand () en detall per generar números aleatoris en C ++:
Moltes vegades necessitem utilitzar números aleatoris a la nostra aplicació per produir simulacions o jocs i altres aplicacions que requereixin esdeveniments aleatoris.
Per exemple, en un joc de daus, sense tenir esdeveniments aleatoris, tindrem el mateix costat apareixent cada vegada que llancem els daus donant així resultats indesitjables.
Per tant, es fa necessari que tinguem a la nostra disposició un generador de nombres aleatoris. A l’entorn físic, podem generar esdeveniments aleatoris, però no és possible quan es tracta d’ordinadors.
=> Llegiu la sèrie de formació Easy C ++.
Això es deu al fet que tot en els ordinadors és binari, és a dir, 0 o 1 (veritable o fals) i no hi ha res al mig. Per tant, els ordinadors solen generar esdeveniments previsibles i no són capaços de generar esdeveniments aleatoris.
En canvi, els ordinadors simulen l'atzar que es fa utilitzant generador de números pseudo-aleatoris (PRNG) . C ++ té un generador de números aleatoris i es pot utilitzar amb moltes de les aplicacions.
En aquest tutorial, analitzarem detalladament les funcions / enfocaments per generar nombres aleatoris en C ++.
Què aprendreu:
- Generador de números pseudo-aleatoris (PRNG) a C ++
- Funcions de rand i srand a C ++
- Diferència entre rand () i srand ()
- Flotador aleatori C ++
- Número aleatori de C ++ entre 0 i 1
- Número aleatori C ++ entre 1 i 10
- Preguntes freqüents
- Conclusió
- Lectura recomanada
Generador de números pseudo-aleatoris (PRNG) a C ++
En general, un generador de nombres pseudo-aleatoris (PRNG) es pot definir com un programa que pren una llavor o un número inicial i el transforma en algun altre nombre diferent de la llavor mitjançant operacions matemàtiques.
Aquest procés es duu a terme repetidament agafant l'últim número generat cada vegada. Cada vegada que el número generat no té relació amb els números anteriors. Així, aquest programa és capaç de generar una sèrie de números que apareixen aleatoris.
El llenguatge C ++ inclou un generador de nombres pseudo-aleatoris integrat i proporciona dues funcions rand () i srand () que es poden utilitzar per generar nombres aleatoris.
Analitzem detalladament aquestes dues funcions.
com s'obren fitxers torrentats
Funcions de rand i srand a C ++
srand ()
Prototip de funció: void srand (llavor int signat);
Paràmetres: llavor: un valor enter que s'utilitzarà com a llavor per l'algorisme del generador de nombres pseudo-aleatoris.
Valor de retorn: Cap
Descripció: La funció srand s’utilitza per inicialitzar la seqüència de nombres pseudo-aleatoris amb un paràmetre anomenat ‘llavor aleatòria’. Fa que la sortida de la funció rand sembli aleatòria. En cas contrari, la sortida de la funció rand () serà la mateixa cada vegada que la cridem.
Per tant, si sembrem el generador de nombres aleatoris amb la funció srand (), iniciarà el generador des del punt que depèn del valor de l’argument passat a srand. Si configurem el generador de nombres aleatoris amb el temps del sistema Per exemple, abans de la primera trucada a la funció rand (), generarà els números aleatoris cada vegada que executem el programa.
Tingueu en compte que normalment hem de trucar a la funció srand () només una vegada abans de la funció de trucada a rand () i no cada vegada que generem números aleatoris.
rand ()
Prototip de funció: int rand (void);
Paràmetres: cap
Valor de retorn: Un valor enter entre 0 i RAND_MAX.
Descripció: La funció rand () genera el següent número aleatori de la seqüència. El nombre generat és el nombre enter pseudo-aleatori entre 0 i RAND_MAX. RAND_MAX és una constant de la capçalera generalment establerta en el valor 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; }
Sortida:
En el programa anterior, hem generat els primers 100 números aleatoris, donant el rellotge del sistema com a llavor de la funció srand. En aquest programa, hem utilitzat tant funcions srand com rand. Tingueu en compte que, a causa del rellotge del sistema com a llavor, la sortida generada serà diferent cada vegada que executem el programa.
Diferència entre rand () i srand ()
fila () | srand () |
---|---|
S’utilitza per generar nombres aleatoris. | Sembra el PRNG utilitzat per la funció rand (). |
Es crida tantes vegades com vulguem per generar els números aleatoris. | Es crida només una vegada per veure el generador de números aleatoris. |
No accepta cap argument. | Pren el paràmetre que s’utilitza per sembrar el generador de nombres aleatoris. |
Retorna la seqüència de nombres aleatoris cada vegada que es crida. | No retorna cap valor. |
Flotador aleatori C ++
La funció rand () que hem vist anteriorment per defecte retorna un valor enter que pot causar un desbordament en determinats casos. Per tant, podem utilitzar un valor flotant o doble. Podem generar números aleatoris flotants mitjançant el llançament del valor de retorn de la funció rand () a 'flotant'.
Així, el següent generarà un nombre aleatori entre el flotant 0,0 i 1,0 (ambdós inclosos).
cout< De la mateixa manera, la línia següent generarà un nombre aleatori entre 1,2 i 3,4
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
En el següent exemple que fem a continuació, fem servir float aleatori per generar la sortida.
Número aleatori de C ++ entre 0 i 1
Podem utilitzar les funcions srand () i rand () per generar nombres aleatoris entre 0 i 1. Tingueu en compte que hem de llançar la sortida de la funció rand () al valor decimal flotant o doble.
El valor de retorn predeterminat de la funció rand (), és a dir, enter és inadequat per mostrar números aleatoris entre 0 i 1 que són fraccions.
El programa C ++ que es mostra a continuació mostra els primers cinc números aleatoris entre 0 i 1.
c ++ en comparació amb Java
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< Sortida :

Veiem que la sortida del programa és el nombre aleatori entre 0 i 1 que són fraccions.
Si no emetem el valor de retorn de la funció rand () a flotant o doble, obtindrem 0 com a número aleatori.
Número aleatori C ++ entre 1 i 10
El següent exemple és generar nombres aleatoris entre 1 i 10. A continuació es mostra el programa C ++ que genera nombres aleatoris.
Anomenem la funció srand amb el rellotge del sistema i després anomenem la funció rand amb els operadors del mòdul 10.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< Sortida:

Al programa anterior, generem els primers 10 números aleatoris entre 1 i 10. Tingueu en compte que cada vegada que s'executa el programa, generarà diferents conjunts de números a causa de la crida de la funció srand.
Preguntes freqüents
P # 1) Quin és el fitxer de capçalera de la funció aleatòria en C ++?
Resposta: Les funcions per generar nombres aleatoris, rand i srand es defineixen a< cstdlib > capçalera de C ++.
Q # 2) Què és Rand_max a C ++?
Resposta: RAND_MAX és una constant de la capçalera generalment establerta com a valor 32767. El generador de números pseudo-aleatoris (PRNG) genera números aleatoris entre 0 i RAND_MAX.
P # 3) Com funciona la funció aleatòria?
Resposta: C ++ admet dues funcions aleatòries, és a dir, srand () i rand (). La funció srand () sembra el generador de nombres aleatoris utilitzat per la funció rand () que genera la seqüència de nombres aleatoris en funció de la sembra inicial proporcionada.
Q # 4) Com es pot seguir amb el temps?
Resposta: La funció srand sembra el generador de números pseudo-aleatoris (PRNG) utilitzat per la funció rand (). És una pràctica estàndard utilitzar el resultat d’una crida al temps (0) com a llavor. Aquesta funció horària retorna el valor, uns quants segons des de les 00:00 hores, 1 de gener de 1970, UTC (marca de temps UNIX actual).
Així, el valor de la llavor canvia cada segon. Per tant, cada vegada que es crida srand amb funció de temps, es genera un nou conjunt de nombres aleatoris.
Conclusió
En aquest tutorial hem parlat detalladament de la generació de números aleatoris. Els llenguatges de programació o, en general, els ordinadors no generen nombres aleatoris, ja que estan dissenyats per donar una sortida predictiva. Per tant, hem de simular l’atzar.
Per simular l’atzar, fem ús del generador de nombres pseudoaleatoris (PRNG) que està integrat en C ++. Així, utilitzant les dues funcions, rand () i srand (), podem generar nombres aleatoris en C ++.
La funció srand () s’utilitza per proporcionar llavor per generar nombres aleatoris mentre que la funció rand () genera el següent número aleatori de la seqüència.
=> Cerqueu aquí tota la sèrie de formació C ++.
Lectura recomanada
- C # Número aleatori i generador de cadenes aleatòries C # amb exemples de codi
- Tutorial de funcions principals de Python amb exemples pràctics
- Tutorial Unix Pipes: Pipes a la programació Unix
- Recursió en C ++
- Funcions d'amistat a C ++
- Polimorfisme en C ++
- Programació orientada a objectes en C ++
- OOP Java: Introducció a la programació orientada a objectes a Java