Gerando números randômicos com C++

Existem formas mais complexas e mais simples.


Gerando números randômicos com C++

No Curso de C++ nós utilizamos outras técnicas mais complexas, mas que funciona desde o C++11, no entanto, hoje nesse cpp::daily vamos mostrar casos mais simples, mais específicos e mais atuais.

Sobre std::rand, std::time, std::srand e std::experimental::randint

std::srand tem o std::time(precisa incluir <ctime> e usa a hora atual como semente para o gerador aleatório) como parâmetro e semeia o gerador de número pseudo-aleatório usado por std::rand() que por sua vez retorna um valor integral pseudo-aleatório entre 0 e RAND_MAX, para saber o valor dele basta imprí-lo, exemplo:

#include <iostream>
#include <ctime>

int main(){
  std::srand(std::time(nullptr));

  int numero_aleatorio = std::rand();
  int numero_ate_60 = std::rand() % 60;
  
  std::cout << "O número máximo é: " << RAND_MAX << '\n';
  std::cout << "Número aleatório até RAND_MAX: " << numero_aleatorio << '\n';
  std::cout << "Número aleatório até 60: " << numero_ate_60 << '\n';

  return 0;
}

Os números randômicos são gerados em tempo de execução, ou seja, cada vez que for executado ou a cada vez que você chamar uma função com valor gerado a partir de std::rand() os números serão diferentes, a menos que você remova a linha: std::srand(std::time(nullptr)); ou, no caso da função, se estiver usando static.

Se também quiser números também sem sinais, basta fazer um casting, exemplo: std::srand(static_cast<unsigned>(time(nullptr))), meio inútil, mas só para informar.

Legal saber que podemos limitar o tamnho do número aleatório como no exemplo que usamos: std::rand() % 60, ou seja, imprime no máximo até 60, mas se quiséssemos uma range entre: 40 e 60, por exemplo ?

Lógico que poderíamos criar uma condição e somar ou subtrair de acordo com o valor do resultado dinamicamente.

Mas isso é um tanto quanto trabalhoso, então entra a tarefa do std::experimental::randint. Para usá-lo precisamos incluir o cabeçalho <experimental/random>, exemplo:

#include <iostream>
#include <ctime>
#include <experimental/random>

int main(){
  std::srand(std::time(nullptr));

  int valor = std::experimental::randint(40,60);
  std::cout << "Número randômico entre 40 e 60: " << valor  << '\n';

  return 0;
}

Se achar que o nome fica muito grande, tente resumir, ex.: namespace rd = std::experimental; e implementar: rd::randint(5,10);.

Alternativamente você pode usar o std::srand com time ZERO: std::srand(time(0)); ou até mesmo sem a resolução de escopo: srand(time(0)); e rand() % num;, exemplo:

#include <iostream>
#include <ctime>

int main(){
  srand(time(0));
  int valor = rand() % 10;
  std::cout << "Número randômico até 10: " << valor  << '\n';
  return 0;
}

Simples, né?!


Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily

Deseja aprender C++ e criar seus programas Gráficos e para Terminal com portabilidade para Linux e Windows?

Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:

Acesse o endereço:

https://terminalroot.com.br/cpp/ e saiba mais!


cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!