Ir ao conteúdo

Posts recomendados

Postado


Faça um programa que determine e escreva:
(a) A maior idade dos habitantes;
(b) A porcentagem entre os indivíduos do sexo masculino/feminino cuja idade está entre 18 e 30 anos,
inclusive; que tenham olhos verdes e cabelos loiros.
Utilize o comando switch no programa.

 

 

------------------------DÚVIDA--------------------------------

 

Pessoal, não estou conseguindo entender muito bem onde errei, meu programa não esta realizando o cálculo de porcentagem, alguém poderia me ajudar?

pensei em realizar toda coleta, e , baseado no sexo apenas testar dentro do case se satisfaz os valores que busco para o cálculo de porcentagem dos olhos azuis e cabelos loiros.

Não há bug na compilação, a maior idade aparece normalmente, apenas as porcentagens não aparecem.

 

 

//-----------------------------------------------------------------------------------------------------------
//  Programa   : Cadastro de Pessoas
//  Utilidade   : Lê um numero n de habitantes e os classifica por sexo, idade, olhos, cabelos. 

//                     da uma porcentagem de homens/mulheres de olhos azuis e cabelos loiros.
//  Autor      : Ivander 
//  Codificada : Dev-C++
//
//-----------------------------------------------------------------------------------------------------------
 
#include<stdio.h>
#include<conio.h>
 
//*entradas
int numhab, sexo, corolhos, corcabelos, idade;

//*process
int i;
int contadorH, contadorM;
//*saidas
int maioridade,porcentagemH,porcentagemM;


int main()
{
printf ("Quantos habitantes voce ira cadastrar?\n");
scanf  ("%d", &numhab);

        for (i=0; i<=numhab; i++)
        {
            printf ( "qual a idade do habitante?\n");
            scanf  ("%d", &idade);
            
                idade>maioridade?maioridade=idade:maioridade=maioridade;
        
            printf ( "qual o sexo do habitante?\n 1-Homem \n 2-Mulher\n");
            scanf  ("\n%d", &sexo);
            
            printf ( "qual a cor dos olhos do habitante?\n 1-Azul \n 2-Verde \n 3-Castanho \n");
            scanf  ("%d", &corolhos);
            
            printf ( "qual a cor dos cabelos do habitante?\n 1-Loiro \n 2-Castanho \n 3-Preto \n");
            scanf  ("%d", &corcabelos);
                
            switch ( sexo )
                {
                
                    case 1 :
                    if(18<=idade<=30);
                    if(corolhos==2);
                    if(corcabelos==1);
                    
                     contadorH++;
                    break;

                    case 2 :
                    if(18<=idade<=30);
                    if(corolhos==2);
                    if(corcabelos==1);
                     
                     contadorM++;
                    break;
                        
                    default :
                    printf ("Valor invalido!\n");
                    
                }
                    
                
        }
        
porcentagemH=contadorH/numhab*100;
porcentagemM=contadorM/numhab*100;    

    printf ("\n Maior idade fornecida:%d", maioridade);
    printf ("\n porcentagem de Homens loiros com olhos verdes:%d", porcentagemH);
    printf ("\n porcentagem de Mulheres loiras com olhos verdes:%d", porcentagemM);
}

    

    


    
    

Postado

@Ivander Olá. Não vi o código de maneira mais completa, mas batendo o olho no mesmo logo se destaca essa linha:

idade > maioridade ? maioridade = idade: maioridade = maioridade;

Se trata de operador ternário, mas do modo como está não vai funcionar

Pelo que entendi seria adequado mudar para isso:

maioridade = idade > maioridade ? idade : maioridade;

Pelo que testei parece que era esse o problema principal

Tem também a questão do seu for, seria ideal mudar para isso:

for (i = 0; i < numhab; i++)

Pois, do modo como estava, se eu decidisse cadastrar 2 habitantes tinha que cadastrar 3. Percebeu a lógica e o erro aí?

Outra dica, como você está trabalhando com porcentagem, seria mais interessante trabalhar com variáveis do tipo ponto flutuante (float ou double)

Vê se resolve o problema com essas dicas, ok?

Qualquer dúvida é só perguntar!

Postado

@Ivander Outro ponto que esqueci de mencionar. Para que seriam essas linhas?

if (18 <= idade && idade <= 30);
if(corolhos==2);
if(corcabelos==1);

No primeiro if já fiz uma pequena alteração, mas não se usa o ponto e vírgula em um comando if desse modo

Creio que o que você quer fazer seria algo assim:

if (18 <= idade && idade <= 30) {
    if (corolhos == 2 && corcabelos == 1) {
        contadorH++;
    }
}
break;

Estou correto?

 

 

Olá. Atualizando...

 

Mudei essas variáveis para float:

int maioridade;
float porcentagemH = 0, porcentagemM = 0;

Nos comandos if que comentei mudei para isso:

case 1 :
if (idade >= 18 && idade <= 30)
{
    if(corolhos == 2 && corcabelos == 1)
    {
        contadorH++;
    }
}
break;

case 2 :
if (idade >= 18 && idade <= 30)
{
    if (corolhos == 2 && corcabelos == 1)
    {
        contadorM++;
    }
}
break;

E no final mudei para isso:

porcentagemH = (float) (contadorH * 100) / numhab;
porcentagemM = (float) (contadorM * 100) / numhab;

printf ("\n Maior idade fornecida: %d", maioridade);
printf ("\n porcentagem de Homens loiros com olhos verdes: %.2f %%", porcentagemH);
printf ("\n porcentagem de Mulheres loiras com olhos verdes: %.2f %%", porcentagemM);

printf("\n");

return 0;

Agora está tudo ok aqui. Dá uma testada aí com essas mudanças, ok?

 

Também tem a linha que comentei logo no início:

maioridade = (idade > maioridade) ? idade : maioridade;

 

adicionado 28 minutos depois

Também tire o '\n' que tem em um comando scanf do seu código, ok?

Nessa parte seria isso:

printf ( "qual o sexo do habitante?\n 1-Homem \n 2-Mulher\n");
scanf  ("%d", &sexo); // sem o '\n' no scanf

 

Postado

@Ivander Olá. Segue seu código:

#include <stdio.h>

void fflush_stdin() {
    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

int main()
{
    //*process
    int i;
    int contadorH = 0, contadorM = 0;
    //*saidas
    int maior_idade = 0;
    float porcentagemH = 0, porcentagemM = 0;
    //*entradas
    int num_hab, sexo = 0, cor_olhos = 0, cor_cabelos = 0, idade = 0;

    printf ("Quantos habitantes voce ira cadastrar?\n");
    printf ("Resposta: ");
    scanf  ("%d", &num_hab);
    fflush_stdin();

    for (i = 0; i < num_hab; i++)
    {
        printf ( "Qual a idade do habitante %d?\n", i + 1);
        printf ("Resposta: ");
        scanf  ("%d", &idade);
        fflush_stdin();

        maior_idade = (idade > maior_idade) ? idade : maior_idade;

        do {

            printf ( "Qual o sexo do habitante?\n 1-Homem \n 2-Mulher\n");
            printf ("Resposta: ");
            scanf  ("%d", &sexo);
            fflush_stdin();

            if (sexo != 1 && sexo != 2)
            {
                printf("\nOpcao invalida!\n\n");
                continue;
            }

        } while (sexo != 1 && sexo != 2);

        printf ( "Qual a cor dos olhos do habitante?\n 1-Azul \n 2-Verde \n 3-Castanho\n");
        printf ("Resposta: ");
        scanf  ("%d", &cor_olhos);
        fflush_stdin();

        printf ( "Qual a cor dos cabelos do habitante?\n 1-Loiro \n 2-Castanho \n 3-Preto\n");
        printf ( "Resposta: ");
        scanf  ("%d", &cor_cabelos);
        fflush_stdin();

        switch ( sexo )
        {
        case 1 :
            if (idade >= 18 && idade <= 30)
            {
                if(cor_olhos == 2 && cor_cabelos == 1)
                {
                    contadorH++;
                }
            }
            break;
        case 2 :
            if (idade >= 18 && idade <= 30)
            {
                if (cor_olhos == 2 && cor_cabelos == 1)
                {
                    contadorM++;
                }
            }
            break;
        default :
            printf ("\nValor invalido!\n\n");
            break;
        }
    }

    porcentagemH = (float) (contadorH * 100) / num_hab;
    porcentagemM = (float) (contadorM * 100) / num_hab;

    printf ("\n Maior idade fornecida: %d", maior_idade);
    printf ("\n porcentagem de Homens loiros com olhos verdes: %.2f %%", porcentagemH);
    printf ("\n porcentagem de Mulheres loiras com olhos verdes: %.2f %%", porcentagemM);

    printf("\n");

    return 0;
}

Vê se está tudo de acordo e funcionando agora

Postado

Nossa @giu_d , ninguém faz esse tipo de coisa ! 
Muito obrigado mesmo. 

Tenho todo cuidado para pedir ajuda, pois sei que não é justo pegar trabalho dos outros.
irei aprender em seu código e não só reproduzi-lo.

MUITO OBRIGADO!

adicionado 11 minutos depois

não só rodou, como teve várias correções;

principalmente de apresentação e leitura de dados.

  • 11 meses depois...

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!