Página 1 de 3 123 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Ajuda com algoritmo de ordenação em C.

    Olá amigos, meu professor me passou um trabalho que é elaborar um programa em C onde se gera um arquivo TXT com números de 0 a 999 de forma aleatória e que esse arquivo tenha o tamanho de 2gb, posteriormente abra esse mesmo TXT. ordene todos os valores e salve em um novo arquivo...usei o método Quicksort, testei com diversos valores, até 1gb funciona bacana, mas com 2gb ele dá um erro de execução logo após ter criado o primeiro TXT ( desordenado ). alguém tem ideia de oque pode estar ocasionando esse erro ?

  2. #2

    Padrão Re: Ajuda com algoritmo de ordenação em C.

    Primeiro, veja onde você está criando esse arquivo. Obviamente, veja se tem espaço ( uns 5GB pra garantir, já que são dois arquivos de 2GB ). Dai veja como está formatado. É melhor rodar isso no hd, seja em ext-qquer coisa do linux, seja em NTFS. Se você está criando esse arquivo em um pendrive formatado em fat, pode ser isso.

    Eliminadas essas possibilidades simples, tem que ver o código. Por acaso a variável que você está usando como contador para ver se deu o tamanho do arquivo não está sub-dimensionada ? Se é C, bota ela como long e vê se resolve.

    Fora isso, teria que saber exatamente qual erro ele dá, e também ver se está criando o primeiro arquivo até o fim mesmo, ou se está dando erro antes. Seria mais útil voce postar o codigo do programa.



  3. #3

    Padrão Re: Ajuda com algoritmo de ordenação em C.

    Obrigado pelo retorno amigo, então estou executando no HD mesmo, em NTFS tem bastante espaço livre...é em C, quando me alertou fiquei na duvida e testei com long, após a conclusão do arquivo desordenado ele trava ( ele cria o primeiro arquivo direitinho, completo com os 2gb)...vou postar o codigo

  4. #4

    Padrão

    Código :
    #include <stdio.h>#include <stdlib.h>
    #define num 555698376
    //277849188 <--- 1 gb //
    //555698376 <--- 2 gb //
     
     
    void quick_sort(int *p, int inicio, int fim){
        int i, j, pivo, aux;
     
     
        i=inicio;
        j=fim-1;
        pivo=p[(inicio+fim)/2];
        while(i<=j){
            while(p[i]<pivo && i<fim){
                i++;
            }
            while(p[j]>pivo && j>inicio){
                j--;
            }
            if(i<=j){
               aux = p[i];
               p[i] = p[j];
               p[j] = aux;
               i++;
               j--;
            }
        }
        if(j > inicio)
            quick_sort(p, inicio, j+1);
        if(i < fim)
            quick_sort(p, i, fim);
    }
    int main()
    {
        int *p;
        p = (int*)malloc (num * sizeof(int));
        int i;
        int n;
        FILE *pFile;
        pFile = fopen ("teste.txt","w");
        for(n=0;n<=num;n++)
    {
            fprintf (pFile,"%d ",rand()%1000);
    }
        FILE *orde;
        orde = fopen ("teste.txt","r");
        for(i=0; i<num; i++)
        {
            fscanf(orde,"%d ", &p[i]);
        }
        orde = fopen ("teste2.txt","w");
        quick_sort(p, 0, num);
     
     
        printf("Valores ordenados");
     
     
        for(i=0; i<num; i++){
            fprintf(orde,"%d ",p[i]);
        }
    }



  5. #5

    Padrão Re: Ajuda com algoritmo de ordenação em C.

    Vamos lá, alguns palpites pra garantir :

    Depois do for () que cria o arquivo, feche ele ( fclose() ) , pra garantir que esteja tudo escrito e buffers limpos.
    Coloque também um fclose() depois da primeira ver que usa "orde" para ler do arquivo para a variavel p, já que você está usando o mesmo descritor de arquivo "orde" para abrir o arquivo que vai gravar.
    E claro, coloque um fclose() no final do programa, depois que criou o arquivo teste2.txt.

    Ponha também uns printf no meio dessa parte que abre o arquivo e chama o quieck sort, para saber até onde o programa está chegando antes de dar erro.

  6. #6

    Padrão

    testei de todas as formas e continua dando o mesmo erro..ao que parece é na leitura do arquivo desordenado...estou em Linguagem de programação 1, tudo ainda é muito novo pra mim, desculpa se estiver cometendo erros bobos, estou aprendendo...adicionei outro descritor e o fclose em todas as aberturas, mas o erro continua...

    Código :
    #include <stdio.h>#include <stdlib.h>
    #define num 555698376
    //277849188 <--- 1 gb //
    //555698376 <--- 2 gb //
     
     
    void quick_sort(int *p, int inicio, int fim){
        int i, j, pivo, aux;
     
     
        i=inicio;
        j=fim-1;
        pivo=p[(inicio+fim)/2];
        while(i<=j){
            while(p[i]<pivo && i<fim){
                i++;
            }
            while(p[j]>pivo && j>inicio){
                j--;
            }
            if(i<=j){
               aux = p[i];
               p[i] = p[j];
               p[j] = aux;
               i++;
               j--;
            }
        }
        if(j > inicio)
    		quick_sort(p, inicio, j+1);
    	if(i < fim)
    		quick_sort(p, i, fim);
    }
    int main()
    {
        int *p;
        p = (int*)malloc (num * sizeof(int));
        long long i;
        int n;
        FILE *pFile;
        pFile = fopen ("teste.txt","w");
        for(n=0;n<=num;n++)
    {
            fprintf (pFile,"%d ",rand()%1000);
    }
        printf ("Arquivo desordenado criado com sucesso.\n\n");
        fclose(pFile);
        FILE *orde;
        orde = fopen ("teste.txt","r");
        for(i=0; i<num; i++)
        {
            fscanf(orde,"%d ", &p[i]);
        }
        printf("Leitura arquivo do desordenado com sucesso.\n\n");
        fclose(orde);
        FILE *tet;
        tet = fopen ("teste2.txt","w");
        quick_sort(p, 0, num);
        printf("Valores ordenados\n\n");
     
     
        for(i=0; i<num; i++){
            fprintf(tet,"%d ",p[i]);
        }
        fclose(tet);
    }