Ir ao conteúdo
  • Cadastre-se

Ordenação de estruturas (?)


DiegoPaiva

Posts recomendados

Olá pessoal, estou tentando resolver um problema que consiste na ordenação de um vetor de estruturas. O problema pede para que o usuario entre com os nomes e as idades e o programa deve imprimir ao final o nome dessas pessoas por ordem de idade. Como eu faria pra ordenar as idades e os nomes ao mesmo tempo? Eu fiz o programa da seguinte maneira:

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct est_dados{    char nome[100];    int idade;} dados;int main(){    dados Pessoas[3];    int i, j, aux;    for(i=0; i < 3; i++)    {        printf("Digite seu nome: ");        fflush(stdin);        gets(Pessoas[i].nome);        printf("\nDigite sua idade: ");        scanf("%d", &Pessoas[i].idade);        system("cls");    }  for(j=2; j>=1; j--)  {    for(i=0; i < j; i++)    {        if(Pessoas[i+1].idade < Pessoas[i].idade)        {            aux = Pessoas[i].idade;            Pessoas[i].idade = Pessoas[i+1].idade;            Pessoas[i+1].idade = aux;        }    }  }    for(i=0; i < 3; i++)    {        puts(Pessoas[i].nome);    }    return 0;}

Eu tentei usar o bubblesort pra ordenar as idades e esperar que a impressão do nome também saísse ordenado (obviamente nao deu, rs), acontece que na impressão saiu os nomes na ordem em que foram digitados. Alguem pode dar um help ai?

Link para o comentário
Compartilhar em outros sites

 Você esqueceu-se que você deve fazer o bubbleSort para todos os dados da estrutura. Está aqui o código corrigido e comentado.

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct est_dados{    char nome[100];    int idade;} dados;int main(){    dados Pessoas[3],          aux; // 'aux' deve ser uma estrutura semelhante a dados    int i, j;    for(i=0; i < 3; i++)    {        printf("Digite seu nome: ");        fflush(stdin);        gets(Pessoas[i].nome);        printf("\nDigite sua idade: ");        scanf("%d", &Pessoas[i].idade);        system("cls");    }  for(j=2; j>=1; j--)  {    for(i=0; i < j; i++)    {        if(Pessoas[i+1].idade < Pessoas[i].idade)        {            aux = Pessoas[i]; //Passa todos os dados de 'Pessoas[i]' para 'aux'            Pessoas[i] = Pessoas[i+1]; // Inverte valores            Pessoas[i+1] = aux; // Recupera dados de 'aux'        }    }  }    for(i=0; i < 3; i++)    {        puts(Pessoas[i].nome);    }    return 0;}

Sempre que usar uma estrutura e precisar ordená-la, use uma variável auxiliar com o mesmo padrão e passe os dados tudo de uma vez!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 Você esqueceu-se que você deve fazer o bubbleSort para todos os dados da estrutura. Está aqui o código corrigido e comentado.

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct est_dados{    char nome[100];    int idade;} dados;int main(){    dados Pessoas[3],          aux; // 'aux' deve ser uma estrutura semelhante a dados    int i, j;    for(i=0; i < 3; i++)    {        printf("Digite seu nome: ");        fflush(stdin);        gets(Pessoas[i].nome);        printf("\nDigite sua idade: ");        scanf("%d", &Pessoas[i].idade);        system("cls");    }  for(j=2; j>=1; j--)  {    for(i=0; i < j; i++)    {        if(Pessoas[i+1].idade < Pessoas[i].idade)        {            aux = Pessoas[i]; //Passa todos os dados de 'Pessoas[i]' para 'aux'            Pessoas[i] = Pessoas[i+1]; // Inverte valores            Pessoas[i+1] = aux; // Recupera dados de 'aux'        }    }  }    for(i=0; i < 3; i++)    {        puts(Pessoas[i].nome);    }    return 0;}

Sempre que usar uma estrutura e precisar ordená-la, use uma variável auxiliar com o mesmo padrão e passe os dados tudo de uma vez!

 

Muito obrigado cara, realmente foi um deslize usar essa aux como o tipo int, nao tinha pensando em alterar ela pra copiar todos os dados de uma vez, valeu mesmo  :D

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!