[ 31/05/2009 ] 0 TwitThis

Rand, gerando números randômicos em C / C++

Rand, gerando números randômicos em C / C++

A maioria dos programadores que usam a função rand não inicializam a semente da aleatóriedade, como consequência disso toda vez que o programa é executado são geradas as mesmas entradas.

Isto ocorre porque é usado um gerador de números pseudo aleatórios que basicamente é uma conta que é feita sobre o número atual para obter o seguinte. Se você parte do mesmo número, você sempre obtêm a mesma sequência.

Em alguns casos isso é bom, principalmente quando não se tem certeza da corretude do programa então é necessário saber quais foram os dados de entrada para conseguir debugar melhor o código, mas na maioria das vezes isto não é desejado.

Então a solução para inicilizar a função rand é usar a srand. Como usá-la?


Segue abaixo um código que gera um vetor aleatório e usa srand:
//Autor: Filipe Areias Névola
//Ano: 2009
//Programa: Usando rand com inicilização de semente
//Licensa: Você pode usar e alterar, mas deve manter o Autor
#include <stdio.h>
#include <stdlib.h> //contém a rand e srand
#include <time.h> //necessária para usar o time(NULL)

#define MAX 100 //quero gerar elementos entre 1 e 100

void entradaAleatoria(int tamanho){
//vetor que conterá os números gerados aleatóriamente
int v[tamanho];
//iterador
int i;

//inicializando a semente do rand
srand(time(NULL));

//faço uma rand para cada elemento
for(i=0;i<tamanho;++i){
//rand() gerará vários números positivos
//como quero somente entre 1 e 100 faço
//mod MAX, logo terei elementos entre
//0 e 99 então somo 1 sempre e terei elementos
//entre 1 e 100 e vou guardando no vetor
v[i]=(rand()%MAX)+1;
}
}

Alguma dúvida ? Pergunte através dos comentários!

Novo Comentário