Solucionado (ver solução)
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");
    };
};