Valores aleatórios em C com a função rand

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

sequencia com dez numeros aleatios

Programa executando sequencia de 10 números aleatórios.

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?

Os valores não deveriam ser diferentes 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 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 valores diferentes na sequência.

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()
#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

utilizando a funcao srand

Executando sequencia de 10 números aleatórios utilizando a função srand.

Assim os números aleatórios não repetirão 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

7 respostas a Valores aleatórios em C com a função rand