Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
=| Neto |=

[Resolvido] srand() gerando numeros repetidos

Recommended Posts

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.

Editado por Goliathvv
Utilize a tag [code] para destacar o trecho de código e tornar o texto mais legível. Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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();
    }

    Editado por Goliathvv
    Corrigir erros ortográficos.

    Compartilhar este post


    Link para o post
    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]...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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 !!!!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Visitante
    Este tópico está impedido de receber novos posts.
    Entre para seguir isso  





    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×