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

Código apresentado na Opinião do Instrutor incompleto

Código apresentado na Opinião do Instrutor:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

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

    var idade = parseInt(prompt("Qual é sua idade"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

    if( idade >= 18 ) {
        if( temCarteira == "S") {
            mostra("Pode dirigir");
        }
    }

    if(idade < 18) {
        mostra("Não pode dirigir");
    }

</script>

Na minha opinião esse código está incompleto, pois está faltando um else; quando se testa , por exemplo, idade 19 e temCarteira = N, não retorna nenhuma resposta.

O mesmo acontece na resolução alternativa, apresentado como melhoria de código:

    var idade = parseInt(prompt("Qual é sua idade"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

    if( idade >= 18 && temCarteira == "S") {
        mostra("Pode dirigir");
    }

    if(idade < 18) {
        mostra("Não pode dirigir");
    }

Se utilizar o código abaixo funciona em todas as condições:

  if( idade >= 18 ) {
        if( temCarteira == "S") {
            mostra("Pode dirigir");
        } else
            {
            mostra("Não pode dirigir");}
    }

    if(idade < 18) {
        mostra("Não pode dirigir");
    }

Se a solução apresentada na Opinião do Instrutor estiver correto, eu gostaria de receber explicação.

5 respostas

Olá, Takae!

Faz muito sentido o que você disse!

Vale pensar nas condições de teste: - menor de 18 e sem carteira - NÃO - maior de 18 e sem carteira - NÃO - maior de 18 e com carteira - SIM - exatamente 18 e sem carteira - NÃO - exatamente 18 e com carteira - SIM

A condição "menor de 18 e com carteira" não faz sentido, né?

Chegou a ver a última solução do instrutor?

Tem o mesmo efeito da sua, mas sem repetir o código da mensagem "Não pode dirigir":

if( idade >= 18 && temCarteira == "S") {
        mostra("Pode dirigir");
} else {
        mostra("Não pode dirigir");
}

Oi, Alexandre, tudo bem?

Acho que eu não consegui explicar bem. Na Opinião do Instrutor foi dada 3 soluções, das quais duas estão incompletas.

A primeira é: ... if( idade >= 18 ) { if( temCarteira == "S") { mostra("Pode dirigir"); } }

if(idade < 18) { mostra("Não pode dirigir"); } ...

Se não tiver um ELSE para if( idade >= 18 ) { if( temCarteira == "S")

os testes para >=18 e temCarteira == "N" ficam sem resposta (não aparecerá mensagem "Pode dirigir" e nem "Não pode dirigir") . Você pode testar e comprovar essa situação.

A segunda é: ... if( idade >= 18 && temCarteira == "S") { mostra("Pode dirigir"); }

if(idade < 18) { mostra("Não pode dirigir"); }

Esse também OU coloca uma condição ELSE para

if( idade >= 18 && temCarteira == "S") OU acrescenta um IF para temCarteira == "N". Do jeito que está, os testes para >=18 e temCarteira == "N" ficam sem resposta (não aparecerá mensagem "Pode dirigir" e nem "Não pode dirigir") . Você pode testar e comprovar essa situação.

A terceira solução apresentada é a que você colocou acima, isto é, if( idade >= 18 && temCarteira == "S") { mostra("Pode dirigir"); } else { mostra("Não pode dirigir"); }

Essa está corretíssima.

Portanto, OU corrige as duas soluções, OU apresenta somente a terceira como solução.

Ah, sim. Você tem razão.

A maioria das explicações são feitas desse jeito. Vão fazendo algumas do jeito errado, até chegar numa correta.

Talvez valha destacar o problema das tentativas intermediárias melhor!

Vi novamente a Opinião do Instrutor, o que me deu a entender que eram três soluções distintas que chegariam ao mesmo resultado, foi o fato de colocar os desenvolvimentos posteriores como uma melhoria de solução.

Mas tudo bem, agora já sei que as soluções que vocês apresentam, na verdade, são sequências intermediárias para se chegar ao resultado final, e não só uma melhoria na escrita do código.

Obrigada!

solução!

É. Você tem razão.

Nesse caso esta um pouco confuso.