[Código] Gerando Numeros Aleatorios sem Repetição
Observando o tópico:
Numeros aleatorios para cartela de bingo
Resolvi fazer um gerador de numeros aleatórios para postar aqui, como observado pelo membro Rarylson Freitas a função srandsrand(time(NULL)) captura o relogio do sistema e calcula um numero, porém se utilizarmos ela uma vez durante a abertura do main() ela pegara somente um numero, e se a utilizarmos sem mexer no tempo ele gera numeros muito proximos muitas vezes ele repete o mesmo numero, portanto elaborei este codigo pensando em pegar um numero verificar se ele ja existe em um vetor e utilizar Sleep para pausar o tempo antes de uma nova contagem e geração de numero pelo srand, assim obtive numeros saltiados melhores, bem vamos ao código:
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
using namespace std;
int numero(int num)
{
srand(time(NULL));
num=(rand())%50;//pega o resto da divisão do numero aleatorio por 50 (um numero menor q 50)
return num;
}int main ()
{
int numeros[25],num,tam,i,l,test;
printf("Gerando numeros aleatorios\n");
for(i=0;i<25;i++)
{
numeros[i]=0;//preenchemos o vetor com zeros
}
for(i=0;i<25;i++)
{
test=0;
while(test==0)//inicio do teste para evitar numeros repetidos
{
test=1;//test vira um para sair do laço
Sleep(1500);//iniciamos o tempo de contagem
numeros[i]=numero(num);//numeros[i] recebe o valor da função srand
for(l=0;l<25;l++)
{
if(numeros[l]==numeros[i]&&i!=l)// o i!=l é para não testar ele com ele mesmo.
{
Sleep(1500);//reiniciamos o tempo
numeros[i]=numero(num);//numeros[i] recebe um novo valor da função srand
test=0;//caso seja verdadeiro volta a ser 0 para voltar ao laço
l=25;//fechamos o for e voltamos ao laço de 0
}
}
}
printf("%d\t",numeros[i]);
if(i==4||i==9||i==14||i==19||i==24)//pula linha
printf("\n");
}
getch();
}Obs: utilizei o DEV C++ para criar este codico portanto ao utilizar em outro compilador devem alterar o int main() para void main() pode ser retirado o getch() do final tambem
Podem ser feitas algumas alterações para se trabalhar com um vetor de tamanho indefinido ou matriz ai vai da criatividade de cada um, quanto maior o Sleep maior a diferença entre os numeros sorteados, pode-se utilizar a função se atribuindo o numero maximo a ser obtido tambem pode-se sortear a posição do vetor, ai vai da criatividade e experiencia de cada um.
Espero ter contribuido com o forum, estou elaborando um jogo de truco e assim que possivel postarei aqui.
Discussão (2)
Carregando comentários...