Ir ao conteúdo

Posts recomendados

Postado

"A direção de um Posto de Saúde fez uma pesquisa para avaliar o IMC de seus pacientes de acordo com a tabela a seguir:

 

IMC

Classificação

Abaixo de 18

Magreza

De 18 até 25

Normal

Maior do que 25 até 30

Pré-obeso

Acima de 30

Obesidade


O cálculo do IMC é feito pela fórmula: IMC = peso/altura^2

Para ajudar a direção do Posto de Saúde na organização dos dados, você deve fazer um algoritmo que leia o peso (kg) e a altura (m) de vários pacientes, até que seja digitado um valor negativo para o peso. Ao ser digitado um valor negativo para o peso, nada mais deve ser digitado pelo usuário.

Ao final, o algoritmo deve calcular e exibir:

a) A porcentagem de pacientes classificados como "Magreza";
b) A porcentagem de pacientes classificados como "Normal";
c) A porcentagem de pacientes classificados como "Pré-obeso";
d) A porcentagem de pacientes classificados como "Obesidade"."

 

essa é a questão 

#include <stdio.h>



int main(void) {

float peso, altura, imc;

int total, totalMagreza, totalNormal, totalPreO, totalObesidade;

float Pmagreza, Pnormal, Ppreobeso, Pobesidade;

printf("Informe seu peso \n");

scanf("%f", &peso);

printf("Informe sua altura \n ");

scanf("%f", &altura);

total++;

imc= peso/altura*peso/altura;

if ( imc > 18){ //magreza

totalMagreza++;

}

if (imc >=18 && imc <=25) { //normal

totalNormal++;

}

if (imc > 25 && imc < 30) { //pré obeso

totalPreO++;

}

if (imc > 30) { //obesidade

totalObesidade++;

}

while (peso > 0) {

printf("Informe seu peso \n");

scanf("%f", &peso);

printf("Informe sua altura \n ");

scanf("%f", &altura);

altura = altura+total;

total++;

}

imc= peso/altura*peso/altura;

if ( imc > 18){

totalMagreza++;

}

if (imc >=18 && imc <=25) {

totalNormal++;

}

if (imc > 25 && imc < 30) {

totalPreO++;

}

if (imc > 30) {

totalObesidade++;

}



Pmagreza= totalMagreza*100/total;

Pnormal= totalNormal*100/total;

Ppreobeso= totalPreO*100/total;

Pobesidade= totalObesidade*100/total;

printf("A porcentagem de pacientes classificados como Magreza %.2f\n", Pmagreza);

printf("A porcentagem de pacientes classificados como Normal %.2f\n", Pnormal);

printf("A porcentagem de pacientes classificados como Pré Obeso %.2f\n", Ppreobeso);

printf("A porcentagem de pacientes classificados como Obesidade %.2f\n", Pobesidade);

return 0;

}

o cod que fiz até agora, ele não está rodando direito, alguém poderia me falar onde esta o erro 

  • Obrigado 1
Postado

@andrieli.m31   o calculo do IMC  está errado , e poderia ser assim  :

#include <stdio.h>
int main(void) 
{
    float peso=0, altura=0, imc=0;
    int   total=0, totalMagreza=0, 
          totalNormal=0, totalPreO=0, 
          totalObesidade=0;
    float Pmagreza, Pnormal, Ppreobeso, 
          Pobesidade;
    printf("Informe seu peso \n");
    scanf("%f", & peso);
    printf("Informe sua altura \n ");
    scanf("%f", & altura);
    total++;
    //imc = peso / altura * peso / altura;
    imc = peso / (altura * altura);
    printf("imc = %.2f\n",imc);
}

 

  • Curtir 1
Postado

@andrieli.m31 Olá!

É fácil dizer o que está certo!

 

#1 Parcialmente Certo.

while (peso > 0) {
        printf ("Informe seu peso \n");
        scanf ("%f", &peso);
      

        printf ("Informe sua altura \n ");
        scanf ("%f", &altura);

        altura = altura + total;

        total++;
}

Enunciado que a captura continua até seja digitado um valor negativo, o mesmo que ENQUANTO positivo.

Porém, nesse fragmento acima, ainda que o valor que inicia a variável seja positivo ha problema no 'loop'. Note que se digitarmos valor negativo segue solicitando altura, isso é errado.

 

— Eu, em seu lugar, tentaria de novo.

 

A expressão

        altura = altura + total;

é insignificante à solução do problema.

 

#2

5 horas atrás, andrieli.m31 disse:

O cálculo do IMC é feito pela fórmula: IMC = peso/altura^2

imc = peso / altura * peso / altura;

quase, note ser equivalente a: (peso)*peso / (altura)*altura

diferente do quociente do peso com quadrado da altura (citado no enunciado e no post acima desse): peso / (altura * altura)

 

#3

  if (imc > 18) {	//magreza
     totalMagreza++;
  }
  if (imc >= 18 && imc <= 25) { //normal
     totalNormal++;
  }
  if (imc > 25 && imc < 30) { //prC) obeso
     totalPreO++;
  }
  if (imc > 30) {	//obesidade
     totalObesidade++;
  }

A contagem de padrões (e os padrões) ficam preferencialmente no ‘loop’ onde após cada captura são verificados  e incrementados.

 

imc > 18

Predicado errado (no operador): certo conforme OMS/BVS, imc < 18 

 

Citação

Classificação do IMC (BVS):

----------------------------
Menor que 18,5 - Abaixo do peso
Entre 18,5 e 24,9 - Peso normal
Entre 25 e 29,9 - Sobrepeso (acima do peso desejado)
Igual ou acima de 30 - Obesidade

 

imc > 25 && imc < 30

Enunciado "até 30" (imc <= 30). Porém, a saúde diz até 29.9 (imc < 30).

Escreva, só dessa vez, conforme enunciado.

 

5 horas atrás, andrieli.m31 disse:

IMC / Classificação

--------------------------

Abaixo de 18 / Magreza

De 18 até 25 / Normal

Maior do que 25 até 30 / Pré-obeso

Acima de 30 /Obesidade

 

 

Para mim, tem conhecimento suficiente dos recursos da linguagem para resolver o problema.

[:)] — Eu tentaria até conseguir.

 

 

  • Obrigado 1
Postado
5 horas atrás, andrieli.m31 disse:

int total, totalMagreza, totalNormal, totalPreO, totalObesidade;

 

Inicie todas essas variáveis com zero ou elas podem conter valores indefinidos.

 

O enunciado diz para sair do loop quando o peso for negativo, então teste o valor do peso. E para sair pode chamar o comando break

if(peso < 0) break;

 

Ou coloque os outros comandos dentro de um if para só incrementar as variáveis caso o peso não seja negativo, p;ex,  

do{
    printf("Peso: ");
    scanf("%f", &peso);
    if(peso >= 0){
        ...        
    }  
}while(peso >= 0);

 

A condicional do imc está errada. No primeiro if está testando imc maior que 18 quando devia ser menor. A última condicional pode ser só else. E esses comandos deviam ficar dentro do loop, mas estão fora.

  • Curtir 1
  • Obrigado 2

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