Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ripper

[Resolvido] O que há de errado?

Recommended Posts

Bom pessoal tava tentando fazer um programa para este problema:

Faça um programa em C que leia o peso (ex: 50Kg) e a altura (em metros:

1,65m) de uma pessoa. Em seguida calcule o IMC (IMC = peso/altura2) e, de acordo

com a tabela abaixo, indique qual a sua situação da pessoa. (2,0 pontos)

IMC < 20 Abaixo do peso ideal

20 ≤ IMC < 25 Peso normal

25 ≤ IMC < 30 Acima do peso ideal

IMC ≥ 30 Obeso

e fiz o seguinte :

 

 

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int x;
    float y,imc;
    printf("Digite seu peso: ");
    scanf("%d", &x);
    printf("Digite sua altura: ");
    scanf("%f", &y);
    imc=(x/(y*y));
    printf("\nSeu imc e: %f\n",imc);
    if (imc < 20) printf("Voce esta abaixo do peso ideal\n");
    if (20 <= imc < 25) printf("Voce esta com o peso ideal\n");
    if (25 <= imc < 30) printf("Voce esta acima do peso ideal\n");
    else if (imc >= 30) printf("Voce esta obeso");
    system("Pause");
    return(0);
}
O problema é que se digito peso=100 e altura=1.7 o programa retorna: 'você esta com peso ideal' e 'você esta acima do peso ideal', ao invés de 'você esta obeso'. O que há de errado? Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, ao meu ver, o seu a logica do seu código está correta.

O problema aparece quando você vai multiplicar Peso x Altura.

Você terá que converter a Altura e o Peso para que fiquem

nas mesmas unidades proporcionais.

Ex.:

kg | hg | dag | g | dg | cg | mg

 

km | hm | dam | m | dm | cm | mm

 

Esse arquivo em pdf vai te ajudar com isso

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pode até ser, mas o problema principal é que se o imc der 23 ,por exemplo, a resposta sai 'voce esta com o peso ideal' e 'voce esta acima do peso ideal' ao mesmo tempo e era pra sair só 'voce esta com o peso ideal'. O programa (Dev-c++) parece que não reconhece 25<=imc no terceiro if, ele interpreta como se fosse menor que 25(certo) e menor que 30 ao mesmo tempo ( errado pois tem 25<=imc).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use system("pause").

http://forum.imasters.com.br/index.php?/topic/336835-tutorial-systempause-e-fflushstdin/

 

Teu problema é muito claro:

if (25 <= IMC < 30) .....
Em C, não existe isso!

A única linguagem que eu conheço e que entende esse tipo de comparação é python.

mude para:

if (25 <= IMC && IMC < 30) ....

E para já, da pra dar uma otimizada nesse código.

if (a) ....;
if (B) ....;
ic (c) ....;
//O teu computadro executará as três comparações.
// Podemos poupar ele fazendo:

if (a) .....;
else if (B) ....;
else if (c) ....;
//dessa forma, se entrarmos logo no "a", não vamos precisar checar por "b" nem por "c".

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use system("pause").

http://forum.imasters.com.br/index.php?/topic/336835-tutorial-systempause-e-fflushstdin/

 

Teu problema é muito claro:

if (25 <= IMC < 30) .....
Em C, não existe isso!

A única linguagem que eu conheço e que entende esse tipo de comparação é python.

mude para:

if (25 <= IMC && IMC < 30) ....

E para já, da pra dar uma otimizada nesse código.

if (a) ....;
if (B) ....;
ic (c) ....;
//O teu computadro executará as três comparações.
// Podemos poupar ele fazendo:

if (a) .....;
else if (B) ....;
else if (c) ....;
//dessa forma, se entrarmos logo no "a", não vamos precisar checar por "b" nem por "c".

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Valeu mesmo victor. Tava com esse mesmo problema em outros programas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.