Edultra 13 Denunciar post Postado Novembro 1, 2008 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
quitZAUMMM 18 Denunciar post Postado Novembro 4, 2008 Boa Edultra http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Sempre compartilhando com o fórum ;D Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Junho 5, 2010 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