Lennwe Posted January 3, 2013 at 12:39 PM Report #489364 Posted January 3, 2013 at 12:39 PM 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 🙂
HappyHippyHippo Posted January 3, 2013 at 12:49 PM Report #489368 Posted January 3, 2013 at 12:49 PM http://en.wikipedia.org/wiki/Bubble_sort IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Lennwe Posted January 3, 2013 at 05:08 PM Author Report #489398 Posted January 3, 2013 at 05:08 PM Obrigado, já consegui fazer 🙂
pmg Posted January 3, 2013 at 07:22 PM Report #489404 Posted January 3, 2013 at 07:22 PM 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!
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now