Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Desafio e ajuda

Eu modifiquei o código "anoDeCopa" do capítulo "Como repetir tarefas" para saber se o ano inicial foi um ano em que houve Copa. Na primeira tentativa cometi um erro, mas já o corrigi.

A título de compartilhar aprendizado, com a licença dos instrutores, compartilho o código - com erro - e gostaria de opiniões de como melhorá-lo para evitar que o ano inicial não seja um ano sem Copa.

<meta charset = "UTF-8">
<script>
var mostra = function(frase) {
    document.write(frase + "<br/>");
};

var anoComoTexto = prompt("Informe o ano inicial");
var anoDeCopa = parseInt(anoComoTexto);
var anoLimite = prompt("Qual o ano limite?");
var checarAno = anoDeCopa;

while (checarAno >= 1930){
    checarAno = checarAno - 4;
}

if (checarAno == 1930){
    while(anoDeCopa <= anoLimite) {
        mostra(anoDeCopa + " é ano de copa!");
        anoDeCopa = 4 + anoDeCopa;
    }
    mostra("Ufa! Esses foram os anos de copa até " + anoLimite);
} else {
    alert(anoDeCopa +" não é ano de copa!");
}
</script>
10 respostas

Oi Otávio,

Você já aprendeu funções? Se sim, você pode criar uma função ehAnoDeCopa(ano), que retorna pra vc se o ano é de copa ou não.

E, caso o ano inicial não seja de Copa, você dá uma mensagem de erro pro usuário.

O que acha?

Concordo com a resposta do Mauricio, porém sugeriria a criação de outra função para teveCopa para saber se nesses anos teve ou não Copa (devido guerras): 1930; 1934; 1938; 1950; 1954;... Outro item é que não sei se corrigiu o erro ou não, mais no código apresentado o checarAno não poderia ser >= 1930 e sim > 1930.

Maurício e Carlos, eu uni as duas sugestões e criei um novo código. Com o uso de achei o código mais limpo.

Quanto ao erro, Carlos, essa era uma das opções porque também poderia ser >=1934.

Neste código não são impressos os anos em que não houve Copa por causa da II Guerra.

<meta charset = "UTF-8">
<script>
var anoInicial = parseInt(prompt("Informe o ano inicial"));
var anoLimite = parseInt(prompt("Qual o ano limite?"));

var mostra = function(frase) {
    document.write(frase + "<br/>");
};

var ehAnoDeCopa = function(ano){
    while (ano > 1930){
        ano = ano - 4;
    }
    if (ano == 1930){
        ano = anoInicial;
        for (ano = anoInicial; ano <= anoLimite; ano = ano + 4) {
            if (ano == 1942 || ano == 1946) continue;
            mostra(ano + " é ano de copa!");
        }
        mostra("Ufa! Esses foram os anos de copa até " + anoLimite);
    } else {
        alert("Aviso!" + anoInicial +" não foi ano de copa!");
    }
};

ehAnoDeCopa(anoInicial);

</script>

Também fiz esta outra versão:

<meta charset = "UTF-8">
<script>
var anoInicial = parseInt(prompt("Informe o ano inicial"));
var anoLimite = parseInt(prompt("Qual o ano limite?"));

var mostra = function(frase) {
    document.write(frase + "<br/>");
};

var ehAnoDeCopa = function(ano){
    while (ano > 1930){
        ano = ano - 4;
    }
    if (ano == 1930){
        ano = anoInicial;
        for (ano = anoInicial; ano <= anoLimite; ano = ano + 4) {
            if (ano == 1942 || ano == 1946) continue;
            mostra(ano + " é ano de copa!");
        }
        mostra("Ufa! Esses foram os anos de Copa entre " + anoInicial + " e " + anoLimite + ".");
    } else {
        alert("Aviso!" + anoInicial +" não foi ano de Copa!");
        mostra("Os anos de Copa entre " + anoInicial + " e " + anoLimite + " foram:");
        for (ano = 1930; ano <= anoLimite; ano = ano + 4){
            if (ano == 1942 || ano == 1946 || ano < anoInicial) continue;
            mostra(ano);
        }
    }
};

ehAnoDeCopa(anoInicial);

</script>
solução!

Muito legal, Otávio!

Dá pra melhorar ainda mais. Que tal colocar a lógica de saber se é ano de guerra em um método específico? Aí esse if não fica jogado por aí, e fica mais fácil de ler.

Um abraço

Gostaria de saber como crio uma duvida? Mas vou deixar a minha duvida aqui de qualquer maneira. Estou no ultimo exercício onde devemos criar o programa da loteria.

gostaria de saber como faco, para apos o usuário digitar os 6 números, ele parasse de aceitar mais números no array.

E tambem nao sei porque quando eu crio outro for para verificar os numeros iguais, ele nao conta

Aqui esta meu código:


<input type="text" id="chutesNumeros">
<input type="submit" value="Enviar Numero" id="botaoNumero">

<script> 
var numerosLoteria = [];
var numerosChutados = [];

var geraNumeros = function()
{
    for(var i = 0; i<6; i++)
    {
        numerosLoteria[i] = Math.random() * 60;
        numerosLoteria[i] = Math.round(numerosLoteria[i]);
    }
}
geraNumeros();
document.write(numerosLoteria);
var guardaChutes = function()
{
    var numero = document.getElementById("chutesNumeros").value;

    for(i = 0; i<6; i++)
    {

        if(numero == numerosChutados[i])
        {
            alert("Voce ja disse esse numero");
            return;

        }    

    }
        numerosChutados.push(numero);
        console.log(numerosChutados);

}

document.write(numerosChutados);


//document.write("Voce acertou " + qtdAcertos + " de numeros");

var botao = document.getElementById("botaoNumero");
botao.onclick = guardaChutes;



</script>

Miguel, dá uma olhada no meu código. Veja se te ajuda.

<html>
    <head>
        <title>Teste a sua sorte</title>
        <meta charset = "UTF-8">
        <input type="text" id="nome" />
        <input type="submit" id="iniciar" value="Digite o seu nome e clique aqui."/>

    </head>
    <body>

        <script>

        var surpresinha = [];
        var apostaUsuario = [];

        var mostra = function(frase) {
            document.write(frase + "<br/>");
        };

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

        var criaSurpresinha = function(){            
            for (i = 0; i <= 5; i++){
            surpresinha[i] = Math.round(Math.random() * 60);
            }
        };

        var validaDezena = function(numero){
            var validacao = false;
            if (numero >= 1 && numero <= 60) {
                validacao = true;
            };
            return validacao;
        };


        var criaApostaUsuario = function(){
            var dezena = 1;
            for (var i = 0; i <=5; i++){
                numero = parseInt(prompt("Digite a dezena "+ dezena +" de sua aposta."));
                if (validaDezena(numero) == true){
                    apostaUsuario[i] = numero;
                    dezena++;
                } else {
                    alert("Número inválido! Digite um número entre 1 e 60.");
                    i--;
                }

            }
        }

        var confereAposta = function (surpresinha, aposta){
            var acertos = 0;
            for (i = 0; i < 6; i++){
                for (j = 0; j < 6; j++) {
                    if(surpresinha[i] == aposta[j]){
                        acertos++;
                    };
                };
            };
            mostra("Você acertou " + acertos + " número(s).");
        };


        var botaoClicado = function(){
            var nome = document.getElementById("nome").value;
            alert(nome+"! Teste a sua sorte!");

            criaSurpresinha();
            criaApostaUsuario();

            pulaLinha();            
            mostra(nome+", você apostou nos seguintes números: "+apostaUsuario);
            pulaLinha();

            mostra("Os números gerados foram: " + surpresinha);

            confereAposta(surpresinha, apostaUsuario);

        }

        var iniciarAposta = document.getElementById("iniciar");

        iniciarAposta.onclick = botaoClicado;


        </script>

        <p>


        </p>
    </body>
</html>

Conseguiu, Miguel?

Maurício, voltando ao código da Copa, criei uma função checkWar de duas formas diferentes.Forma 1:

<html>
<head>
    <title>Ano de Copa</title>
    <meta charset = "UTF-8">    
</head>
<body>
    <script>
        var anoInicial = parseInt(prompt("Informe o ano inicial"));
        var anoLimite = parseInt(prompt("Qual o ano limite?"));

        var mostra = function(frase) {
            document.write(frase + "<br/>");
        };

        var checkWar = function(ano){
            var houveGuerra = false;
            if (ano >=1942 && ano <= 1946){                    
                houveGuerra = true;
            };
            return houveGuerra;
        };

        var ehAnoDeCopa = function(ano){
            while (ano > 1930){
            ano = ano - 4;
            };

            if (ano == 1930){
                mostra("Os anos de Copa entre " + anoInicial + " e" + anoLimite + " foram:" + "<br/>");
                for (ano = anoInicial; ano <= anoLimite; ano = ano + 4) {
                    if (checkWar(ano) == true) continue;
                    mostra(ano);
                    };
            } else {
                alert("Aviso! " + anoInicial +" não foi ano de Copa!");
                mostra("Os anos de Copa entre " + anoInicial + " e " + anoLimite + " foram:");
                for (ano = 1930; ano <= anoLimite; ano = ano + 4){
                    if (checkWar(ano) == true || ano < anoInicial) continue;
                    mostra(ano);
                }
            }
        };

        ehAnoDeCopa(anoInicial);
    </script>
</body>
</html>

Forma 2 (gostei mais desta):

<html>
<head>
    <title>Ano de Copa</title>
    <meta charset = "UTF-8">
</head>
<body>
    <script>
        var anoInicial = parseInt(prompt("Informe o ano inicial"));
        var anoLimite = parseInt(prompt("Qual o ano limite?"));

        var mostra = function(frase) {
            document.write(frase + "<br/>");
        };

        var checkWar = function(ano){
            var caso = "";
            if (ano <= 1946){
                caso = 0;                
            } else{
                caso = 1;
            };

            switch (caso){
                case 0:
                    mostra("Os anos de Copa entre " + anoInicial + " e " + anoLimite + " foram:");
                    for (ano = 1930; ano <= anoLimite; ano = ano + 4) {
                        if (ano >= 1942 && ano <= 1946 || ano < anoInicial) continue;
                        mostra(ano);
                    };
                    mostra("Obs.: Em 1942 e 1946 não houve Copa por causa da II Guerra.");
                    break;
                case 1:                        
                    mostra("Os anos de Copa entre " + anoInicial + " e " + anoLimite + " foram:");
                    for (ano = 1930; ano <= anoLimite; ano = ano + 4){
                    if (ano < anoInicial) continue;
                    mostra(ano);
                    };
                    break;
            };
        };

        var ehAnoDeCopa = function(ano){
            while (ano > 1930){
                ano = ano - 4;
            };
            if (ano == 1930){
                checkWar(anoInicial);
            } else {
                alert("Aviso! " + anoInicial +" não foi ano de Copa!");
                checkWar(anoInicial);
            };
        };

        ehAnoDeCopa(anoInicial);
    </script>
</body>
</html>

Miguel, veja se te ajuda:

var validaNumero = function(numero, sequencia){
    var validacao = true;
    for (i = 0; i<sequencia.length; i++){
        if (numero == sequencia[i]){
            validacao = false;
            alert("Você já disse esse numero.");
            break;
        }
    }
    return validacao;
};

var guardaChutes = function() {
    var numero = document.getElementById("chutesNumeros").value;
    var dezenaValida = validaNumero(numero, numerosChutados);
    var i = numerosChutados.length
    if (i < 6){
        if (dezenaValida == true){
            numerosChutados.push(numero);
            console.log(numerosChutados);
        }; 
    }else{
        alert("Você já digitou as seis dezenas");
    };
};