Jump to content

[Resolvido] Ordem alfabética


Recommended Posts

Posted

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 🙂

Posted

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!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.