Você está na página 1de 1

INSTRUÇÕES PARA GERAR NÚMEROS ALEATÓRIOS

Prof. Bruno Feijó

INICIALIZANDO
O computador pode gerar números “aparentemente” aleatórios que chamamos de pseudo-aleatórios. Isto significa que
há sempre alguma tendência, algum vício de geração. Para melhorar a “aleatoriedade” devemos inicializar o processo
usando uma função chamada srand() a partir de um valor que chamamos de “semente”. O ideal é que esta “semente”
nunca se repita cada vez que rodarmos o programa. Desta maneira, chamar srand(1) não é muito bom. Use a função
time(NULL) que retorna “o número total de segundos decorridos desde 01/Janeiro/1970”. Assim garantimos que a
“semente” será sempre diferente. Na realidade a função srand() recebe um “inteiro sem sinal”. Garantimos isto usando
o “operador de conversão de tipo” (“cast”, em inglês): srand((unsigned int) time(NULL)). Para melhorar ainda
mais a “aleatoriedade”, gastamos três chamadas da função rand() que gera um número pseudo-aleatório entre 0 e a
constante RAND_MAX. A constante RAND_MAX é definida como sendo 32762. As funções srand e rand e a constante
RAND_MAX requerem a biblioteca stdlib.h. A função time requer a biblioteca time.h.

A função para inicializar pode ser:

void iniciar_aleatorio(void)
{
srand((unsigned int)time(NULL));
rand();
rand();
rand();
}

GERANDO NÚMERO ALEATÓRIO NO INTERVALO [a,b]


Supomos que a e b são inteiros.
Um número aleatório x no intervalo [a,b] é dado por: x = a + r(b-a), onde r = rand()/RAND_MAX. O único cuidado é
garantir que r é um double e que x é um inteiro. A função fica da seguinte forma:

int aleatorio(int a, int b)


{
double r;
r = (double) rand()/RAND_MAX;
return (int)(a + r*(b-a));
}

EXEMPLO
O programa abaixo imprime um número aleatório entre a e b dados pelo usuário.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int aleatorio(int, int);


void iniciar_aleatorio(void);

int main(void)
{
int a, b, c;
printf("Entre a e b: ");
scanf("%d%d",&a,&b);
iniciar_aleatorio();
c = aleatorio(a,b);
printf("inteiro pseudo-aleatorio: %d\n", c);
return 0;
}

void iniciar_aleatorio(void)
{
srand((unsigned int)time(NULL));
rand(); rand(); rand();
}

int aleatorio(int a, int b)


{
double r;
r = (double) rand()/RAND_MAX;
return (int)(a + r*(b-a));
}

Departamento de Informática

Você também pode gostar