Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Código funciona mas não completamente

Pensando em melhorar o programa de IMC criei outras condicionais, com base nos valores descritos pela OMS. O código funciona na maioria das vezes, já testei algumas variações de alturas e pesos. No entanto, quando insiro a altura "1.55" e o peso "60" ele retorna apenas a primeira frase de "Mariana, seu IMC é 24.97398543184183"

Já tentei mexer nas atribuições de ">=" e "<=", testando com e sem o sinal de igual, mas não obtive sucesso. Gostaria que o código funcionasse para todo tipo de altura/peso inserido.

<meta charset="UTF-8">

<script>

    function pulaLinha() {
        document.write("<br><br>");
    }

    function mostra(frase) {
        document.write(frase)
        pulaLinha();
    }

    function calculaImc(altura, peso){
        return peso / (altura * altura);

    }
        var nome = prompt("Informe seu nome");
        var alturaInformada = prompt("Olá, " + nome + "! Informe sua altura:");
        var pesoInformado = prompt(nome + ", agora informe seu peso:");    

        var imc = calculaImc(alturaInformada, pesoInformado);

        mostra(nome + ", seu IMC é " + imc)

        if (imc < 18.5) {
            mostra(nome + ", seu peso está abaixo do esperado. Sua classificação é Abaixo do Peso");
        }

        if (imc >= 18.5 && imc <= 24.9) {
            mostra(nome + ", seu peso está dentro do esperado. Sua classificação é Peso Ideal");
        }

        if (imc >= 25 && imc <= 29.9) {
            mostra(nome + ", seu peso está um pouco acima do esperado. Sua classificação é Sobrepeso");
        }

        if (imc >= 30 && imc <= 34.9) {
            mostra(nome + ", seu peso está acima do esperado. Sua classificação é Obesidade I");
        }

        if (imc > =35 && imc <= 39.9) {
            mostra(nome + ", seu peso está acima do esperado. Sua classificação é Obesidade II");
        }

        if (40 < imc) {
            mostra(nome + ", seu peso está bem acima do esperado. Sua classificação é Obesidade Mórbida");
        }


</script>

Uma outra dúvida que tenho é sobre o uso de "" dentro do código. Na parte de classificações tive de mantê-las sem as aspas pois quando botei com o código não funcionou. Podem me ajudar?

3 respostas

Boa noite Mariana, tudo bem?

Para altura 1.55 e peso 60 o IMC é 24.9, certo?

No seu código, ele não vai entrar no segundo if que é ate 24.97.

E como também é menor que 25, não vai entrar no 3°.

E isso vai acontecer para varios valores diferentes, pois você está eliminando a possibilidade de muitos valores.

Assim, temos duas soluções:

A 1° consiste em você mudar as condições para:

if(imc < 18.5) ...

if(imc >= 18.5 && imc < 25) ...

Entendeu a diferença? Maior ou igual X até Y...

A 2° solução, e mais prática seria colocar alguns if..else if

(Continuação, tô no celular e deu bug aqui)

Exemplo:

if(x < 18.5){ ..

}else if (x < 25) { ... } else if(x < 30){ ....

Entendeu?? Espero que tenha ficado

solução!

Oi Mariana, É pq você não incluiu o valor 24,97 em nenhum if. Vamos lá, você concorda que teu segundo if está dizendo : o imc no intervalo de 18,5 até 24.9. Ou seja, 24.97 é maior. teu terceiro if está dizendo: o imc é no intervalo entre 25 até 29.9. Ou seja, 24,97 é menor que o intervalo. Tem duas formas de você solucionar isso.

A primeira: se analisar, o valor 24,97.... vai ser arredondado para cima, ou seja, ele deveria ser considerado como 25. Assim, você pode colocar no teu terceiro if (imc >= 24.9000001 && imc <= 29.9) .... Assim, 24.97 seria maior que 24.9000001. Mas concordamos que isso não é nada prático.

Mais para frente do curso, você vai aprender a função Math.round() que irá arredondar logo os valores para você. Essa é a segunda forma, você escrever: var imc = Math.round(calculaImc(alturaInformada, pesoInformado)); e deixar seus if's iguais como estão agora, o próprio programa irá arredondar tudo.

espero ter ajudado