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

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

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

 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
 

@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
 

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

@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
 

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

@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
 

@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
 

@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

×