Ir para o conteúdo
Lennwe

[Resolvido] Ordem alfabética

Mensagens Recomendadas

Lennwe

Bom dia a todos !

Estou com uma dificuldade .

Tenho um programa que guarda nomes, porém precisava que ao guardar esses nomes, mostrasse por ordem alfabética mas não estou a conseguir fazer uma função que me permita fazer .

Alguem me pode ajudar a fazer a respectiva função ?

Sei que é com o bubble sort se não estou em erro, porém, não consigo de todo fazê-lo.

Aqui vai o código :

# include <stdio.h>
# include <string.h>
# define MAX 100
typedef enum {jan=1, fev, mar, abr, mai, jun, jul, ago, set, out, nov,
dez} TMes;
typedef struct {
int dia;
TMes mes;
int ano;
} TData;
typedef struct {
char nome[100];
int idade;
int sexo;
int bi;
TData analise;
int coltotal;
int LDL;
int HDL;
} TRegisto;

TRegisto Registar(void){
TRegisto a;
printf("Nome:");
gets(a.nome);
printf("Idade:");
scanf("%d",&a.idade);
printf("BI:");
scanf("%d",&a.bi);
printf("Qual seu sexo? 1=HOMEM 2=MULHER: ");
scanf("%d",&a.sexo);
printf("Data das analises(ex. 2/2/2013):1");
scanf("%d/%d/%d",&a.analise.dia,&a.analise.mes,&a.analise.ano);
//....
return a;
}

void MostarRegisto(TRegisto r){
printf("Nome:%s\n"/*Idade:%d\nBI:%s\n"*/,r.nome);/*r.idade,r.bi*/
printf("Data das analises: Dia %d de ",r.analise.dia);
switch(r.analise.mes){
case jan: printf("Janeiro");break;
case fev: printf("Fevereiro");break;
case mar: printf("Marco");break;
case abr: printf("Abril");break;
case mai: printf("Maio");break;
case jun: printf("Junho");break;
case jul: printf("Julho");break;
case ago: printf("Agosto");break;
case set: printf("Setembro");break;
case out: printf("Outubro");break;
case nov: printf("Novembro");break;
case dez: printf("Dezembro");break;
}
printf(" de %d\n",r.analise.ano);
}


void Listar(TRegisto *p,int n){
int i;
printf("Registos:\n");
for(i=0;i<n;i++){
MostarRegisto(p[i]);
}
}
char Menu(void){
char opcao;
printf("R:Registar\n");
printf("M:Mostrar\n");
printf("S: Sair\n");
printf("Qual a sua opcao?");
scanf(" %c",&opcao);
getchar();
return opcao;
}

int main(){
TRegisto reg[MAX];
int numregistos=0;
char op;
do{
op=Menu();
switch(op){
case 'r': if(numregistos<MAX)
 reg[numregistos++]=Registar();
 else{
 printf("Impossivel inserir novos registos!\n");
}break;
case 'm':Listar(reg,numregistos);break;
case 's':break;
default:printf("opcao invalida!\n");
}
}while(op!='s');
}

Portanto, nao opcao no menu, quando pede para registar, registo varios doentes, e quando for a mostrar a lista dos doentes, aparece o nome e a data das analises, mas quero que no output eles saiam em ordem alfabética .

Agradeço desde já o tempo que dispõem para mim .

Cumprimentos e espero uma resposta rápida obrigado :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Só mais uma coisa:

a função gets() é impossível de usar com segurança.

É melhor usares fgets() e, se necessário, apagar o ENTER para ter a mesma funcionalidade.

A versão mais recente o C (o C11) não descreve a função gets() ... ou seja: deixou de existir. Quando todos os compiladores forem actualizados, para o teu programa continuar a funcionar, tens de utilizar um compilador antigo.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.