Preencha a matriz com números aleatórios em C ++

Preencha a matriz com números aleatórios em C ++
Preencher uma matriz com números aleatórios soa simples se for assumido que a matriz é para 10 elementos. Para fazer isso, gerar um número aleatório e colocar na matriz como o primeiro elemento. Gerar outro número aleatório e colocar como o segundo elemento. Em seguida, gerar novamente um terceiro número aleatório e colocar como o terceiro elemento. Continue assim até que o décimo elemento seja alcançado.

No entanto, aqui estão outras coisas para apreciar antes de codificar que. Números aleatórios gerados por C ++ 20 seguem uma sequência. Existem muitas dessas seqüências, então números aleatórios não são verdadeiramente aleatórios. O usuário do programa dificilmente poderá saber qual sequência o programador escolheu e como determinar o próximo número, quando a função aleatória é chamada, no mesmo código.

Cada sequência tem um número inicial. A semente está relacionada ao número inicial de uma sequência. Cada sequência depende da semente e da distribuição de sequência. A distribuição de sequência é o perfil da sequência.

Este artigo explica como preencher uma matriz com números aleatórios começando com as classes: random_device, default_random_engine e uniform_int_distribution. Essas classes estão todas na biblioteca aleatória que devem ser incluídas. O esqueleto de um programa para preencher uma matriz de 10 elementos, com números aleatórios, é o seguinte:

#incluir
#incluir
usando namespace std;
int arr [10];
int main ()

//declarações
retornar 0;

Observe que qualquer tipo aritmético pode ser usado como tipo de elemento para a matriz. O tamanho da matriz é 10. No entanto, qualquer número de números aleatórios pode ser obtido.

Motor e distribuição

Neste tópico, um motor é um gerador de números aleatórios.

Random_Device

Esta é uma aula da qual os objetos são instantados. Um objeto desta classe é um dispositivo e não um motor. Isso precisa de um gerador para ser útil. Um gerador pode tomar um argumento random_device como argumento.

default_random_engine

Um mecanismo neste tópico gera números aleatórios. Existem diferentes motores dos quais o programador pode escolher. Isso deve ser escolhido quando o programador não tem certeza de qual motor escolher. Esta é uma aula da qual os objetos são instantados. É preciso um objeto random_device como argumento.

uniform_int_distribution

Existem muitos perfis de distribuição de sequências que o programador pode escolher. O escolhido para este artigo é: uniform_int_distribution. Esta é uma classe a partir da qual os objetos podem ser criados. Sua construção leva um motor como argumento, bem como os números de limite inferior e superior para os números aleatórios. Na verdade é um modelo de aula. Uma de suas sintaxes de construção é:

Explícito uniforme_int_distribution (Inttype A, Inttype B = numeric_limits:: max ());

As três declarações a seguir funcionam juntas:

Random_Device Rd;
default_random_engine Eng (rd ());
uniform_int_distribution dist (4, 13);

De 4 a 13 são dez números inteiros, incluindo os limites inferiores e superiores. A especialização do modelo para o objeto de distribuição, dist, é int. Portanto, dez números aleatórios diferentes podem ser escolhidos a partir desse intervalo (4 - 13). Observe que o argumento para Eng () é rd () e não rd. Observe também que qualquer tipo aritmético pode ser a especialização do modelo para esta construção de distribuição.

A partir deste código, para obter o próximo número aleatório, use "dist (Eng);" .

Produzindo dez números inteiros aleatórios

O programa a seguir, produz dez números inteiros aleatórios, de 4 a 13 inclusive.

#incluir
#incluir
usando namespace std;
int main ()

random_devicerd;
default_random_engineeng (rd ());
uniform_int_distributionDist (4, 13);
cout<cout<retornar 0;

A saída do computador do autor é:

7 10 4 10 6
8 12 6 12 8

Alguns números ocorreram mais de uma vez. O programa começa com a inclusão da biblioteca iostream para entrada e saída. Depois disso, a biblioteca aleatória é incluída números aleatórios forr. A próxima linha é uma declaração e não uma diretiva. Termina com um semicolon. Ele insiste que qualquer nome, não precedido com "std ::" é do espaço de nome padrão.

Depois, há a função principal C ++. As três primeiras declarações da função principal foram explicadas, anteriormente. No próximo segmento de código, o dist (Eng) produz o próximo número aleatório; Obviamente, dentro do intervalo (inclusive), dado como argumentos ao construtor de distribuição.

Preenchendo uma matriz com números aleatórios

No código acima, dez números aleatórios foram produzidos com a expressão, dist (Eng). Foi digitado dez vezes. Pode ser digitado uma vez e ser chamado dez vezes, se feito em um loop for. O loop for terá que iterar dez vezes. Nesta situação, o número aleatório de retorno não será enviado ao terminal (tela); Ele será enviado para o próximo local do elemento, da matriz. O programa a seguir ilustra o seguinte:

#incluir
#incluir
usando namespace std;
int arr [10];
int main ()

random_devicerd;
default_random_engineeng (rd ());
uniform_int_distributionDist (4, 13);
para (int i = 0; i<10; i++)
arr [i] = dist (Eng);
para (int i = 0; i<10; i++)
cout<cout<retornar 0;

A saída do computador do autor, desta vez, é:

9 8 12 10 8 10 8 5 4 11

Observe como o primeiro loop foi codificado. Obviamente, qualquer intervalo pode ser escolhido, o seguinte programa usa um intervalo de 0 a 100:

#incluir
#incluir
usando namespace std;
int arr [10];
int main ()

random_devicerd;
default_random_engineeng (rd ());
uniform_int_distributionDist (0, 100);
para (int i = 0; i<10; i++)
arr [i] = dist (Eng);
para (int i = 0; i<10; i++)
cout<cout<retornar 0;

A saída do computador do autor, desta vez, é:

43 52 52 24 90 81 21 72 33 42

Embora o alcance tenha mais de dez números inteiros, apenas dez números aleatórios foram produzidos, conforme decidido pelo primeiro loop for.

Conclusão

Realize o procedimento a seguir para preencher uma matriz com números aleatórios: gerar um número aleatório e colocar na matriz, como o primeiro elemento. Gerar outro número aleatório e coloque -se, como o segundo elemento. Gerar um terceiro número aleatório e coloque -se, como o terceiro elemento. Continue assim até que o número de números aleatórios seja atingido. O seguinte segmento de código é importante:

int arr [10];
Random_Device Rd;
default_random_engine Eng (rd ());
uniform_int_distribution dist (0, 100);
para (int i = 0; i<10; i++)
arr [i] = dist (Eng);