Por: Eduardo Casavella
Para gerar um número aleatório (randômico) em linguagem C podemos usar a função rand pertencente à biblioteca stdlib.h.
Gerar sequências de números aleatórios é um problema bastante comum em programação.
A função rand
Quando esta função é chamada ela produz um valor aleatório na faixa entre 0 e a constante RAND_MAX. O valor desta constante encontra-se definida no arquivo stdlib.h.
Muitas vezes necessitamos gerar valores dentro de determinada faixa. Para exemplificar, vamos supor que a faixa de valores desejada esteja entre o valor mínimo zero e o valor máximo 100.
Vejamos um exemplo prático que gera uma sequência com 10 números aleatórios.
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main(void) { int i; printf("Gerando 10 valores aleatorios:\n\n"); for (i = 0; i < 10; i++) { /* gerando valores aleatórios entre zero e 100 */ printf("%d ", rand() % 100); } getch(); return 0; }
Tela de execução
Note que para limitar o valor máxima da faixa usamos o comando rand() % 100.
Agora observe o seguinte: se executarmos o programa acima várias vezes, a sequência de valores gerada cada uma das vezes será a mesma.
Por que isto ocorre?
A sequência de valores não deveria ser diferente a cada execução?
Acontece que para a função rand funcionar ela precisa de um valor inicial chamado de “semente”. Se nenhum valor é passado rand assume um valor constante. No caso a função assume 1. Como este valor, ou seja 1, é assumido sempre no programa acima, a sequência gerada será a mesma para cada execução.
Para gerar uma sequência de valores diferentes a cada execução é necessário utilizar a função srand que inicializa a função rand com um valor “semente” de tal forma que esta semente seja um valor diferente a cada execução do programa, isto por sua vez produz uma sequência de valores diferente a cada execução.
A função srand
Para fazer com que os valores gerados não se repitam precisamos usar a função srand a fim de inicializar a função rand com um valor “semente” para que se produza um valor aleatório na faixa determinada. A função srand recebe um argumento do tipo inteiro sem sinal, ou seja unsigned int.
#include <stdio.h> #include <conio.h> #include <stdlib.h>// necessário p/ as funções rand() e srand() #inclue<stdio.h> #include<time.h>//necessário p/ função time() int main(void) { int i; printf("Gerando 10 valores aleatorios:\n\n"); /* srand(time(NULL)) objetiva inicializar o gerador de números aleatórios com o valor da função time(NULL). Este por sua vez, é calculado como sendo o total de segundos passados desde 1 de janeiro de 1970 até a data atual. Desta forma, a cada execução o valor da "semente" será diferente. */ srand(time(NULL)); for (i=0; i < 10; i++) { // gerando valores aleatórios na faixa de 0 a 100 printf("%d ", rand() % 100); } getch(); return 0; }
Tela de execução
Assim a sequência de números aleatórios não se repetirá a cada execução.
Veja os detalhes no vídeo a seguir.
Até a próxima!
Referências: http://www.ime.usp.br/~pf/algoritmos/aulas/random.html
13 respostas a Valores aleatórios em C com a função rand