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:  
du_violin

Gerar números aleatórios e ordena los ate 1 bilhão

Recommended Posts

du_violin    0

esse meu agoritmo roda ate 490 milhoes quando passa disso da esse erro -> 

(Failed to execute "C:\Users\Eduardo Lima\Desktop\alg.exe":
Error 193: %1 nÒo Ú um aplicativo Win32 vßlido.)

490milhoes.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites
vangodp    391

você quer reservar varios bilhões de inteiros na pilha da função? Espero que esteja usando memoria dinâmica si nao nao dai ser possível >_<, a pilha esta limitada a 2 MB mais ou menos en cada função, depende do compilador e sistema.

A função rand igualmente devolve um inteiro, haveria que ver si a função rand é capaz de gerar números assim de grandes, si nao você teria que construir sua propria função rand para que retornasse insigned int ou long long int.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
du_violin    0
  • Autor do tópico
  • #define N 490000000
    int vetor[N],i;
    /**função principal**/
    int main()
    {
        for(i=0; i<N; i++)
            vetor[i]=i+1;
    
        enbaralhar();
        ordena();
    }
    /**funçao de enbaralhar os numeros**/
    int enbaralhar()
    {
        int escolha = 0,rand_num = N,pos_vetor = 0,tmp;
        while( pos_vetor < N - 1 )
        {
            /** Escolhe uma posicao aleatoria **/
            escolha = rand() % rand_num;
            /** Faz a troca pela posicao sequencial **/
            tmp = vetor[pos_vetor];
            vetor[pos_vetor] = vetor[escolha];
            vetor[escolha] = tmp;
            /** Proxima posicao que sera trocada **/
            pos_vetor++;
        }
        /** Mostra o vetor embaralhado **/
        printf("---------------------------");
        printf("|   numeros enbaralhados  |");
        printf("-------------------------\n");
        for( i = 0; i< N; i++)
            printf("\t%d", vetor[i]);
        printf("\n");
        //system ("pause");
    }
    /** ordenaçao do vetor aleatorio**/
    int ordena()
    {
        int B[N],x;
        printf("---------------------------");
        printf("|     numeros ordenados    |");
        printf("---------------------------\n");
        for( i = 1; i<=N; i++)
        {
            x=vetor[i];
            while(vetor[x] != (i))
            {
                x++;
            }
            B[i] = vetor[x];
            printf("\t%d", B[i]);
    
        }
    }

     

     

       

     

    Editado por du_violin

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    du_violin    0
  • Autor do tópico
  •  desculpa,

    :De porque eu sou novo no fórum e iniciante em programação!

    @CiroboyBR me da uma ajudinha ae cara como e que eu coloco nas tags???

    eu indentei com a configuração do code blocks

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    CiroboyBR    271

    @du_violin Não precisa refazer o post, é só editar.

    Seu código estava cheio de erros, dos mais diversos... dei uma moldada nele.

     

    #include<stdio.h>
    #include<stdlib.h>
    //#include<time.h>
    #define N 500000000
    
    void enbaralhar();
    void vet();
    void ordena( int *p );
    
    int vetor[N], i;
    
    
    int main() {
      enbaralhar();
    
      return 0;
    }
    
    void vet() {
      for ( i = 0; i < N; i++ ) {
        vetor[i] = i + 1;
      }
    }
    
    void enbaralhar() {
      int escolha = 0, rand_num = N, pos_vetor = 0, tmp;
      vet();
      while ( pos_vetor < N - 1 ) {
    
        escolha = rand() % rand_num;
    
        tmp = vetor[pos_vetor];
        vetor[pos_vetor] = vetor[escolha];
        vetor[escolha] = tmp;
    
        pos_vetor++;
      }
    
      printf( "NUMEROS embaralhadOs: \n" );
      for ( i = 0; i < N; i++ )
        printf( "\t%d", vetor );
      printf( "\n" );
      system( "pause" );
      ordena( vetor );
      return ;
    }
    
    void ordena( int *p ) {
      int B[N], x;
      printf( "numeroos ordenados \n" );
      for ( i = 1; i <= N; i++ ) {
        x = vetor[i];
        while ( vetor[x] != ( i ) ) {
          x++;
        }
        B[i] = vetor[x];
        printf( "\t%d", B );
      }
    }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    du_violin    0
  • Autor do tópico
  • muito obrigado!!!

     

    @CiroboyBR cara obrigado eu editei agora da uma olhadinha lá, pra você entender o que eu quero fazer!!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    CiroboyBR    271

    @du_violin Seu número é muito grande e vai demorar bastante pra processar.



    Correção:

    #define N 20
    int vetor[N],i;
    
    /**funçao de enbaralhar os numeros**/
    int enbaralhar()
    {
        int escolha = 0,rand_num = N,pos_vetor = 0,tmp;
        while( pos_vetor < N - 1 )
        {
            /** Escolhe uma posicao aleatoria **/
            escolha = rand() % rand_num;
            /** Faz a troca pela posicao sequencial **/
            tmp = vetor[pos_vetor];
            vetor[pos_vetor] = vetor[escolha];
            vetor[escolha] = tmp;
            /** Proxima posicao que sera trocada **/
            pos_vetor++;
        }
        /** Mostra o vetor embaralhado **/
        printf("---------------------------");
        printf("|   numeros enbaralhados  |");
        printf("-------------------------\n");
        for( i = 0; i< N; i++)
            printf("\t%d", vetor[i]);
        printf("\n");
        //system ("pause");
    }
    /** ordenaçao do vetor aleatorio**/
    int ordena()
    {
        int B[N],x;
        printf("---------------------------");
        printf("|     numeros ordenados    |");
        printf("---------------------------\n");
        for( i = 1; i<=N; i++)
        {
            x=0;  //<<---------------------- ERRO era aqui
            while(vetor[x] != i )
            {
                x++;
    
            }
            B[i] = vetor[x];
            printf("\t%d", B[i]);
    
        }
    }
    /**função principal**/
    int main()
    {
        for(i=0; i<N; i++)
            vetor[i]=i+1;
    
        enbaralhar();
        ordena();
    }

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    du_violin    0
  • Autor do tópico
  • @CiroboyBR mas o problema a chegar a 1 bilhao, o que devo fazer ???, eu sei que vai demorar muito isso a principio não importa , o que me interessa e que o codigo começa rodar a 1bilhao!!

    quero colocar por exemplo no #define N 1000000000 e rodar

    Editado por du_violin

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    du_violin    0
  • Autor do tópico
  • 1 minuto atrás, vangodp disse:

    pode usar multiprocessamento >_<.

    @vangodp  como posso fazer isso? da de implementar isso? tem como me explicar?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    CiroboyBR    271

    @du_violin Seu algoritmo é muito lento pra ordenar o vetor se você for ordenar 1 bilhão com ele vai demorar anos... Além dos "printfs", esses sim atrasam muito o programa. Eu modifiquei ele para imprimir somente de mil em mil, compile e veja ele ordenando 500000 valores . Compile e rode isso:

     

    #define N 500000
    int vetor[N],i;
    
    /**funçao de enbaralhar os numeros**/
    int enbaralhar()
    {
        int escolha = 0,rand_num = N,pos_vetor = 0,tmp;
        while( pos_vetor < N - 1 )
        {
            /** Escolhe uma posicao aleatoria **/
            escolha = rand() % rand_num;
            /** Faz a troca pela posicao sequencial **/
            tmp = vetor[pos_vetor];
            vetor[pos_vetor] = vetor[escolha];
            vetor[escolha] = tmp;
            /** Proxima posicao que sera trocada **/
            pos_vetor++;
        }
        /** Mostra o vetor embaralhado **/
        printf("---------------------------");
        printf("|   numeros enbaralhados  |");
        printf("-------------------------\n");
        for( i = 0; i< N; i++);
            printf("\t%d", vetor[i]);
        printf("\n");
        //system ("pause");
    }
    /** ordenaçao do vetor aleatorio**/
    int ordena()
    {
        int B[N],x;
        printf("---------------------------");
        printf("|     numeros ordenados    |");
        printf("---------------------------\n");
        for( i = 1; i<=N; i++)
        {
            x=0;  //<<---------------------- ERRO era aqui
            while(vetor[x] != i )
            {
                x++;
    
            }
    
    
            B[i] = vetor[x];
            if (B[i] % 1000 == 0)
              printf("\t%d", B[i]);
    
        }
    }
    /**função principal**/
    int main()
    {
        for(i=0; i<N; i++)
            vetor[i]=i+1;
    
        enbaralhar();
        ordena();
    }

     

     

    Agora uma ordenação dos mesmos 500000 mil valores, só que agora é uma ordenação no pior caso, compile e veja o resultado:

     

    OSB: salve como arquivo.cpp

     

    #include<cstdio>
    #include<cstdlib>
    #include<ctime>
    
    void Shell_Sort (unsigned long int seq[], unsigned long int nelem);
    
    unsigned long int N = 500000;
    
    int main() {
      unsigned long int v[N], i= 0;
      unsigned long int  *L = new unsigned long int[N];
      srand(time(0));
    
      printf("Vetor Criado: ");
      for ( i = 0; i < N; i++){
        L[i] =  N - i;
        //printf("%d ", v[i]);
      }
    
      printf("\n\nVetor Ordenado: ");
      Shell_Sort(L, N);
      for ( i = 0; i < N; i++){
    
        if(L[i] % 1000 == 0)
        printf("%li ", L[i]);
      }
    
    return 0;
    }
    
    void Shell_Sort (unsigned long int seq[], unsigned long int nelem)  /* 2 versao */
    {
      unsigned int indi, indj, incremento;  int temp;
    
     for (incremento = nelem/2; incremento > 0; incremento /= 2)
       for (indi = incremento; indi < nelem; indi++)
       {
         temp = seq[indi];  /* copiar o elemento a ordenar */
    
        for (indj = indi; indj >= incremento; indj -= incremento)
          if (temp < seq[indj-incremento])
           seq[indj] = seq[indj-incremento];  /* deslocar elementos */
          else break;
    
        seq[indj] = temp;  /* inserir o elemento a ordenar na posicao */
       }
    }

     

    A diferença é notável...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    du_violin    0
  • Autor do tópico
  • @CiroboyBR  cara , eu quero rodar um bilhão, a princípio não importa os métodos de ordenação! conheço os metodos, o problema é rodar um bilhão... Só isso, o tempo que isso vai ficar rodando não tem muita importância a princípio!!! Mais qualquer e ajuda e bem vinda

     

     

    Editado por du_violin

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    du_violin    0
  • Autor do tópico
  • @CiroboyBR

    #include <stdlib.h>
    #include <stdio.h>
    #define N 100
    
    int main()
    {
    
        int*v,i;
    
        v = (int*) malloc(N*sizeof(int));
    
        for(i=0; i<N; i++)
        {
            v[i] = i;
        }
    
        embaralha(v);
        ordena(v);
    
        free(v);
        return 0;
    }
    
    int embaralha (int v[])
    {
        int i, j, t;
    
        while (v[i] <N-1)
        {
            j = rand()%N;
            t = v[i];
            v[i] = v[j];
            v[j] = t;
            i++;
        }
        printf("numeros enbaralhados\n\n");
        for(i=0; i<N; i++)
        {
            printf("%d\t", v[i]);
        }
    
    }
    
    int ordena( int v[])
    {
        int B[N],x,i;
        printf("\n\nnumeros ordenados");
    
        for( i = 1; i<=N; i++)
        {
            x=0;
            while(B[x] != i )
            {
                x++;
    
            }
            v[i] = B[x];
            printf("\t%d", v[i]);
    
        }
    
    }

     

    consegui!!!!! ta gerando 1 bilhao

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    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

    ×