Ir ao conteúdo

Posts recomendados

Postado

Ola, gostaria de saber se é possivel ordenar um .txt, atualmente estou usando um code bem simples apenas para exibir o arquivo, eu gostaria de ordenar pelo cadastro do usuario. O arquivo trabalha com NOME e NUMERO DE CADASTRO de alunos.

 

Esse o code que exibe o .txt

char string[100]

fp = fopen("alunos.txt","r");
                                                                                 
  printf("- Historico de Alunos - \n");
    while(!feof(fp))
    {
      fgets(string,99,fp);
       printf("%s",string);
    }

 

Os arquivos dentro do .txt ficam +/- assim

Alunos	nº Matricula
Maria 		1
Joao  		3
Carlos 		2
Juliano		10
Pedro 		8
Junior 		4

É possivel copiar os dados para um vetor ordenar e depois reproduzir na ordem da matricula?

 

Se alguem puder ajudar, agradeço.

Postado

Estou tentando mudar esse code, fiz um struct onde armazeno a matricula e o nome dos alunos para ordenar e depois colocar em .bin (talvez fique mais fácil), depois de puxar as informações para struct, como funciona para ordenar usando as variaveis da struct?

 

typedef struct {
	char nome[30];
	int matricula;
} alunos;

alunos z;

matricula[aux] = z.matricula;
nome[aux] = z.nome;

Qual seria a forma mais fácil para ordenar essas 2 variaveis?

Postado

@AprendizemC

 

 

A forma mais simples seria aplicar um Bubble Sort no vetor de números e fazer um swapping não só nesse vetor, mas também no de strings (ou ponteiros para strings).

 

 

 

Espero ter ajudado GbhmuXl.gif.

Postado

Seria mais prático fazer isto

typedef struct {
	char nome[30];
	int matricula;
} alunos;

alunos z[aux];

do que separar em dois vetores.

 

 

Sobre como ordenar, minha sugestão seria usar um vetor de ponteiros de mesmo comprimento de z, e então ordenar as referências/endereços de memória do vetor z em nos ponteiros em sequência, tal que o primeiro ponteiro aponte para o aluno z com o menor valor de matrícula, o segundo ponteiro aponte para o aluno z com o segundo menor valor de matrícula, e assim por diante, usando qualquer algoritmo de ordenação que desejar para fazer isso.

 

Desta maneira não é preciso mexer e nos valores do vetor z.

 

Veja um exemplo:

#include <stdio.h>
#include <string.h>

typedef struct {
	char nome[30];
	int matricula;
} alunos;

int main()
{
    alunos z[3];
    alunos *b[3];
    int i, j;
    
    strcpy(z[0].nome, "teste");
    z[0].matricula = 5;
    
    strcpy(z[1].nome, "teste1");
    z[1].matricula = 2;
    
    strcpy(z[2].nome, "teste3");
    z[2].matricula = 1;
    
    /* Ordena os endereços nos ponteiros usando um simples algoritmo de 
    ordenação por inserção (Insertion Sort): */
    b[0] = &z[0];
    for(i=1; i<3; i++){
        for (j = i; j>0 && z[i].matricula < (*b[j-1]).matricula; j--){
            b[j] = b[j-1];
        }
        b[j] = &z[i];
    }

    /*Então basta acessar os valores em sequência usando os ponteiros, 
    mas observe que z não sofreu nenhuma alteração.*/
    for(i=0; i<3; i++){
        printf("%d  %s\n", (*b[i]).matricula, (*b[i]).nome);
    }

    return 0;
}

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!