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

[Dúvida] Olha o cálculo do IMC novamente!

Gariel Dupla, em uma resposta a um colega você escreveu:

*"Boa Tarde Acemar, tudo certo?

Muito bem Acemar! A resposta correta é a letra B e por ser uma frase corrida não necessitamos da função pulaLinha. Quanto as demais alternativas:

A letra a não apresenta a função mostra, necessária para que o resultado apareça na tela;

*A letra c, apesar de ter as funções, o calculo do IMC está dentro da sua própria função, sendo assim, a função não é executada. Apenas declaramos a função e não a chamamos posteriormente." *

Não entendi uma coisa: você diz que o cálculo está dentro da própria função e, por isso, ela não é executada. O que estou entendendo é que o cálculo continuou dentro da função, uma vez que na resposta correta o "verdadeiro" cálculo "var imc = peso / (altura altura);" permaneceu dentro da função. O que saiu foram as informações "var imcCalculado = calculaImc(1.77, 75);" para que esse cálculo aconteça, ou seja, a altura e o peso.

O que eu não estou entendendo direito? Obrigado. Abs.

10 respostas

A sua dúvida é saber se o calculo foi executado? Se for isso, o calculo foi executado sim, mas não houve retorno do resultado. Para te provar que o calculo foi feito, segue o código abaixo:

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

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

    function calculaImc(altura, peso) {

        var imc = peso / (altura * altura);
        document.write(imc);
        pulaLinha();
    }

    var imcCalculado = calculaImc(1.77, 75);
    mostra("O meu IMC é : " + imcCalculado);

Link do código para você testar: https://jsfiddle.net/gtz3vpkL/

Bom dia, Lucas!

Obrigado pela resposta.

Eu entendi que o cálculo foi feito. Vou tentar esclarecer minha dúvida.

O Gabriel Dupla disse que a alternativa C está errada porque *...apesar de ter as funções, o calculo do IMC está dentro da sua própria função..."

No meu entendimento, pelo que ele disse, se o cálculo está dentro da função, ela não será executada.

Na alternativa correta (letra B) eu penso que o efetivo cálculo (a fórmula para o cálculo: "var imc = peso / (altura * altura);") continuou dentro da função. O que foi colocado fora da função foram as informações de peso e altura, através do "var imcCalculado = calculaImc(1.77, 75);".

Na minha cabeça, o cálculo, ou seja, "Para achar o índice de massa corporal você tem que dividir o peso pelo quadrado da altura" continuou dentro da função. O que foi retirado da função foram as informações que são necessárias para que esse cálculo ocorra. A minha interpretação do que ele disse é que para que a função seja executada, eu tenho que tirar o cáculo de dentro dela, isto é, tenho que tirar "var imc = peso / (altura * altura);" e não as informções para que o cálculo ocorra, ou seja, "var imcCalculado = calculaImc(1.77, 75);"

Com certeza, estou entendendo algo de forma errada, só não sei ainda o que é. Conto com a tua ajuda. Obrigado. Abs.

O calculo está sim sendo feito de dentro da função e nesse exemplo passado, o professor criou uma variável para armazenar o valor resultado do IMC calculado.

O que foi retirado da função foram as informações que são necessárias para que esse cálculo ocorra

Nada foi retirado da função, acontece que nessa função há passagem de parâmetros, que nesse caso são as variáveis peso e altura, que com elas calculamos o IMC dentro da função.

eu tenho que tirar o cáculo de dentro dela, isto é, tenho que tirar "var imc = peso / (altura * altura);" e não as informções para que o cálculo ocorra, ou seja, "var imcCalculado = calculaImc(1.77, 75);

Se com "tirar de dentro dela", você quer dizer "pegar o resultado", você está correto! Mas novamente:

var imcCalculado = calculaImc(1.77, 75);

Essa variável só foi criada para armazenar o resultado do calculo do IMC, que acontecerá dentro da função.

Mais uma vez, muito obrigado, Lucas!

Meu cérebro ainda está "amaciando".

Acho que entendi, mas faço outra pergunta: existe alguma regra/lei/princípio na programação que diga que dentro da função não possa ter 2 variáveis? Algo do tipo: "Se existirem duas variáveis dentro da mesma função a coisa não vai acontecer. E tenho dito!!!" rsrsrs

Por que teve que ser removida de dentro da função a variável "var imcCalculado = calculaImc(1.77, 75);"?

Obriado pela paciência. Abs.

existe alguma regra/lei/princípio na programação que diga que dentro da função não possa ter 2 variáveis? 

Não existe não.

Por que teve que ser removida de dentro da função a variável "var imcCalculado = calculaImc(1.77, 75);"?

Ela não foi removida de dentro da função. As funções, na programação, como o nome já diz, elas possuem uma função, que nesse caso serve para calcular o IMC. Imagine que a função é, sei lá, um Pokemon que quando é invocado solta um poder, mas esse poder pode ser definido por você, você escolhe qual poder ele terá. As funções são tipo isso, você escreve o que ela fará e depois a invoca.

No exemplo do professor, ele poderia ter feito assim também:

function calculaImc() {
        var altura = 1.83;
        var peso = 78;
        var imc = (altura * altura) / peso;
        document.write("O IMC calculado é " + imc);
}

calculaImc();

E pronto! o IMC seria calculado, pode testar o código.

Entendeu?

Lucas, mais uma vez, obrigado pelo teu tempo e disponibilidade.

Ao ser digitado function calculaImc(altura, peso){

    return peso / (altura * altura);
}

Na minha cabeça, o que está dentro da função é o que foi digitado entre as chaves {}. É isso ou o que está antes e depois das {} também faz parte da função?

Obrigado.

A função começa { e termina } e os códigos dentro dela só existem dentro dela, por isso que temos que chama-las. Tudo que não esta dentro de uma função é o que chamam de escopo global, já o que esta dentro da função é local. Entendeu?

Então, sim, você está certo! Tudo que esta dentro das chaves pertence somente a função.

Boa tarde, Lucas!

Estou vendo que meu problema é de língua portuguesa e não de linguagem de programação.

Na resposta do Gabriel Dupla, ele diz o seguinte:

A letra c, apesar de ter as funções, *o calculo do IMC está dentro da sua própria função**, sendo assim, a função não é executada. Apenas declaramos a função e não a chamamos posteriormente." *

Na MINHA interpretação, o que ele diz é o seguinte: o cálculo está dentro da própria função e, por isso, ela não é executada.

Só que, PARA MIM, o "cálculo", ou seja, a forma como eu vou "fazer a conta" é representada por "var imc = peso / (altura altura);" Isso, PARA MIM, é a verdadeira conta. E ela permaneceu dentro da função.

O que saiu foram as informações para que essa "conta" seja realizada, isto é, a altura e o peso, através de "var imcCalculado = calculaImc(1.77, 75);" .

Onde estou errando?

Oi, Sergio! Tudo bom?

A expressão var imc = peso / (altura * altura); dentro da função calculaImc() é, de fato, a parte que realiza o cálculo do IMC. O erro no código original era que a variável imcCalculado foi definida dentro da função calculaImc(), o que a tornou inacessível fora dessa função.

Teste os códigos das alternativas e você verá a diferença. A letra c não executa nada, pois a função não foi chamada corretamente, ela está sendo chamada dentro dela mesma.

solução!

Ana, Gabriel e Lucas, muito obrigado pela paciência, interesse e dedicação em esclarecer essa questão para mim. Agora foi! Obrigado.