/* * Arquivo: random.c * Ultima modificacao em Mon Apr 15 10:42:45 2013 por kellyrb * -------------- * Implementa a interface random.h */ #include #include #include #include "random.h" /* * Funcao: Randomize * ------------------- * Esta funcao seta a semente para a geracao de numeros * aleatorios para o horario atual. A funcao srand eh * fornecida pela biblioteca e requer um * paramentro inteiro. A funcao time eh fornecida por * . */ void Randomize(void) { srand((int) time(NULL)); } /* * Funcao: InteiroRandomico * ----------------------- * Esta funcao primeiro obtem um inteiro aleatorio * no intervalo [0..RAND_MAX] e depois converte-o * em um numero no intervalo [min..max] aplicando * os seguintes passos: * (1) Gera um numero real entre 0 e 1. * (2) Escala-o para o tamanho apropriado de intervalo. * (3) Trunca o valor para um inteiro. * (4) Traduz para o ponto de inicio apropriado. */ int InteiroRandomico(int min, int max) { int k; double d; d = (double) rand() / ((double) RAND_MAX + 1); k = (int) (d * (max - min + 1)); return (min + k); } /* * Funcao: RealRandomico * -------------------- * A implementacao de RealRandomico eh similar a do * InteiroRandomico, sem o passo da truncagem. */ double RealRandomico(double min, double max) { double d; d = (double) rand() / ((double) RAND_MAX + 1); return (min + d * (max - min)); } /* * Funcao: SorteRandomica * ---------------------- * Esta funcao usa RealRandomico para gerar um numero entre * 0 e 1, que eh entao comparado a p. */ short SorteRandomica(double p) { return (RealRandomico(0, 1) < p); }