Generador De Números Aleatorios (rand & srand) En C++

Este Tutorial Describe el Uso de las Funciones rand() y srand() en Detalle para Generar Números Aleatorios en C++:

Muchas veces requerimos usar números aleatorios en nuestra aplicación para producir simulaciones o juegos y otras aplicaciones que requieren eventos aleatorios.

Por ejemplo, en un juego de dados, si no hay sucesos aleatorios, aparecerá la misma cara cada vez que lancemos los dados, lo que dará resultados indeseables.

Por eso se hace necesario que dispongamos de un generador de números aleatorios. En el entorno físico, podemos hacer que se generen sucesos aleatorios, pero no es posible cuando se trata de ordenadores.

Esto se debe a que en los ordenadores todo es binario, es decir, 0 ó 1 (verdadero o falso) y nada intermedio, por lo que los ordenadores suelen generar sucesos predecibles y no son capaces de generar sucesos aleatorios.

En su lugar, los ordenadores simulan la aleatoriedad, lo que se hace utilizando generador de números pseudoaleatorios (PRNG) . C++ tiene un generador de números aleatorios y se puede utilizar con muchas de las aplicaciones.

En este tutorial, discutiremos en detalle las funciones/enfoques para generar números aleatorios en C++.

Generador de números pseudoaleatorios (PRNG) en C++

En general, un generador de números pseudoaleatorios (PRNG) puede definirse como un programa que toma una semilla o un número inicial y lo transforma en algún otro número diferente de la semilla mediante operaciones matemáticas.

Este proceso se realiza repetidamente tomando cada vez el último número generado. Cada vez el número generado no guarda relación con los números anteriores. Así este programa es capaz de generar una serie de números que parecen aleatorios.

El lenguaje C++ viene con un generador de números pseudoaleatorios incorporado y proporciona dos funciones rand () y srand () que se pueden utilizar para generar números aleatorios.

Analicemos estas dos funciones en detalle.

Funciones rand y srand en C++

srand ()

Prototipo de función: void srand (unsigned int semilla);

Parámetros: semilla - Un valor entero para ser utilizado como semilla por el algoritmo generador de números pseudoaleatorios.

Valor de retorno: Ninguno

Descripción: La función srand se utiliza para inicializar la secuencia de números pseudoaleatorios con un parámetro llamado 'semilla aleatoria'. Hace que la salida de la función rand parezca aleatoria. De lo contrario, la salida de la función rand () será la misma cada vez que la llamemos.

Así, si sembramos el generador de números aleatorios con la función srand (), arrancará el generador desde el punto que dependa del valor del argumento pasado a srand. Si sembramos el generador de números aleatorios con la hora del sistema Por ejemplo, antes de la primera llamada a la función rand (), entonces generará los números aleatorios cada vez que ejecutemos el programa.

Tenga en cuenta que normalmente necesitamos llamar a la función srand () sólo una vez antes de la llamada a la función rand () y no cada vez que generamos números aleatorios.

rand ()

Prototipo de función: int rand (void);

Parámetros: ninguno

Valor de retorno: Un valor entero entre 0 y RAND_MAX.

Descripción: La función rand () genera el siguiente número aleatorio de la secuencia. El número generado es el entero pseudoaleatorio comprendido entre 0 y RAND_MAX. RAND_MAX es una constante de la cabecera que suele tener 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() <<"\t"; // muestra 5 números aleatorios por fila if (count % 5 == 0) std::cout <<"\n"; } return 0; } return 0; } return 0; } return 0; } return 0; } return 0; } return 0. 

Salida:

En el programa anterior, hemos generado los primeros 100 números aleatorios, dando el reloj del sistema como semilla para la función srand. En este programa, hemos utilizado tanto la función srand como la función rand. Tenga en cuenta que debido al reloj del sistema como semilla, la salida generada será diferente cada vez que ejecutemos el programa.

Diferencia entre rand () y srand ()

rand() srand()
Se utiliza para generar números aleatorios. Siembra el PRNG utilizado por la función rand ().
Llamada tantas veces como queramos para generar los números aleatorios. Llamada sólo una vez para ver el generador de números aleatorios.
No acepta argumentos. Toma el parámetro que se utiliza para sembrar el generador de números aleatorios.
Devuelve la secuencia de números aleatorios cada vez que se llama. No devuelve ningún valor.

C++ Random Float

La función rand () que hemos visto anteriormente devuelve por defecto un valor entero que puede causar un desbordamiento en ciertos casos. Por lo tanto, podemos utilizar valores float o double. Podemos generar números aleatorios float convirtiendo el valor de retorno de la función rand () a 'float'.

Así, lo siguiente generará un número aleatorio entre float 0.0 y 1.0 (ambos inclusive).

 cout< 

Del mismo modo, la línea siguiente generará un número aleatorio entre 1,2 y 3,4

 cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2))); 

En el siguiente ejemplo, utilizamos un flotador aleatorio para generar la salida.

C++ Número aleatorio entre 0 y 1

Podemos utilizar las funciones srand () y rand () para generar números aleatorios entre 0 y 1. Tenga en cuenta que tenemos que convertir la salida de la función rand () al valor decimal float o double.

El valor de retorno por defecto de la función rand (), es decir, entero, es inadecuado para mostrar números aleatorios entre 0 y 1 que son fracciones.

El programa C++ dado a continuación muestra los primeros cinco números aleatorios entre 0 y 1.

 #include #include using namespace std; int main() { cout<<"Números aleatorios generados entre 0 y 1:"< ="" ="" cout="" endl;="" for="" i="" i++)="" null="" pre="" rand()="" rand_max="" return="" srand(="" {="" }="" }="">

Salida :

Vemos que la salida del programa es el número aleatorio entre 0 y 1 que son fracciones.

Si no convertimos el valor de retorno de la función rand () a float o double, obtendremos 0 como número aleatorio.

C++ Número aleatorio entre 1 y 10

El siguiente ejemplo consiste en generar números aleatorios entre 1 y 10. A continuación se muestra el programa C++ que genera números aleatorios.

Llamamos a la función srand con el reloj del sistema y luego llamamos a la función rand con operadores del módulo 10.

 #include #include #include using namespace std; int main() { srand(time(0)); // Inicializar generador de números aleatorios. cout<<"Números aleatorios generados entre 1 y 10:"< ="" cout="" for(int="" i="0;i10;i++)" pre="" return="" }="">

Salida:

En el programa anterior, generamos los 10 primeros números aleatorios entre 1 y 10. Tenga en cuenta que cada vez que se ejecuta el programa, generará diferentes conjuntos de números debido a la función srand que se llama.

Preguntas frecuentes

P #1) ¿Cuál es el archivo de encabezado para la función Aleatoria en C++?

Contesta: Las funciones para generar números aleatorios, rand y srand se definen en < cstdlib > cabecera de C++.

P #2) ¿Qué es Rand_max en C++?

Respuesta: RAND_MAX es una constante en la cabecera generalmente establecida en el valor 32767. El generador de números pseudoaleatorios (PRNG) genera números aleatorios entre 0 y RAND_MAX.

P #3) ¿Cómo funciona la función aleatoria?

Contesta: C++ admite dos funciones aleatorias, a saber srand () y rand ( ). La función srand () siembra el generador de números aleatorios utilizado por la función rand (), que genera la secuencia de números aleatorios en función de la semilla inicial proporcionada.

P #4) ¿Cómo se marca el tiempo?

Contesta: La función srand siembra el generador de números pseudoaleatorios (PRNG) utilizado por la función rand (). Es una práctica estándar utilizar el resultado de una llamada a time (0) como semilla. Esta función time devuelve el valor, un número de segundos desde las 00:00 horas, 1 de enero de 1970, UTC (timestamp UNIX actual).

Por lo tanto, cada vez que se llama a srand con la función time, se genera un nuevo conjunto de números aleatorios.

Conclusión

En este tutorial hemos tratado en detalle la Generación de Números Aleatorios. Los lenguajes de programación o, en general, los ordenadores no generan números aleatorios, ya que están diseñados para dar resultados predictivos. Por lo tanto, necesitamos simular la aleatoriedad.

Para simular la aleatoriedad, utilizamos un generador de números pseudoaleatorios (PRNG) que está incorporado en C++. Así, utilizando las dos funciones, rand () y srand () podemos generar números aleatorios en C++.

La función srand () se utiliza para proporcionar la semilla para generar números aleatorios, mientras que la función rand () genera el siguiente número aleatorio de la secuencia.

Desplazarse hacia arriba