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

Exercício: "Será que posso dirigir?"

Olá, pessoal!

Não consigo acertar o código com relação ao seguinte:

  • quando idade < 18, ele fica perguntando se tem carta (não queria que perguntasse, e sim que fosse retornada a mensagem: "Você ainda não pode dirigir, pois não tem idade mínima.");

  • mesmo quando idade > 18, se a condição de ter carta for diferente de "S" ou "s", ele está retornando a mensagem: "Parabéns! Você está habilitado a dirigir.", ao invés de "Não habilitado a dirigir.".

Grato se alguém puder orientar o iniciante aqui, hehe.

<meta charset = "UTF-8">

<script>

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

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

    var idade = parseInt(prompt("Olá! Digite sua idade"));
    var carteira = prompt("Tem carta? Digite S ou N");

    if(idade >= 18 && carteira == "S" || "s") {
        mostra("Parabéns! Você está habilitado a dirigir.");
    }
    else {
        mostra("Não habilitado a dirigir.")
    }
    if(idade < 18) {
        mostra("Você ainda não pode dirigir, pois não tem idade mínima.");
    }

</script> 
4 respostas

Olá Mateus!

Sua lógica está um pouco "quebrada", pois em alguns cenários o algoritmo devolve duas respostas para o usuário; coisa que não poderia acontecer nesse exercício. Reescrevi de uma forma que acredito que fique mais fácil para você entender a linha de raciocínio.

   if(idade < 18) {
        mostra("Você ainda não pode dirigir, pois não tem idade mínima.");
    }
    else if( (idade >= 18) && (carteira == "S" || carteira == "s")  ) {
        mostra("Parabéns! Você está habilitado a dirigir.");
    }
    else {
        mostra("Não habilitado a dirigir.")
    }

Outro problema está no seguinte trecho:

(carteira == "S" || "s"))

O correto seria:

(carteira == "S" || carteira == "s")

Espero que possa ter ajudado. Abs, Jr.

Olá, Junior!

Obrigado pelas orientações. Agora entendi o raciocínio. Só restou uma dúvida: quando é colocada idade < 18, ainda fica perguntando se tem carta. Como faço para, neste caso, não perguntar e ir direto para a resposta "Você ainda não pode dirigir, pois não tem idade mínima."?

Um abraço!

solução!

Mateus, para fazer dessa forma você precisa reestrutura a lógica do exercício, tendo que fazer a pergunta se tem CNH depois testar se idade é menor que 18; mas, para isso, não é simplesmente colocar a pergunta depois do elseif, pois nele já é necessário ter a informação carteira == "s".

Não será uma tarefa muito simples, mas é um excelente exercício para treinar a lógica de programação. Tente fazer com a dica acima e qualquer dúvida é só postar aqui no fórum novamente.

Abs, Jr.

Olá, Júnior!

Quebrei a cabeça aqui mas agora fechou o raciocínio. Segui sua dica, mas comecei pela pergunta da idade e, caso a resposta seja maior de 18, daí sim chamar a pergunta da habilitação.

O que fiz foi tirar do início essa pergunta da carteira e a resposta capturada pelo prompt (var carteira) e colocar para ser chamada somente se idade >= 18, dentro do bloco. Daí deu certo! Segue como ficou.

Valeu pela dica!!

<meta charset = "UTF-8">

<script>

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

    function mostra(texto) {
        document.write(texto);
    }

    var idade = parseInt(prompt("Digite sua idade"));

    if(idade < 18) {
        mostra("Você não tem idade para dirigir.");
    }

        else if(idade >= 18) {
            var carteira = prompt("Tem carta? Digite S ou N");

            if(carteira == "N" || carteira == "n") {
                mostra("Você ainda não pode dirigir, pois não tem habilitação.");
            }    

                else if(carteira == "S" || carteira == "s") {
                    mostra("Parabéns! Você está habilitado a dirigir.");
                }

        }

</script>