Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Função rand

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Função rand

    Boa noite,
    é o seguinte: estou tendo um problema em gerar números aleatórios.
    Estou chamando uma função para gerar um numero de 0 a 12, só que quando chamo ela novamente ela gera o mesmo numero gerado anteriormente.
    Ou seja, chamo a função ela gera 6 (exemplo), chamo novamente ela gera 6, invés de gera outro numero se isso acontece apenas uma vez tudo bem, mais todas as vezes q eu chamo a função ela me retorna o mesmo numero.

  • Font Size
    #2
    Isso porque a função rand gera números pseudo-aleatórios e não aleatórios, ou seja, ela apenas simula a aleatoriedade por fatores determinísticos e não genuinamente aleatórios. Para contornar esse problema deve-se usar a função srand antes de rand e colocar um valor do tipo unsigned int, como parâmetro, assim:

    ...
    int main()
    {

    srand( time(0) ); // time(0) retorna um valor do tipo time_t (unsigned int)


    rand();
    }

    ...

    a função time com o parâmentro 0 retorna o tempo segundos desde 1 de janeiro de 1970 para a função srand, esse valor é do tipo time_t que então é convertido em unsigned int, a função srand só precisa ser chamada uma vez no programa a partir daí toda função rand que você chamar retornará um resultado quase aleatório.
    --
    Johnny Sys


    A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original

    Comment


    • Font Size
      #3
      vou te dar varios exemplos simples mano:

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

      //Gerador de mega sena

      int main(void)
      {
      srand(time(NULL));

      int sena1 = rand () % 60;
      int sena2 = rand () % 60;
      int sena3 = rand () % 60;
      int sena4 = rand () % 60;
      int sena5 = rand () % 60;
      int sena6 = rand () % 60;
      int sena7 = rand () % 60;
      int sena8 = rand () % 60;

      printf("num.gerado: %d.%d.%d.%d.%d.%d",sena1,sena2,sena3,sena4,sena5,s ena6,sena7,sena8);

      printf("\n\n");


      system("PAUSE");
      return 0;
      }

      Comment


      • Font Size
        #4
        mega-sena

        Postado Originalmente por gabiru1296 Ver Post
        Boa noite,
        é o seguinte: estou tendo um problema em gerar números aleatórios.
        Estou chamando uma função para gerar um numero de 0 a 12, só que quando chamo ela novamente ela gera o mesmo numero gerado anteriormente.
        Ou seja, chamo a função ela gera 6 (exemplo), chamo novamente ela gera 6, invés de gera outro numero se isso acontece apenas uma vez tudo bem, mais todas as vezes q eu chamo a função ela me retorna o mesmo numero.
        tmb estou iniciando e C.
        //numeros aleatorios


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

        //Gerador de mega sena

        int main(void)
        {
        srand(time(NULL));

        int sena1 = rand () % 60;
        int sena2 = rand () % 60;
        int sena3 = rand () % 60;
        int sena4 = rand () % 60;
        int sena5 = rand () % 60;
        int sena6 = rand () % 60;
        int sena7 = rand () % 60;
        int sena8 = rand () % 60;

        printf("num.gerado: %d.%d.%d.%d.%d.%d",sena1,sena2,sena3,sena4,sena5,s ena6,sena7,sena8);

        printf("\n\n");


        system("PAUSE");
        return 0;
        }

        Comment


        • Font Size
          #5
          srand

          OU TENTE ESSE AQUI

          MAIS UM EXEMPLO


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


          int main(void)
          {

          int i;

          srand(time(NULL));

          printf("Gerador de Dezenas para Mega Sena\n\n");




          for(i = 0; i < 6; i++)
          {

          printf("dezena %d: %d\n",i+1, (rand() % 60)+1) ;
          }

          printf("\n\n");
          system("PAUSE");
          return 0;
          }

          Comment

          X
          Working...
          X