
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.
std::rand, std::time, std::srand e std::experimental::randintstd::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 usandostatic.
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++ !
Então se inscreva nos nossos Cursos de C++ Moderno . Você aprender criar:
Acesse o endereço: