Ir ao conteúdo

srand() gerando numeros repetidos


=| Neto |=

Posts recomendados

Postado

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.

  • Membro VIP
Postado

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.

Postado

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

Postado


//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...

Postado

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();
}

Postado

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]...

Postado

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 !!!!

  • Membro VIP
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!