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 sequência 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?

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

utilizando a funcao srand

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

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

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