Ir ao conteúdo

Posts recomendados

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

int main(){
    int N, i;
    scanf("%d", &N);
    getchar();
    char nomes[N][11];
    for(i=0;i<N;i++){
		scanf("%[^\n]s",nomes[i]);
		getchar();
	}
	for(i=0;i<N;i++){
		printf("%s\n",nomes[i]);
	}
	return 0;
}

Boa tarde pessoal!! preciso criar um programa que dada uma lista de N nomes (apenas nomes simples com no máximo 10 caracteres, sem espaço) verifique e imprima qual seria o primeiro em ordem alfabética.Isso foi o que eu fiz até agora, não sei como faz para ordenar. Obrigado!

  • Curtir 1
Postado

Para ordenar, você precisa verificar as letras de um nome selecionados em um loop com as letras dos outros nomes e enviar elas para um vetor secundário.

Exemplo de entrada:


'Mario'
'Iara'
'Luana'
'Marcos'

Na teoria, funcionaria assim:

Lista atual:
'Mario'
'Iara'
'Luana'
'Marcos'


Mario -> M > I  -> Iara Sobe
Continua buscas até a ultimo nome...

Lista atual:
'Iara'
'Mario'
'Luana'
'Marcos'


Mario -> M > L   -> Luana Sobe

Lista atual:
'Iara'
'Luana'
'Mario'
'Marcos'

Mario -> M == M  -> letra++
Mario -> a == a  -> letra++
Mario -> r == r  -> letra++
Mario -> i > c   -> Mario sobre

Com a lista atualizada...
Zerar loop se houve mudanças..usando flag
Ou então ir para proxima palavra...

Lembre-se que a é diferente de A. então use toupper ou tolower

E a é equivalente a um valor numérico da tabela ASCII, então, se você comparar 'a' com 'z':    a < z

  • Curtir 2
Postado

@AnaTrinity     para ordenar nomes é igual ordenar números , pois cada letra tem um valor numérico,   então você pode usar o método bubllesort ,  mas os nomes serão ordenados pela primeira letra e que seja todos os nomes em letras minúsculas  ou todos os nomes com letras maiúsculas,  se você misturar maiúsculas com minúsculas a ordenação não dará certo. então seu código com algumas modificações ficaria assim :

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

int main(){
    int N,j,i;
    char aux[11];
    printf("digite a quantidade de nomes ");
    scanf("%d", &N);
    getchar();
    char nomes[N][11];
    for(i=0;i<N;i++){
        printf("digite o %d nome ",i+1);
		scanf("%[^\n]s",nomes[i]);
		getchar();
	}
	printf("\naqui estão os nomes na ordem digitados\n");
	for(i=0;i<N;i++){
		printf("%s\n",nomes[i]);
	}
	for(i=0;i<N;i++){
        for(j=i+1;j<N;j++){
            if( nomes[i][0]>nomes[j][0]){
                strcpy(aux,nomes[i]);
                strcpy(nomes[i],nomes[j]);
                strcpy(nomes[j],aux);
            }
        }
	}
	printf("\naqui os nomes em ordem crescente\n");
	for(i=0;i<N;i++){
		printf("%s\n",nomes[i]);
	}
	return 0;
}

 

  • Curtir 1
  • Amei 1
Postado

@devair1010 muito obrigado, isso vai me ajudar bastante em outros exercícios !! mas como eu faria para exibir apenas o primeiro nome da ordem alfabética? 

 

ex.:

recebe: Zé

             Maria

             Paula

             Bruna

             Thaís

 

exibe: Bruna (pois entre os nomes digitados, é o primeiro da ordem alfabética)

 

 

  • Curtir 1
Postado
12 minutos atrás, devair1010 disse:

@AnaTrinity     o primeiro da ordem alfabética depois que o vetor estiver ordenado , fica na posição zero do vetor nomes ,  então você pode imprimir assim :


printf("%s\n",nomes[ 0 ]);

 

Agora entendi, muito obrigado!!

  • Curtir 1
  • Membro VIP
Postado

Acho que para esse exercício não precisa ordenar, basta usar o conceito de "menor" tradicional. Algo como "inicializar o menor como sendo o primeiro. Ai verifica um a um os próximos, se for menor que o menor, atualiza. No final, menor vai está com o menor nome."

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...