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:  
Entre para seguir isso  
João Friatzsa

C Nomes em ordem alfabética

Recommended Posts

Estou fazendo um exercício que lê três nomes e os organiza em ordem alfabética, no primeiro algoritmo que fiz, recebia um erro incomum de else sem um if prévio, então resolvi começar o algoritmo do zero. Consegui rodar, porém agora o programa não exibe o primeiro nome, no segundo ele exibe alguns caracteres estranhos e só exibe o terceiro corretamente. O que pode ser isso? Meu código: 

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

int main()
{
    setlocale(LC_ALL,"");

    char nome1[30];
    char nome2[30];
    char nome3[30];
    char P[30];
    char S[30];
    char T[30];

    printf("Fale o primeiro nome: ");
    fgets(nome1, 30, stdin);
    printf("Fale o segundo nome: ");
    fgets(nome2, 30, stdin);
    printf("Fale o terceiro nome: ");
    fgets(nome3, 30, stdin);

    int pr = 0;
    int se = 0;
    int te = 0;

    if(strcmp(nome1, nome2) > 0 && strcmp(nome1, nome3) > 0)
    {
        strcpy(P, nome1);
        pr++;
    }
    else
    {
        if(strcmp(nome1, nome2) < 0 && strcmp(nome1, nome3) > 0 || strcmp(nome1, nome2) > 0 && strcmp(nome1, nome3) < 0)
        {
            strcpy(S, nome1);
            se++;
        }
        else
        {
            if(strcmp(nome1, nome2) < 0 && strcmp(nome1, nome3) < 0)
            {
                strcpy(T, nome1);
                te++;
            }
            else
            {
                if(pr == 0 && strcmp(nome2, nome3) > 0)
                {
                    strcpy(P, nome2);
                    pr++;
                }
                else
                {
                    if(pr > 0 && strcmp(nome2, nome3) > 0)
                    {
                        strcpy(S, nome2);
                        se++;
                    }
                    else
                    {
                        if(strcmp(nome2, nome1) < 0 && strcmp(nome2, nome3) < 0)
                        {
                            strcpy(T, nome2);
                            te++;
                        }
                        else
                        {
                            if(pr == 0)
                            {
                                strcpy(P, nome3);
                                pr++;
                            }
                            else
                            {
                                if(se == 0)
                                {
                                    strcpy(S, nome3);
                                    se++;
                                }
                                else
                                {
                                    if(te == 0)
                                    {
                                        strcpy(T, nome3);
                                        te++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    printf("Os nomes em ordem alfabética\n\n%s\n%s\n%s", P, S, T);

    return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@João Friatzsa    se você puder usar vetor seria mais fácil,  no entanto usando variáveis simples também dá para fazer,  e esse seu código precisaria de algumas modificações , então ele ficaria assim :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main(){
    setlocale(LC_ALL,"");
    char nome1[30];
    char nome2[30];
    char nome3[30];
    char P[30];
    char S[30];
    char T[30];
    char a[2],b[2],c[2];
    int l,w;
    printf("Fale o primeiro nome: ");
    fflush(stdin);
    gets(nome1);
    printf("Fale o segundo nome: ");
    fflush(stdin);
    gets(nome2);
    printf("Fale o terceiro nome: ");
    fflush(stdin);
    gets(nome3);
    a[0]=nome1[0];
    b[0]=nome2[0];
    c[0]=nome3[0];
    if(a[0]<b[0]&&a[0]<c[0]){strcpy(P,nome1);l=1;w=1;}
    if(b[0]<a[0]&&b[0]<c[0]){strcpy(P,nome2);l=2;w=2;}
    if(c[0]<a[0]&&c[0]<b[0]){strcpy(P,nome3);l=3;w=3;}
    if(l==1){
        if(b[0]<c[0]){
            strcpy(S,nome2);
            l=2;
        }
        else{
            strcpy(S,nome3);
            l=3;
        }
    }
    else{
        if(l==2){
            if(a[0]<c[0]){
                strcpy(S,nome1);
                l=1;
            }
            else{
                strcpy(S,nome3);
                l=3;
            }
        }
        else{
            if(l==3){
                if(a[0]<b[0]){
                    strcpy(S,nome1);
                    l=1;
                }
                else{
                    strcpy(S,nome2);
                    l=2;
                }
            }
        }
    }
    if( w == 2 && l == 3 || w == 3 && l == 2 )strcpy(T,nome1);
    if( w == 1 && l == 3 || w == 3 && l == 1 )strcpy(T,nome2);
    if( l == 2 && w == 1 || w == 2 && l == 1 )strcpy(T,nome3);
    printf("Os nomes em ordem alfabética\n\n%s\n%s\n%s", P, S, T);
    return 0;
}

 

Editado por devair1010
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 Não consegui entender o uso dessas variáveis, pra que elas servem? 

    48 minutos atrás, devair1010 disse:

    a[0]=nome1[0]; b[0]=nome2[0]; c[0]=nome3[0];

    Ah, e posso usar vetor sim.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @João Friatzsa   elas servem para pegar o primeiro caractere da palavra e depois comparar uma com a outra na mesma posição na string que é a palavra, a que tiver o número do  caractere menor,por exemplo, o A = 65  o B =66 e assim ate Z=90 ,   será a primeira palavra, o que tiver o segundo número menor será a segunda palavra e a outra será a terceira palavra .

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @devair1010 Não sei se é relevante, mas não tem como fazer o código em um for para contar quem tem as menores letras e ir seguindo até determinar qual palavra teve menos contagem, exemplo, tem duas palavras:

    1) joao 

    2) mari

     

    j < m   -> palavra1++

    o > a   -> palavra2++, mas como a  'j'  já é menor, então não tem necessidade de continuar... só se fossem iguais

     

    usando um if:

     

    if(palavra1 < palavra2){

     //...

    }

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @TYSQUARE89    sim provavelmente funcionaria ,   mas aí já é para determinar a segunda letra, com isso ficaria bem mais sofisticado e bem melhor , mas por falta de tempo foi o que consegui pensar .

    • Obrigado 1

    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

    Entre para seguir isso  





    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

    ×