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

Estou tendo o mesmo problema, repetidas vezes, do a string do mostra não aparecer. Queria saber o que há de errado.

 <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("Informe sua altura");
     var pesoInformado = prompt("Informe seu peso");

     var imc = calculaImc(alturaInformada, pesoInformado);

     mostra(nome + " , o seu IMC (Índice de Massa Corporal) é " + imc);

     if(imc < 18.5) {

         mostra(nome + ", você está abaixo do recomendado");

     }

     if(imc  > 35) {

         mostra(nome + ", você está acima do recomendado");

     }





 </script> 
6 respostas

Hugo,

Não tem nada errado com seu código, digo, o que está escrito funciona normalmente. O que você pode estar estranhando é que se o imc calculado estiver entre 18.5 e 35 nada acontece. Mas isto ocorre porque não está previsto no código. Precisa acrescentar um comparador 'if' pra considerar este intervalo de valores de imc. Há varias soluções, como esta abaixo:

<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("Informe sua altura");
    var pesoInformado = prompt("Informe seu peso");
    var imc = calculaImc(alturaInformada, pesoInformado);

    mostra(nome + " , o seu IMC (Índice de Massa Corporal) é " + imc);

    if(imc < 18.5) {
        mostra(nome + ", você está abaixo do recomendado");
    }

    if(imc  > 35) {
        mostra(nome + ", você está acima do recomendado");
    }

    if(imc >=18.5 && imc <= 35) {
        mostra(nome + ", seu imc está dentro do recomendado");
    }

</script> 

E mais uma vez, cuidado com a falta de ponto e vírgula ao final de cada linha de comando. Neste caso também não fez falta, mas é boa prática utilizar.

Akashi, acho q eu estou entendendo.

Então o 'if' só irá funcionar caso tenha também o intervalo das comparações de < e >, certo?

Isso mesmo Hugo, você precisa colocar todas as condições dentro de algum if ou então utilizar uma outra estrutura que ainda verá no curso, o else. Ele executa o código que não foi contemplado com nenhum if. Coloque o seguinte código abaixo do último if e veja o resultado:

else {
    mostra(nome + ", você está com o peso dentro do recomendado");
}

Abraços e bons estudos!

Hugo,

Cada 'if' verifica se uma condição é verdadeira ou falsa.

Seu código só verifica duas condições:

  • primeiro verifica se o imc é menor que 18.5. Se for menor que 18.5, escreve uma mensagem.

  • depois, verifica se o imc é maior que 35. Se for maior que 35, escreve outra mensagem.

Mas se o imc estiver entre 18.5 e 35, seu código não faz nada, porque não tem nenhum verificador desta condição. Então você tem que incluir algo que verifique se o imc está dentro destes valores, e então imprimir uma terceira mensagem.

Há várias maneiras de fazer isto, minha sugestão é apenas uma delas.

André,

sua sugestão não funcionará corretamente no código original do Hugo, porque simplesmente inserir o 'else' vai contemplar a condição em que o imc não for maior que 35, o que inclui a condição '< 18.5'.

Para usar o 'else' no final deste código seria necessário encadear os dois 'if' com mais um 'else' .

if(imc < 18.5) {
        mostra(nome + ", você está abaixo do recomendado");

    } else if(imc  > 35) {
             mostra(nome + ", você está acima do recomendado");

             } else {
            mostra(nome + ", imc dentro do recomendado");
}
solução!

Verdade Akashi, agora sim funcionará corretamente. Grato pela colaboração.

Abraços!