Ir para conteúdo
Fórum Script Brasil
  • 0

Exercicio de Registros


lucastt182

Pergunta

Olá, eu queria pedir ajuda dos programadores mais experientes com um exercício de C.

Eis o enunciado:

"Foi realizada uma pesquisa sobre algumas características físicas de 50 habitantes de certa região. De cada habitante foram coletados os seguintes dados: sexo, altura, idade e cor dos olhos(A- azuis, V- verdes, C-castanhos).

Faça um programa que leia os dados armazene-os em um registro tipo vetor e determine:

* a média das pessoas com olhos castanhos e altura superior a 1.60 m;

* a maior idade dos habitantes;

* a quantidade de indivíduos do sexo feminino com idade entre 20 e 45 anos(inclusive) ou que tenham olhos verdes e altura inferior a 1.70m;

* percentual de homens;"

Estou com problemas nos dois últimos requisitos do programa, aqui está meu código ( utilizei um vetor de tamanho 2 no registro apenas para facilitar no processo de debug). Por enquanto estou apenas exibindo a quantidade de homens.

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // a função strupr necessita desta biblioteca

// declarando os registros
struct{

        char sexo[1], corOlhos[1];
        float altura;
        int idade;


} pessoas[2];

int main(){

        // declarando as variáveis
        int i, k, maiorIdade, qtdMulheres, qtdHomens;
        float somaIdades;
        char handler[1];

        // inserindo os dados no registro
        for(i=0;i<2;i++){
        
                printf("\nQual o sexo da %da. pessoa? M/F \n", i+1);
                        scanf("%s", handler);

                        // Este loop converte o que handler recebe para maiúsculo.
                        for(k=0;handler[k]!=''; k++){

                                handler[k] = toupper(handler[k]);  
                
                        }

                        // Fazendo a verificação do que a variável handler recebeu. Se passar na verificação, a variável pessoas[i].sexo recebe o valor de handler.
                        // Se não passar na verificação, exibe mensagem e retorna ao início do loop
                        if((strcmp(handler,"M")== 0) || (strcmp(handler, "F")==0)){

                                for(k=0;handler[k]!=''; k++)

                                        pessoas[i].sexo[k] = handler[k];

                        } else {

                                printf("\nSexo inválido, digite apenas M ou F !");
                                i--;
                                continue;

                        }               
                
                printf("\nDigite a altura: ");
                        scanf("%f", &pessoas[i].altura);

                printf("\nDigite a idade: ");
                        scanf("%d", &pessoas[i].idade);
                        
                printf("\nQual a cor dos olhos? C(castanhos)/A(azuis)/V(verdes) : ");
                        scanf("%s", handler);

                        // Passando o que foi digitado para cor dos olhos para MAIÚSCULO e fazendo a verificação do que foi digitado.
                        for(k=0; handler[k]!=''; k++)
                
                                handler[k] = toupper(handler[k]);

                        // Verificando se o valor digitado para cor dos olhos é igual a C, A ou V
                        if((strcmp(handler,"C")==0) || (strcmp(handler,"A")==0) || (strcmp(handler,"V")==0)) {
                
                                for(k=0;handler[k]!=''; k++)                  
                                        pessoas[i].corOlhos[k] = handler[k];
                
                        } else {

                                printf("\n\nA cor dos olhos digitada é inválida! Utilize: C(castanhos), A(azuis) ou V(verdes!\n");
                                i--;
                                continue;               

                        }

        }

        // verificando o registro
        
        somaIdades = 0;
        maiorIdade = 0;

        
        for(i=1;i<2;i++){
        
                // soma a idade das pessoas de olhos castanhos e altura superior a 1,60 m
                // IMPORTANTE : para fazer a comparação entre 2 STRING's utiliza-se o comando STRCMP( string1, string2) => retorna ZERO se forem iguais
                if((strcmp(pessoas[i].corOlhos,"C")==0) && (pessoas[i].altura>1.60)) {

                        somaIdades += pessoas[i].idade; 
                
                }

                // verifica qual a maior idade entre as pessoas cadastradas no registro
                if(pessoas[i].idade> pessoas[maiorIdade].idade)
                        maiorIdade = i; 


        
        }

        qtdMulheres = 0;
        qtdHomens = 0;

        // é nesta parte aqui embaixo que estou com problemas V

        for(i=0;i<2;i++){
        
                // verifica a quantidade de mulheres com idade entre 20 e 45 anos(inclusive). Se a verificação anterior retornar 0(zero), verifica a quantidade de mulheres de olhos verdes e altura                    //inferior a 1.70 m e salva essa quantidade em uma variável     
                if(strcmp(pessoas[i].sexo,"F")==0){

                        // #rofl, essa verificação aqui tá pequena hein :P                      
                        if((pessoas[i].idade>20) && (pessoas[i].idade<=45)) 
                                qtdMulheres++;
                                                        
                        if((strcmp(pessoas[i].corOlhos,"V")==0) && (pessoas[i].altura<1.70))    
                                qtdMulheres++;

                }

                // calcula a quantidade de homens existentes no cadastro
                if(strcmp(pessoas[i].sexo,"M")==0)                      
                        qtdHomens++;    


        }


        // exibindo os resultados das verificações

        printf("\nA media das idades de pessoas de olhos castanhos e altura superior a 1.60 m é : %3.2f", somaIdades/2);
        printf("\nA maior idade das pessoas cadastradas é : %d", pessoas[maiorIdade].idade);
        printf("\nA quantidade de mulheres de idade entre 20 e 45 anos(inclusive) ou que tenham olhos verdes e altura inferior a 1.70 m é : %d", qtdMulheres);
        printf("\nA quantidade de homens é: %d\n", qtdHomens);

        return 0;

}

Editado por quintelab
Removido [AJUDA] do título e descrição do tópico
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

* a quantidade de indivíduos do sexo feminino com idade entre 20 e 45 anos(inclusive) ou que tenham olhos verdes e altura inferior a 1.70m;

Nesta solução crie um contador e coloque logo após a verificação dos olhos:

int countMulher = 0;

if( ( pessoa[i].idade >= 20 ) && ( pessoa[i].idade<=45 ) && ( !strcmp( pessoa[i].corOlhos == "V" ) && ( pessoa[i].altura < 1.70 ) )
{
   countMulher++;
}

* percentual de homens;"

Aqui basta fazer um cálculo simples.

1- Crie uma variável countHomens e todas vez que for homem incrementa;

2- Crie um countTotal para contar homens e mulheres;

3- Faça a formula ( countHomens * 100 / countTotal )

Espero ter ajudado, att

WebPantoja

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado webpantoja mas não deu certo aqui.

Fiz um for simples para verificar qual eram os valores das variáveis, e percebi que o programa está passando para a variável pessoas.sexo , o sexo digitado(M ou F) + a cor dos olhos digitada( C, V ou A)

Resultando , por exemplo, MV . Não consegui encontrar uma solução para isso. Agradeço a ajuda do webpantoja , e peço que mais alguém me ajude :D

Obrigado novamente :D

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...