Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xxHendriXxx

Números aleatórios em C++

Recommended Posts

Bom dia a todos, sou iniciante na linguagem C++ e preciso fazer uma função que gere números aleatórios. Um amigo me mostrou esse código porém não entendi nada. Tenho uma razoável noção de programação em Java, mas não manjo nada de C++. Eu gostaria que os mais experientes me explicassem o código abaixo, pois não quero usar algo sem entendê-lo primeiro.

 

O código funciona perfeitamente e gera os números aleatórios de que preciso, mas preciso entender a estrutura do programa e o que está acontecendo durante a execução do código.

 

Desde já agradeço a todos.

 

int geraAleatorio(int min,int max)

{

int r;

 

if(!seed)

{

time(&seed);

srand((unsigned)seed);

}

 

r=min+rand()%(max-min+1);

 

return r;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro ele dá um seed na função que gera números aleatórios, para que o rand() possa parecer que é aleatório. No caso ele manda a hora do sistema que ele pegou com time (a função colocou os dados em uma variável seed que eu não sei onde se encontra, e passou o seed para o srand). O problema é que sem seed, a função rand não fica aleatória. É meio chato de lembrar agora que tem que ter seed sempre pro rand, mas com o tempo você se acostuma com a idéia.

Na outra linha, ele passa pra variável r o resultado da geração do número aleatório. Um número aleatório escolhido entre x e y irá ser um número entre x e y, obviamente, só que como o rand não permite que tu escolha o mínimo e o máximo, ele apenas retorna o número aleatório a ser gerado, você tem que dar um jeitinho nele para ficar como quer. Primeiro, o mais importante é o rand() %. O % acho que você já sabe o que é, mas para o rand, se você fizer por exemplo: rand() % 5, você tecnicamente terá um número entre 0 e 4 (porque dividindo por 5 você não tem sobra de 5). No caso, ele dividiu por (max - min + 1), ou seja, o número máximo menos o mínimo mais 1. O +1 é porque você quer achar um número entre min e max, INCLUINDO max, digamos que você quer um número de 0 a 5, você tem que fazer rand() % 6, porque como eu disse, as sobras vão de 0 até divisor menos um. No caso de um número entre x e y, x é uma parte constante da resposta, pois a resposta mínima seria x, então por isso, pegasse a diferença entre x e y, faz a aleatorização com essa diferença, e adiciona a x, e então no final tem um número entre x e y como queria.

E finalmente, retorna para quem chamou a função a variável r, que contém o número gerado.

 

Não sei se é isso que você quer? Vai perguntando aí que agente vai respondendo :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder amigo. A variável seed é do tipo long, e está declarada antes da função. É pq eu esqueci de colar ela no tópico. Foi falha minha. O código completo ficaria assim:

 

long seed=0;

 

 

int geraAleatorio(int min,int max)

{

int r;

 

if(!seed)

{

time(&seed);

srand((unsigned)seed);

}

 

r=min+rand()%(max-min+1);

 

return r;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o José te explicow como funciona..

você esta com + alguma duvida?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.