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

Estou com dúvida no curso de Lógica de Programação, no exercício do capítulo Desafio final.

Meu código já está uns 80%. Acabei dando mais voltas, mas aparentemente está no caminho certo Então... a princípio criei dois arrays. O primeiro para colocar os números randomicamente selecionados e o segundo para colocar os números palpite. Depois, criei um terceiro array onde só entrava números q havia sido apostados e q estavam nos sorteados randomicamente. O código até roda, mas dependendo do número que eu insiro, o resultado q dá é meio absurdo. Se vc rodar o código q eu vou colocar e "roubar" olhando os números sorteados(console.log(sorteados)) dá para entender melhor. Já quebrei a cabeça para resolver, mas ainda não consegui ver saída. Vc poderia me dar uma forcinha? ;)

4 respostas
<input type="text" id="numero"/>
<input type="submit" id="verificar" value="Chutar"/>


<script>


var sorteados=[];

sorteados.lenght=6;

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

        sorteados[i]=Math.round(Math.random()*60);
    };

var palpites=[];

alert("Você tem que chutar 6 números diferentes de 1 a 60");


var acertos=[];
acertos.length<=6;


var adicionarpalpite=function(){



    var palpite=document.getElementById("numero").value;

        for(var i=0;i<=palpites.length;i++){

            if(palpite==palpites[i]){

            alert("Este número já foi escolhido");

            return;

            }

            if(palpite>60){

            alert("Este número é maior que 60 e não pode ser escolhido");

            return;
            }


        for(var j=0;j<=sorteados.length;j++){

            if(palpite==sorteados[j]){

            parseInt(acertos.push(palpite));
            }
        }

}


    parseInt(palpites.push(palpite));
    console.log(palpites);    



    if (palpites[5])
    {
    alert("Pronto! Você já inseriu os seis números");

    if (acertos!=0)
    {
    alert("Você acertou "+acertos.length+" números, que foi/foram "+acertos)
    }
    else
    {
    alert("Que pena! Você não acertou nenhum número");
    }




    var denominador=60*59*58*57*56*55*54;

    var probabilidade=1/denominador;

    alert("A probabilidade de vc acertar todos os algarismos sorteados é "+probabilidade);


    }    


}    

var botao=document.getElementById("verificar");

botao.onclick=adicionarpalpite;



</script>
solução!

Olá Daniel, vi o código que você postou acima, e inicialmente eu não entendi direito o que você queria, mas fazendo os passos citados, percebi que havia repetição quando eram exibidos os valores acertados. Notei também que essa repetição crescia de acordo com a quantidade de acertos. E a correção foi relativamente simples para esse problema. Simplesmente troquei um fecha chaves de local e funcionou direito. Vou postar o código abaixo para com alguns comentários informando onde foram feitas as alterações. Mas antes vamos a alguns detalhes.

O código abaixo não existe:

sorteados.lenght=6;

quando você coloca vetor.length é a mesma coisa que você pedir o tamanho do vetor, não para determinar o tamanho dele. Sinceramente, eu não conheço muito bem JavaScript somente o que vi aqui no curso, mas também nunca testei isso no Java por exemplo, mas creio que não é aceito tal instrução. Mas o length serve, realmente, para exibir para você o tamanho do vetor.

Outro ponto é no FOR:

for(var i=0;i<=6;i++){
     sorteados[i]=Math.round(Math.random()*60);
};

O código acima funciona muito bem, porém com um pequeno problema, o sorteio deve ter 6 números e o for acima está sorteando 7 números. Isso acontece devido o vetor iniciar na posição 0 e o seu loop também está iniciando na posição 0. Você poderia ter feito for(int i = 1... mas isso não seria muito legal para o vetor...

E em outro ponto que deve ser observado é a indentação, mas isso vem com o tempo.

E uma dica para o programa, no sorteio não deixe ele sortear o zero (acho que quando eu fiz esse exercício eu deixei que isso aconteça) e evitar que no sorteio venha números repetidos também.

Segue o programa, tem uns comentários feitos, e espero que ajude, qualquer dúvida é só postar aí.

<input type="text" id="numero"/>
<input type="submit" id="verificar" value="Chutar"/>


<script>


var sorteados=[];
var palpites=[];
var acertos=[];

//sorteados.lenght=6; // Isso não pode ser feio, nem sei se funciona
for(var i=1;i<=5;i++){ // foi altara de i<=6 para i<=5 pois o vetor inicia em 0, ou seja, sua primeira posição é zero
    sorteados[i]=Math.round(Math.random()*60);
};

alert("Você tem que chutar 6 números diferentes de 1 a 60");

console.log(sorteados)
acertos.length<=6;


var adicionarpalpite=function(){
    var palpite=document.getElementById("numero").value;
    for(var i=0;i<=palpites.length;i++){
        if(palpite==palpites[i]){
            alert("Este número já foi escolhido");
            return;
        }
        if(palpite>60){
            alert("Este número é maior que 60 e não pode ser escolhido");
            return;
        }
    } // a maior mudança feita foi essa, fechei essas chaves nesse ponto, no código postado elas estavam sendo fechadas depois do loop
    for(var j=0;j<=sorteados.length;j++){
        if(palpite==sorteados[j]){
            console.log(palpite + "  " + sorteados[j]);
            parseInt(acertos.push(palpite));
        }
    }
    //} //onde estava sendo fechado as chaves na proposta original.
    parseInt(palpites.push(palpite));
    console.log(palpites);

    if (palpites[5]){
        alert("Pronto! Você já inseriu os seis números");

        if (acertos!=0){
            alert("Você acertou "+acertos.length+" números, que foi/foram "+acertos);
        }else{
            alert("Que pena! Você não acertou nenhum número");
        }

        var denominador=60*59*58*57*56*55*54;
        var probabilidade=1/denominador;

        alert("A probabilidade de vc acertar todos os algarismos sorteados é "+probabilidade);
    }
}    

var botao=document.getElementById("verificar");
botao.onclick=adicionarpalpite;

</script>

Espero ter ajudado Obs.: acho que deixei alguns console.log no meio do código.

Fala, Joel!!

Super obrigado pela ajuda! Realmente, agora aquela parte está funcionando direitinho.

Tb não tinha me atentando muito ao random repetido. Vou add uma correção para isso tb!

Brigadão mesmo! Abraço!

Olá Daniel, enquanto eu fazia o seu código eu fiz um teste e esqueci de remover, seque a correção:

Onde tem o priemiro loop substitua de:

for(var i=1;i<=5;i++){

para:

for(var i=0;i<=5;i++){

Só um pequeno deslise.

Obrigado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software