Para gerar números aleatórios em C, temos duas funções que trabalham
de forma semelhante:
rand;
e random.
Estas duas funções geram números aleatórios de 0 a RAND_MAX (definido
no cabeçalho stdlib.h). Se você quiser gerar valores randômicos em uma
determinada faixa numérica, basta fazer assim:
numero= rand() % valor_maximo; ou numero= random() % valor_maximo;
Para usá-las, porém, é necessário inicializar o gerador de números
aleatórios com a função srand. Vejam um exemplo:
#include <stdio.h>
#include <stdlib.h>
/* as funções rand(), random() e srand() estão no cabeçalho stdlib.h */
main()
{
int i;
/* inicializar o gerador de números aleatórios */
srand(100);
for (i=0; i<5; i++)
{
/* para gerar números aleatórios de 0 a 50 */
printf("%d ", rand() % 50);
}
return 0;
}
Como você pode ver, os números aleatórios são criados, mas se você executar
o mesmo programa várias vezes, aparecerão os mesmos números.
Isto acontece porque a inicialização do gerador de números aleatórios é
constante (100). Para contornar este problema, vamos criar uma forma de
inicializar com um número diferente a cada execução. Assim:
#include <stdio.h>
#include <stdlib.h>
/* as funções rand(), random() e srand() estão no cabeçalho stdlib.h */
main()
{
int i;
/* inicializar o gerador de números aleatórios */
/* com time(NULL) */
srand(time(NULL));
for (i=0; i<5; i++)
{
/* para gerar números aleatórios de 0 a 50 */
printf("%d ", rand() % 50);
}
return 0;
}
Assim os números aleatórios não repetirão a cada execução.
[5] Comentário enviado por mauad em 24/11/2006 - 23:51h
Olha, este código que tu escreveu está errado. Embora compile e rode, da forma com que tu chama a função rand() (rand() % N), o gerador te devolve os bits de ordem mais baixa, resultando em uma distribuição estatística inaceitável. Leia o manual (man 3 srand) e de uma olhada em http://www.fourmilab.ch/random/
[7] Comentário enviado por kallinef em 30/05/2007 - 15:56h
preciso de um gerador que elve em consideração a distribuição dos valores (estatistica) existe algum pronto, não entendo nada de programação mais estou precisando no meu trabalho. obrigada
[8] Comentário enviado por btc_cesar em 14/06/2007 - 12:51h
cara, nao tenho certeza mas tenta fazer esse codigo com numeros menores. (acho que ele vai ate max-1, pq ele pega o mod(resto) e o resto de 50 vai de 0 ate 49, ou seja max-1).