Jump to content
Lennwe

[Resolvido] Ordem alfabética

Recommended Posts

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 :)

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.