Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Josesousa

C Ordem alfabetica em C

Recommended Posts

escreva um programa em c que pede para o usuario entrar com um numero correspondente a quantidade de nomes que serão definidos (entra 5 e 10) peça para o usuario entrar com os nomes, e coloque os nomes digitados em ordem alfabetica na tela

 

e se fosse assimgalera? mais de dois nomes

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Lekoribeiro!

Não é difícil de implementar, a base é a mesma; basta adicionar repetição e encarar o problema como se fosse uma tabela (matriz).

 

 

Para exibir as palavras: 

Spoiler

/* palavras_show: exibir no prompt lista de strings a partir da matriz */
void palavras_show( unsigned siz,char palavras_tabela[siz][47],int index[siz] )
{
    for (unsigned p= 0; p < siz; p+= 1) {
        printf( "%s ",palavras_tabela[index[p]] );
    }
    return;
}

 

 

Para indexar:

Spoiler

/*indexa: atribuir sequencia de inteiro a partir de uma valor inicial */
void indexa( unsigned siz,int index[siz],unsigned init )
{
    for (unsigned i= 0; i < siz; i+= 1) {
        
        index[i]= init + i;
    }
    return;
}

 

 

Pegar número de palavras:

Spoiler

/* pagar_palavras_numero: força entrad de valor inteiro de 5 à 10 */
int pagar_palavras_numero( void )
{
    unsigned palavras_numero= 0;
    char scanf_ret=  0;
    
    printf( "Entre com valor [5-10]: " );
    scanf_ret= scanf( "%u", &palavras_numero );
    
    while (!scanf_ret || (palavras_numero < 5 || 10 < palavras_numero)){
        
        int ch= getchar();
        while (ch != '\n') {
            putchar( ch );
            ch= getchar();
        }
        
        printf( "\n\n%s\n","Valor incorreto para numero de palavras!" );
        printf( "%s","Entre com valor [5-10]: " );
        scanf_ret= scanf( "%u", &palavras_numero );
    }
    return palavras_numero;
}

 

 

Ordenar em ordem crescente de letras:

Spoiler

/* palavras_sort: ordenar, matriz de strings, em ordem crescente de a-z  */
void palavras_sort( unsigned siz, char palavras_tabela[siz][47],int index[siz] )
{
    int trocar;
    
    indexa( siz,index,0 );
    do {
        trocar= 0;
        unsigned p= 0;
        while (p < siz-1) {
            if (strcmp( palavras_tabela[index[p]],
                        palavras_tabela[index[p+1]] ) > 0) {
                
                char tmp= index[p];
                index[p]= index[p+1];
                index[p+1]= tmp;
                trocar= 1;
            }
        p+= 1;
        }
    }while(trocar);
    return;
}

 

 

Programa principal:

Spoiler

/* -------------------------------- O PROBLEMA ---------------------------------
   escreva um programa em c que pede para o usuario entrar com um numero corres-
   pondente a quantidade de nomes que serão definidos (entra 5 e 10) peça para o
   usuario entrar com os nomes, e coloque os nomes digitados em ordem alfabetica
   na tela.
 */
#include <stdio.h>
#include <string.h>
int main( void ) 
{
    unsigned palavras_numero= pagar_palavras_numero();
    char palavras_tabela[palavras_numero][47];
    int palavras_indice[palavras_numero];
    
    printf( "%s","Ordena palavras em C\n" );
    for (unsigned i= 0; i < palavras_numero; i+= 1) {
        
        printf( "%s%u%s","Qual eh palavra na posicao [",i+1,"]: " );
        scanf( "%s",palavras_tabela[i] );
    }
    printf( "%s","Ordenando palavras ... \n" );
    palavras_sort( palavras_numero,palavras_tabela,palavras_indice );
    
    printf( "%s","Exibir palavras ordenadas: [ " );
    palavras_show( palavras_numero,palavras_tabela,palavras_indice );
    printf("]\n");
    return 0;
}

 

:thumbsup:

Editado por AnsiC
Correção
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado

adicionado 52 minutos depois

Olá amigos como corrijo esse programa que não aceita nome composto na ordenação alfabética e nem ordena de forma correta alfabeticamente palavras com acento como Ávila(palavras quando digitadas com acento ficam em ultimo)

 

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main ()

{

char nome[5][30], aux[30];

int vasco, tamanho; int quant;

do

{

printf("Programa que com uma determinada entrada coloca nome com numero de letras \n\n"); printf("\nDigite dentre os numeros a baixo uma quantidade de nomes para ordenar a seguir\n\n Escolha 5 6 7 8 9 ou 10 \n\n");

 

printf ("\nQuantidade de nomes: ");

scanf (" %d", &quant);

}

while (quant < 5 || quant > 10);

printf ("\n");

vasco = 0;

while (vasco < quant)

{

printf ("Nome escolhido: ");

scanf (" %s", nome[vasco]);

vasco++;

}

int brasil; for (brasil = 0; brasil < quant; brasil++)

{

for (vasco = brasil+1; vasco < quant; vasco++)

{

if (strcmp (nome[brasil], nome[vasco]) > 0)

{

strcpy (aux, nome[brasil]);

strcpy (nome[brasil], nome[vasco]);

strcpy (nome[vasco], aux);

     }

  }

}

printf ("\nNomes em ordem alfabetica - Numero de Letras \n\n");

vasco = 0;

while (vasco < quant)

{

tamanho = strlen (nome[vasco]);

printf ("Nome: %s - %d letras\n", nome[vasco], tamanho);

vasco++;

}

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×