Llenar la matriz con números aleatorios en C ++

Llenar la matriz con números aleatorios en C ++
Llenar una matriz con números aleatorios suena simple si se supone que la matriz es para 10 elementos. Para hacer eso, generar un número aleatorio y poner en la matriz como el primer elemento. Generar otro número aleatorio y poner como el segundo elemento. Luego, genere nuevamente un tercer número aleatorio y póngase como el tercer elemento. Continúe de esta manera hasta alcanzar el décimo elemento.

Sin embargo, aquí hay otras cosas para apreciar antes de codificar que. Números aleatorios generados por C ++ 20 siga una secuencia. Hay muchas de esas secuencias, por lo que los números aleatorios no son realmente aleatorios. El usuario del programa difícilmente podrá saber qué secuencia eligió el programador y cómo determinar el siguiente número, cuando se llama la función aleatoria, en el mismo código.

Cada secuencia tiene un número inicial. La semilla está relacionada con el número inicial de una secuencia. Cada secuencia depende de la semilla y la distribución de la secuencia. La distribución de la secuencia es el perfil de la secuencia.

Este artículo explica cómo llenar una matriz con números aleatorios que comienzan con las clases: random_device, default_random_engine y uniform_int_distribution. Estas clases están todas en la biblioteca aleatoria que debe incluirse. El esqueleto de un programa para llenar una matriz de 10 elementos, con números aleatorios, es el siguiente:

#incluir
#incluir
usando el espacio de nombres STD;
int arr [10];
int main ()

//declaraciones
regresar 0;

Tenga en cuenta que cualquier tipo aritmético se puede usar como tipo de elemento para la matriz. El tamaño de la matriz es 10. Sin embargo, se puede obtener cualquier número de números aleatorios.

Motor y distribución

En este tema, un motor es un generador de números aleatorios.

random_device

Esta es una clase de la que se instancian los objetos. Un objeto de esta clase es un dispositivo y no un motor. Esto necesita un generador para ser útil. Un generador puede tomar un random_device como argumento.

default_random_engine

Un motor en este tema genera números aleatorios. Hay diferentes motores de los cuales el programador puede elegir. Esto debe elegirse cuando el programador no está seguro de qué motor elegir. Esta es una clase de la que se instancian los objetos. Se necesita un objeto random_device como argumento.

uniforme_int_distribución

Hay muchos perfiles de distribución de secuencias que el programador puede elegir. El elegido para este artículo es: uniforme_int_distribution. Esta es una clase de la que se pueden crear objetos. Su construcción toma un motor como argumento, así como los números de límite inferior y superior para los números aleatorios. En realidad es una plantilla de clase. Una de sus sintaxis de construcción es:

Explícito uniforme_int_distribution (inttype A, inttype b = numeric_limits:: max ());

Las siguientes tres declaraciones funcionan juntas:

random_device rd;
default_random_engine Eng (rd ());
uniforme_int_distribución dist (4, 13);

De 4 a 13 son diez enteros, incluidos los límites inferiores y superiores. La especialización de la plantilla para el objeto de distribución, Dist, es int. Entonces, se pueden elegir diez números aleatorios diferentes de este rango (4 - 13). Tenga en cuenta que el argumento para eng () es rd () y no rd. También tenga en cuenta que cualquier tipo aritmético podría ser la especialización de plantillas para esta construcción de distribución.

De este código, para obtener el siguiente número aleatorio, use "Dist (Eng)"; .

Produciendo diez enteros aleatorios

El siguiente programa produce diez enteros aleatorios, de 4 a 13 inclusive.

#incluir
#incluir
usando el espacio de nombres STD;
int main ()

random_devicerd;
default_random_engineeng (rd ());
uniforme_int_distributionDist (4, 13);
cout<cout<regresar 0;

La salida de la computadora del autor es:

7 10 4 10 6
8 12 6 12 8

Algunos números ocurrieron más de una vez. El programa comienza con la inclusión de la biblioteca iostream para entrada y salida. Después de eso, la biblioteca aleatoria se incluye números aleatorios de FORR. La siguiente línea es una declaración y no una directiva. Termina con un punto y coma. Insiste en que cualquier nombre, no precedido a "std ::" es del espacio de nombres estándar.

Luego está la función principal de C ++. Se han explicado las primeras tres declaraciones de la función principal, previamente. En el siguiente segmento de código, DIST (ENG) emite el siguiente número aleatorio; Por supuesto, dentro del rango (inclusive), dados como argumentos al constructor de distribución.

Llenar una matriz con números aleatorios

En el código anterior, se produjeron diez números aleatorios con la expresión, Dist (ENG). Fue escrito diez veces. Se puede escribir una vez y llamarse diez veces, si se hace en un bucle. El for-loop tendrá que iterar diez veces. En esta situación, el número aleatorio de retorno no se enviará al terminal (pantalla); se enviará a la ubicación del siguiente elemento, de la matriz. El siguiente programa ilustra esto:

#incluir
#incluir
usando el espacio de nombres STD;
int arr [10];
int main ()

random_devicerd;
default_random_engineeng (rd ());
uniforme_int_distributionDist (4, 13);
para (int i = 0; i<10; i++)
arr [i] = Dist (Eng);
para (int i = 0; i<10; i++)
cout<cout<regresar 0;

La salida de la computadora del autor, esta vez, es:

9 8 12 10 8 10 8 5 4 11

Observe cómo se codificó el primer bucle para. Por supuesto, se puede elegir cualquier rango, el siguiente programa utiliza un rango de 0 a 100:

#incluir
#incluir
usando el espacio de nombres STD;
int arr [10];
int main ()

random_devicerd;
default_random_engineeng (rd ());
uniforme_int_distributionDist (0, 100);
para (int i = 0; i<10; i++)
arr [i] = Dist (Eng);
para (int i = 0; i<10; i++)
cout<cout<regresar 0;

La salida de la computadora del autor, esta vez, es:

43 52 52 24 90 81 21 72 33 42

Aunque el rango tiene más de diez enteros, solo se produjeron diez números aleatorios, como lo decidieron el primer bucle.

Conclusión

Realice el siguiente procedimiento para llenar una matriz con números aleatorios: genere un número aleatorio y coloque en la matriz, como el primer elemento. Genere otro número aleatorio y coloque, como el segundo elemento. Genere un tercer número aleatorio y coloque, como el tercer elemento. Continúe de esta manera hasta que se alcance el número de números aleatorios requeridos. El siguiente segmento de código es importante:

int arr [10];
random_device rd;
default_random_engine Eng (rd ());
uniforme_int_distribución dist (0, 100);
para (int i = 0; i<10; i++)
arr [i] = Dist (Eng);