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

Ser maior de idade e nao ter habilitação, como fazer ?

11 respostas

// Terminei conseguindo resolver da seguinte forma. Se tiverem opções de enxugar mais o código me ensinem por favor.

Marllesson,

para que seu código apareça na postagem ele não pode ser colado junto com o texto da sua pergunta. Deve clicar em "<> inserir código", e colar seu código sobre a frase "insira seu código aqui".

Cole-o aqui pra que se possamos vê-lo.

<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 carteira = prompt("Tem carteira? Responda sim ou nao");
    if(idade >= 18 ){
        if (carteira == "sim"){

         mostra("Muito bem, Já pode dirigir, mas se bebeu, não dirija");
        }
    }

    else{

        mostra("Não pode dirigir, arrume carona ou chame um Taxi.");
        }

    if (idade >=18 && carteira == "nao"){
        mostra("Não pode dirigir, arrume carona ou chame um Taxi.");
        }

    </script>




//Consegui fazer deste modo aqui, mas se tiver alguma opção para enxugar mais o codigo me digam por favor. Obrigado.

Ola !! você pode resumir a condição do If juntando os dois If no mesmo bloco com o &&. Exemplo: if ( idade >= 18 && carteira == "sim"){ mostra("Muito bem, Já pode dirigir, mas se bebeu, não dirija! "); } else { mostra("Não pode dirigir, arrume carona ou chame um Taxi."); }

OBS: o bloco If que você colocou depois do Else é desnecessário, pois o else já captura qualquer condição que não segue a que você especificou no If.

solução!

Oi Marllesson,

do jeito que fez já funciona bem. Muito bom.

Como opções para "enxugar" ou aprimorar, eu sugeriria o seguinte:

  • para quem é >= 18 anos já há um 'if' que verifica se 'carteira == "sim" '. Depois há outro 'if' no fim que verifica novamente idade >= 18 e 'carteira == "nao" '. Dá pra implementar este "nao" logo no primeiro 'if', com um 'else', e eliminar assim o segundo 'if'.
  • se colocar a pergunta da carteira pra dentro do primeiro 'if', a pergunta não será feita para quem já declarou ter menos de 18 anos.
<meta charset="UTF-8">

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

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

    var idade = parseInt(prompt("Qual é sua idade?"));

    if(idade >= 18){

        var carteira = prompt("Tem carteira? Responda sim ou nao");

        if (carteira == "sim"){
            mostra("Muito bem, Já pode dirigir, mas se bebeu, não dirija");
        }else{
            mostra("Não pode dirigir, arrume carona ou chame um Taxi.");
        }

    }else{
        mostra("Não pode dirigir, arrume carona ou chame um Taxi.");
    }

    // comentários no javascript são feitos com estes símbolos para uma linha
    /* ou com estes símbolos no começo e no fim, para um trecho */

    </script>

<!-- Comentários no html são feitos com estes símbolos no começo e no fim do comentário -->

Como seu comentário estava fora da tag <script> apareceu como texto no navegador. Acrescentei uma dica de como comentar caso queira fazê-lo no html ou no javascript.

Bons estudos!

Olá tudo bem? Eu montei dessa forma abaixo, incluindo algumas condições. Alguém tem alguma sugestão de melhoria do código?

<meta charset="UTF-8">

<script>

    alert("Olá. Estamos aqui fazendo uma blitz para segurança da comunidade")
    var nome = prompt("Qual é o seu nome?");
    var idade = parseInt(prompt(nome + ", quantos anos você tem?"));
    var habilitacao = prompt("Habilitação " + nome + ", por favor ? Responda com S ou N");

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

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

    function condition(idadePermitida,card) {

        var idadePermitida = idade;
        var card = habilitacao.toLowerCase();

            if (idadePermitida >= 18 && card == "s") {
                mostra(nome + ". Seus documentos estão todos em ordem. Pode seguir.");

            } if (idadePermitida >= 18 && card == "n") {
                mostra(nome + ". Você pode até ter idade para dirigir, mas sem a habilitação não adianta! Pare o seu carro ali, vamos te multar e apreender o seu veículo.");

            } if (idadePermitida < 18 && card == "s") {
                mostra(nome + ". Você sabia que falsidade ideológica é crime!? Você não tem 18 anos para ter essa habilitação. Encoste o veículo ali!");                

            } if (idadePermitida < 18 && card == "n") {
                    mostra(nome + ". Você não tem 18 anos, e é claro, muito menos habilitação. Leve o seu veículo até ali!");
            }
    }       

    condition();

</script>

Valeu aí galera.

Olá Renan,

divertido e funcional.

Vou fazer umas sugestões. Como já está usando o .toLowerCase, poderia excluir um passo, ao utilizá-lo já na captura da resposta, assim:

var habilitacao = (prompt("Habilitação " + nome + ", por favor ? Responda com S ou N")).toLowerCase();

Isto também evita esquecer que tem que processar esta variável em algum momento.

Como sua function() solicita argumentos (idadePermitida e card), poderia, ao invés de ter que declarar e atribuir valores aos argumentos, já enviá-los ao invocar a função (já considerando que acatou a sugestão acima):

condition(idade, habilitacao);

É isto:

<meta charset="UTF-8">

<script>

    alert("Olá. Estamos aqui fazendo uma blitz para segurança da comunidade")
    var nome = prompt("Qual é o seu nome?");
    var idade = parseInt(prompt(nome + ", quantos anos você tem?"));
    var habilitacao = (prompt("Habilitação " + nome + ", por favor ? Responda com S ou N")).toLowerCase();

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

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

    function condition(idadePermitida,card) {

            if (idadePermitida >= 18 && card == "s") {
                mostra(nome + ". Seus documentos estão todos em ordem. Pode seguir.");

            } if (idadePermitida >= 18 && card == "n") {
                mostra(nome + ". Você pode até ter idade para dirigir, mas sem a habilitação não adianta! Pare o seu carro ali, vamos te multar e apreender o seu veículo.");

            } if (idadePermitida < 18 && card == "s") {
                mostra(nome + ". Você sabia que falsidade ideológica é crime!? Você não tem 18 anos para ter essa habilitação. Encoste o veículo ali!");                

            } if (idadePermitida < 18 && card == "n") {
                    mostra(nome + ". Você não tem 18 anos, e é claro, muito menos habilitação. Leve o seu veículo até ali!");
            }
    }       

    condition(idade, habilitacao);

</script>

Fora disto, e das instruções aprendidas até agora, sua resolução me fez lembrar de outra instrução, switch (utilizada de uma forma menos usual), que substituiria seus 'if'. Na prática não muda nada. Mas só a título de conhecimento, ficaria assim:

<meta charset="UTF-8">

<script>

    alert("Olá. Estamos aqui fazendo uma blitz para segurança da comunidade")
    var nome = prompt("Qual é o seu nome?");
    var idade = parseInt(prompt(nome + ", quantos anos você tem?"));
    var habilitacao = (prompt("Habilitação " + nome + ", por favor ? Responda com S ou N")).toLowerCase();

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

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


    function condition(idadePermitida,card) {

        switch(true) {
            case (idadePermitida >= 18 && card == "s"):
                mostra(nome + ". Seus documentos estão todos em ordem. Pode seguir.");
                break;

            case (idadePermitida >= 18 && card == "n"):
                mostra(nome + ". Você pode até ter idade para dirigir, mas sem a habilitação não adianta! Pare o seu carro ali, vamos te multar e apreender o seu veículo.");
                break;

            case (idadePermitida < 18 && card == "s"):
                mostra(nome + ". Você sabia que falsidade ideológica é crime!? Você não tem 18 anos para ter essa habilitação. Encoste o veículo ali!");
                break;

            case (idadePermitida < 18 && card == "n"):
                mostra(nome + ". Você não tem 18 anos, e é claro, muito menos habilitação. Leve o seu veículo até ali!");
                break;
        }
    }

    condition(idade, habilitacao);

</script>

Achei ótimas as dicas Akashi, e já alterei meu código, muito obrigado. Eu estava realmente em dúvida quanto aos ifs, mas não sei se teria como reduzi-los de alguma outra forma. Quanto aos breaks a cada case, é para interromper as condições, correto?

Não vejo como reduzir. Há inúmeras alternativas, como por exemplo encadear alguns if else. Mas neste caso, não vejo uma opção significativamente melhor: reduz caracteres, mas muda a complexidade de indentação e lógica:

    function condition(idadePermitida,card) {

            if (idadePermitida >= 18) {

                if(card == "s")    {
                    mostra(nome + ". Seus documentos estão todos em ordem. Pode seguir.");

                }else{
                    mostra(nome + ". Você pode até ter idade para dirigir, mas sem a habilitação não adianta! Pare o seu carro ali, vamos te multar e apreender o seu veículo.");
                }
            }else{

                if(card == "s"){
                    mostra(nome + ". Você sabia que falsidade ideológica é crime!? Você não tem 18 anos para ter essa habilitação. Encoste o veículo ali!");

                }else{
                    mostra(nome + ". Você não tem 18 anos, e é claro, muito menos habilitação. Leve o seu veículo até ali!");
                }

            }
    }       

E sim, break é para sair da condição já atendida. Em outras linguagens tem sintaxe caseOf. Mas em javascript é switch. Coloquei apenas porque a estrutura dos seus ifs me fez lembrar, e para você aproveitar a oportunidade e conhecer.

Ola boa noite galera, sei que ja se passou quase um mes desse topico mas achei interessante pois eu tabem tive essa duvida, fiz meu codigo dessa maneira:

<meta charset="UTF-8">

<script>

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

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

    var idade = parseInt(prompt("Qual é sua idade?"));


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

    if(idade >= 18){

        var temCarteira = prompt("Tem carteira? Responda S ou N");

        if(temCarteira == "S"){
            mostra("Você pode dirigir!");    
        }
    }

    if(idade >= 18 && temCarteira == "N"){
        mostra("Você não pode dirigir!");
    }
</script>

Dessa maneira o codigo trabalha da seguinte forma, ele pede a idade, se for igual ou acima de 18 ele continua e pede se tem carteira, se responder não ele ira dar a mensagem que voce não pode dirigir, se voce colocar idade menor de 18 o codigo ja da a mensagem de que você não pode dirigir. Se você colocar maior de idade e sim ele exibira a mensagem que voce pode dirigir. Espero ter ajudado com essa duvidade tambem. Caso eu esteja errado podem me corrigir, estou aprendendo e uma maneira de aprender e com os erros.