Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Edultra

[Código] Gerando Numeros Aleatorios sem Repetição

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma outra versão, específica p/ Linux/Unix:

 

 

#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
int main() {
int randomSrc = open("/dev/random", O_RDONLY);
int myRandomInt;
read(randomSrc, &myRandomInt, sizeof myRandomInt);
close(randomSrc);
printf("%d\n", myRandomInt);
return 0;
}

 

Pode ser /dev/random ou /dev/urandom.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.