Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LU_U

Como fazer ordenação por nomes numa struct?

Recommended Posts

Olá amigos,
Estou iniciando no forum e preciso de uma ajuda no código abaixo.
O programa deve receber nomes e idade numa função para inserir
na agenda e imprimi-los em ordem alfabética. exemplo
Entrada
id Nome idade
1 Paulo 13
2 Marcos 43
3 Antonio 65
Saída
3 Antonio 65
2 Marcos 43
1 Paulo 13
Obrigado !!!

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



typedef struct{
	int 	idPessoa;
	char 	nome[30];
	int	idade;
	} agenda;
	
typedef char* string;

agenda *pessoas;
int     qtdPessoas;

void iniciar(){
		qtdPessoas = 0;
		pessoas = malloc(sizeof(agenda));
	}
	
	
agenda newPessoa(){
	    agenda tempPessoa;
		printf("Digite um nome:");
		fflush(stdin);
		scanf("%s", tempPessoa.nome);
		printf("Digite a idade:");
		scanf("%d", &tempPessoa.idade);
		return(tempPessoa);
	}

void addPessoa(){
		qtdPessoas++;
		pessoas = realloc(pessoas, qtdPessoas*sizeof(agenda));
		int indice = qtdPessoas-1;
		pessoas[indice] = newPessoa();
		pessoas[indice].idPessoa = indice;
		
	}
	
void mostrarAgenda(){
	int i = 0;
	for (i=0; i < qtdPessoas; i++){
		printf("\n%d\t%s\t%d", pessoas[i].idPessoa, pessoas[i].nome, pessoas[i].idade);
		}
	}

int main(int argc, char **argv){
	addPessoa();
	addPessoa();
	addPessoa();
	mostrarAgenda();
	return (0);
	}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá

Turma,

 

Pesquisando neste fórum e em meus arquivos, consegui a solução de como ordenar nomes em

uma struct, no meu caso, tipo "agenda", segue parte do código que alterei. Está resolvido !!!

Obrigado se vc tentou ajudar com uma solução para postar, claro se vc tiver uma outra solução é

muito bem vinda.

 

Sds

 

LU_U

void mostrarAgenda(){
	int i = 0;
	for (i=0; i < qtdPessoas; i++){
		for (i=0; i <=1; i++){
			for (j=i+1; j<=2; j++){
				if(strcmp(pessoas[i].nome,pessoas[j].nome)>0){
					strcpy(troca,pessoas[i].nome);
					strcpy(pessoas[i].nome,pessoas[j].nome);
					strcpy(pessoas[j].nome,troca);
					printf("\n%d\t%s\t%d", pessoas[i].idPessoa, pessoas[i].nome, pessoas[i].idade);
					}
				}
			}
		printf("\n%d\t%s\t%d", pessoas[i].idPessoa, pessoas[i].nome, pessoas[i].idade);
		}
	}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigindo a função addAgenda acima.

 

void mostrarAgenda(){
	int i = 0;
	int j = 0;
	int aux =0;
	int aux2=0;
		for (i=0; i <=1; i++){
			for (j=i+1; j<=2; j++){
				if(strcmp(pessoas[i].nome,pessoas[j].nome)>0){
					strcpy(troca,pessoas[i].nome);
					strcpy(pessoas[i].nome,pessoas[j].nome);
					strcpy(pessoas[j].nome,troca);
					aux = pessoas[i].idade;
					pessoas[i].idade=pessoas[j].idade;
					pessoas[j].idade=aux;
					aux2 = pessoas[i].idPessoa;
					pessoas[i].idPessoa=pessoas[j].idPessoa;
					pessoas[j].idPessoa=aux2;
					for (i=0; i < qtdPessoas; i++){
					printf("\n%d\t%s\t%d", pessoas[i].idPessoa, pessoas[i].nome, pessoas[i].idade);
					}
				}
			}
		}
	}

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.