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

Não aparece "false", se pelo menos um dos dois valores passados como entrada for menor ou igual a zero.

function positivos(entrada1, entrada2, saida) {
    document.getElementById(saida).innerHTML = 
        "O resultado é " + maior(ler_entrada(entrada1, entrada2));
}

function ler_entrada(entrada1,entrada2) {
    var x = Number(document.getElementById(entrada1).value);
    var y = Number(document.getElementById(entrada2).value);

    return maior(x, y);


}

function escrever_saida(entrada1,entrada2,saida) {
    var m = ler_entrada(entrada1,entrada2);
    document.getElementById(saida).innerHTML = m;
}

    function maior(m) {

      return m > 0;

}

<html >
    <head>
        <meta charset="UTF-8" />
        <title>Programação Estruturada - Aula 04</title>
    </head>
    <body>
        <noscript>Seu navegador não suporta JavaScript ou ele está desabilitado.</noscript>

        <h1>Exercício</h1>

        <h2>Atividade 04-3</h2>

        x: <input type="number" id="entrada1" value="">
        y: <input type="number" id="entrada2" value="">
        <button onclick="positivos('entrada1','entrada2','resultado')">OK</button>
        <p id="resultado"></p>

        <script src="Atividade_04_3.js"></script>
    </body>
</html>
2 respostas
solução!

Bom dia, José! Tudo bem?

Testei seu código e ele até retorna false mas apenas se o x for menor ou igual a zero. Acredito que isso está acontecendo pois você passa diversos argumentos (por exemplo, maior(x, y)) para a função maior(m) que espera receber apenas um, então ele está considerando apenas a primeira informação (no caso o x).

Também vejo que você está usando a função maior() recebendo o próprio resultado dela na linha 3: maior(ler_entrada(entrada1, entrada2));. Nesse trecho está acontecendo isso:

  • Imagine que entrada1 = 2 e entrada2 = 0
  • O código recebeu para fazer o comando maior(ler_entrada(entrada1, entrada2))
  • Primeiramente, o código vai fazer ler_entrada(entrada1, entrada2), que vai retornar maior(x, y);
  • Esse maior() está esperando receber apenas uma informação, como citei antes. Nosso x é maior que zero, então irá retornar true. Consequentemente, o valor de ler_entrada() será true.
  • Substituindo o ler_entrada(entrada1, entrada2) pelo valor retornado, vamos ter: maior(true). Isso irá verificar se true > 0, e isso é verdadeiro.

Podemos resolver retirando essa repetição de verificar se o número é maior ou igual a zero, fazendo a função positivos() só chamar a função ler_entrada(). Desse jeito:

function positivos(entrada1, entrada2, saida) {
    document.getElementById(saida).innerHTML = 
        "O resultado é " + ler_entrada(entrada1, entrada2);
}

Também precisamos ajustar para a função maior() aceitar dois valores, para funcionar a verificação de x e y:

function maior(x, y) {
      return m > 0;
}

Ainda assim, como fazer ele retornar false caso x ou y seja menor ou igual a zero? Conseguimos usar isso usando o operador lógico && (AND).

function maior(x, y) {
      return (x > 0 && y > 0);
}

Esse operador lógico (&&) retornará true se ambos os casos forem true, se não, retornará false. No caso, se algum deles for menor ou igual a zero, o resultado é false.

Ajustando isso, seu código irá retornar false se pelo menos um dos dois valores passados como entrada for menor ou igual a zero.

Espero ter ajudado a ficar mais claro de como prosseguir com seu código, qualquer coisa pode me questionar ou nos procurar aqui pelo fórum, pode contar conosco!

Bons estudos!

Boa tarde, José! Tudo bem?

Por falta de retorno vou marcar o tópico como solucionado, se a dúvida ainda persistir insisto que abra um novo tópico =)

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software