Ir ao conteúdo
  • Cadastre-se

C Ordem alfabetica em C


UmPrograma

Posts recomendados

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
Link para o comentário
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:

  • Curtir 1
Link para o comentário
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;

}

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!