Para gerar números aleatórios em C, temos duas funções que trabalham
de forma semelhante:
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.
[1] Comentário enviado por
jochan em 14/12/2005 - 14:44h:
Muito legal, vai me ajudar bastente no meu projeto de C++ ... =)
[2] Comentário enviado por
knancys em 14/04/2006 - 00:24h:
muito bom... agora não preciso ficar alimentando manualmente minhas matrizes nos exercicios da faculdade :-)
[3] Comentário enviado por
bahiaboaterra em 19/06/2006 - 09:59h:
Uso o DEV C++ e ele não reconhece a biblioteca stdlib.h
Porque será?
Preciso de um algoritmo que gere numeros aleatórios em um vetor de 500 posições. Alguém pode ajudar?
Obigado
[4] Comentário enviado por
gabrielgrace em 19/08/2006 - 10:38h:
Valeu ....
precisa mesmo gerar aleatoriamente zeros e uns e deu certo
Obrigado..
[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/
mauad
[6] Comentário enviado por
RogerioRamos em 11/01/2007 - 18:56h:
Eu gostaria de obter um codigo que gerasse numeros p rodar no keil, esse codigo acima naum roda.
Obrigado..
[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
kalline fabiana
[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).
[9] Comentário enviado por
albertguedes em 31/10/2007 - 13:10h:
Em vez de usar time para a semente, leia um caractere do arquivo "/dev/urandom" que é um gerador realmente aleatório do sistema.
[10] Comentário enviado por
marcotuliogm em 08/11/2007 - 19:31h:
COMO EU FAÇO PARA GERAR OS NUMEROS COM REPETIÇÃO.
OU SEJA A ACADA UM QUE SURGIR EU ACRESCENTE UM IGUAL NA MINHA MATRIZ.
[11] Comentário enviado por
hellpucrio em 17/03/2009 - 11:58h:
Olá..gostei da funçao, soh gostaria de saber com eu faço para nao gerar numeros repetidos??
vlw...
[12] Comentário enviado por
Ravengardy em 25/11/2010 - 14:39h:
Muito bom cara... mas como é que ue faço pra colocar duas restrições como
de 10 a 100 e tb de 200 a 300.... ??
[13] Comentário enviado por
albertguedes em 26/11/2010 - 11:27h:
@Ravengardy Só fazer assim
x = valor_minimo + rand() % ( valor_maximo - valor_minimo ) ;
No seu caso, teríamos
valor_minimo = 10
valor_maximo = 100
ou
valor_minimo = 200
valor_maximo = 300