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
Pergunta
lucastt182
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.
Editado por quintelabRemovido [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
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.