Pesquisar no blog:

quarta-feira, 28 de novembro de 2012

Linguagem C - Função rand e srand

A função rand na linguagem C tem o objetivo de gerar números aleatórios.
Exemplo:
main()
{
int i, aleatorio;
for(i = 0; i < 10; i++)
{
    aleatorio = rand();
    printf("%d\n",aleatorio);
}
system("pause");
}
Observe que a sintaxe é bem simples. Mas por que a cada vez que o laço se repete devemos aplicar o valor da função rand a nossa variável?
A função rand utiliza um número como "semente" para gerar os números aleatórios e esse número só mudará quando a função for chamada novamente.
O resultado do código que temos acima foi:

Perceba que sempre que abrimos nosso programa, os números gerados são o mesmos. Então não temos, ainda, números realmente aleatórios.
E se mudarmos nossa variável para receber o valor da função rand apenas um vez, dessa forma:
main()
{
int i, aleatorio = rand();
for(i = 0; i < 10; i++)
    printf("%d\n",aleatorio);
system("pause");
}
Nossa variável terá sempre o mesmo valor. E esse será nosso resultado:

Para que você gere números que realmente serão imprevisíveis com a função rand, devemos usar no mesmo programa outra função chamada srand (seed randomic) usada para que o número usado como semente seja sempre diferente. O uso mais comum da função srand é junto com a função time da biblioteca <time.h>, que busca a data/hora do seu computador. Como o horário da execução de cada parte do seu programa nunca será o mesmo, tornaremos a semente imprevisível:
#include 
O meu resultado foi:

Observe agora que a cada vez que executamos nosso programa um resultado diferente é fornecido.
E como colocar um intervalo especifico para os nossos números? Pois os números gerados pela função rand vão de 0 à 32767.
Podemos utilizar o operador "%" (mod) que nos retorna o resto de uma divisão. Se queremos, por exemplo, simular a jogada de um dado, deveremos limitar nossos números aleatórios entre 1 à 6.
Usando o operador "%" aplicaríamos ao valor da variável que receberá os números aleatórios o seguinte calculo: (rand() % 6)  + 1;
Qualquer número dividido por 6 retornará o resto entre 0 e 5, somando isso a 1 teremos o intervalo de 1 à 6.

Exemplo de um programa que simula a jogada de um dado:

#include 

Exemplo de um programa que simula a retirada de um número de um bingo de 1 à 100:
#include <time.h>
main()
{
srand(time(NULL));
int i, aleatorio = (rand() % 100) + 1;
printf("%d\n",aleatorio);
system("pause");
}

Nenhum comentário:

Postar um comentário