Ir ao conteúdo
  • Cadastre-se

srand() gerando numeros repetidos


=| Neto |=

Posts recomendados

Me surgiu uma curiosidade que não to conseguindo resolver..

Como fazer para a cada vez que usar o srand() os numeros não surgirem iguais ??

Irei usar o srand() mais de uma vez no algoritmo.

Por exemplo, tenho 15 numeros sorteados de 25 sem o 0.

3,18,2,9,20,17,11,10,1,5,7,13,8,6,14

O problema é que ele faz isso, 3,5,3,7,5,12,12,8,9,15,151,5,4 (repete =\)

Como faço isso ??

Estou tentando usar o srand(), mas quando ele é executado pela segunda vez no programa ele repete. também ja fiz alguns if e else para nao repetir mas mesmo assim depois de rodar o programa algumas vezes ele acaba repetindo 1 ou 2 vezes os numeros.

Eu vou colocar o codigo depois porque nao tenho ele aqui agora, mas é mais ou menos assim.

int = w,x,y,z;
srand( time(NULL) );
w = rand () % 25;
printf ("%d-",w);
x = rand () % 25;
if (x ==w){
x = rand () % 25;
printf ("%d-",x);
}
else
{
printf ("%d-",x);
}

é tipo esse, mas eu faco 3 vezes o if para nao repetir, mas tem vezes q repete o numero.

E a cada novo numero q sera sorteado, tem q ser feitas mais e mais comparacoes.

Nao sei programar muito.

Valeu pela forca galera.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

A sugestão que posso lhe dar é a seguinte:

1)Crie uma rotina para gerar os números

2)Crie outra rotina para checar a existência de repetidos

3)Salve os numeros gerados em um vetor com N posições

Isso facilitará e muito sua atividade.Abraços.

Link para o comentário
Compartilhar em outros sites

então Plateu valeu pela ajuda !!!

Mas é que eu nao manjo nada de vetores :( .

Eu dei uma pesquisada tal mas mesmo assim to meio perdidao em vetor......

Quando eu for criar o vetor como faco para fazer uma comparacao do tipo, o numero que foi gerado nao pode ser igual a nenhum dos ultimos numeros sorteados usando o srand, porque o srand repete alguns numeros.

Tenta me da um exemplo de codigo pra mim.....

Valeuu

Link para o comentário
Compartilhar em outros sites


//vet[10] é nosso vetor de 10 posiçoes e i é nosso indice....
for (i = 0; int < pos; i++) // pos é a posicao atual do vetor
if (vet[i] == o que) // o que é o numero que voce quer ver se ja existe no vetor
return 1;
return 0;


fiz um exemplo de um 'pedaço' de uma função que procura se o numero já existe ou não dentro do vetor... retornando 1 ou 0 respectivamente...

mas acho que da pra ver que é simples, basta correr todo o vetor comparando o valor que voce quer adicionar com os já existentes no vetor...

Link para o comentário
Compartilhar em outros sites

Putzss galera...

Eu mudei de ideia porque com if tava cruel de fazer.....

Começei com o while agora....

Ele vai gerar um numero aleatorio para a1, e mostrar ele, no a2 ele também ira randomizar 1 numero , mas antes de mostrar ele passara pelo while que comparara ele com a1, enquanto a1 for igual a a2 ele ficara rodando o rand. Gerando um numero diferente ele ira mostrar e partira para o a3. Ele sorteara 15 numeros, ou seja , ira ate o a15.

No a15 ele fara 14 whiles para compara com a1,a2,a3....a14 para que assim nao repita o valor.

porém mesmo fazendo isso ele repetiu alguns numero..

Como isso ????

O codigo vai ate o a3, mas o meu programa inteiro vai ate a15.

Valeu galera pelo empenho !!!!!!!!!



#include<stdlib.h>
#include<stdio.h>
#include<time.h>

main ()
{
int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15;

srand((unsigned) time(NULL));

printf("\tSerao sorteados 15 numeros aleatorios\n");

a1=rand () % 25 + 1;
printf("%3.0d",a1);

a2=rand () % 25 + 1;

while (a1 == a2)
{
a2=rand () % 25 + 1;
}
printf("%3.0d",a2);

a3=rand () % 25 + 1;

while (a3 == a1)
{
a3=rand () % 25 + 1;
}
while (a3 == a2)
{
a3=rand () % 25 + 1;
}
printf("%3.0d",a3);
getch();
}

Link para o comentário
Compartilhar em outros sites

No caso, voce criou um vetor com variaveis diferentes... é a mesma coisa que voce criar o vet[15], sendo que a primeira variavel seria a vet[0], depois vet[1] e assim por diante... para verificar se o numero ja foi utilizado, compara ele com vet[x] e coloca em um laço que conta o x da posiçao 0 até a posiçao anterior da qual voce esta...

por exemplo, se x = 5, voce vai comparar com o vet[5]...

Link para o comentário
Compartilhar em outros sites

então Tiago eu estava inicialmente pensando em fazer com vetor mesmo.....

Mas nao manjo nada cara... fiz um pouco mais simplificado porque de vez ficar comparando while de 1 em 1 eu fiz tudo em uma linha usando o comando and.

Consegui terminar.... mas do mesmo jeito ficou imenso o programa... ta com 10.000 linhas.... mas ta terminado...

Ele ficou gigante também porque eu fiz varias implementacoes e em cada implementacao ele tinha que fazer os 15 sorteios de novo...

Ficou mais ou menos assim:


a1=rand()%25 +1;
printf("-%d-",a1);

a2=rand()%25 +1;

while (a1 == a2)
{
a2=rand()%25 +1;
}
printf("-%d-",a2);

a3=rand()%25 +1;

while ((a3 == a1) || (a3 == a2))
{
a3=rand()%25 +1;
}
printf("-%d-",a3);

a4=rand()%25 +1;

while ((a4 == a1) || (a4 == a2) || (a4 == a3))
{
a4=rand()%25 +1;
}
printf("-%d-",a4);

Mas valeu mesmo pela ajuda !!!!

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!