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

Números para a Mega Sena

Bom dia alunos Alura, tudo bem? Sou iniciante nessa área e conclui o curso de Lógica de Programação I. Meu objetivo é de me tornar um Dev Full Stack. Finalizei esse primeiro curso, acho que levei muito mais tempo do que desejava, mas acredito que essa é uma das fases mais importantes para consolidar toda a estrutura para seguir em frente. Depois de ter feito todos os exercicios, resolvi criar um programa para sugestão de jogo para a Mega Sena. Já que estamos quase na virada de ano, vai que.... : ) Se alguém tiver alguma sugestão de melhora do código etc, será muito bem vindo. Procurei colocar tudo dentro da correta identação e seguindo a convenção. Um agradecimento especial ao professor Flavio!!! Acho a metodologia dele fantástica!

vamo que vamo!

<!DOCTYPE html>
<html lang = "pt-br">
    <head>
        <meta charset = "UTF-8">
        <title>Mega Sena</title>
        <link rel="icon" href="favicon.png">
    </head>

<body>

    <button>Clique para sortear 6 números</button>

    <script>

        let button = document.querySelector("button")
        button.onclick = sorteiaNumeros

        function sorteia() {

            return Math.round(Math.random() * 100)

        }

        function sorteiaNumeros() {

            let megaSena = []
            let numero = 1

            while(numero <= 6) {

                let numeroAleatorio = sorteia()
                let achou = false

                if(numeroAleatorio !== 0 && numeroAleatorio <= 60) {

                    for(posicao = 0; posicao < megaSena.length; posicao++) {

                        if(megaSena[posicao] == numeroAleatorio) {

                            achou = true
                            break
                        }
                    }

                    if(achou == false) {

                        megaSena.push(numeroAleatorio)
                        numero++
                    }

                }

            }

            alert("Os números da sorte são: " + megaSena)
        }

    </script>    
</body>
</html>
7 respostas
solução!

Boa tarde, Caue! Como vai?

Vc está certo! Esse período inicial é muito importante e vc deve estabelecer bem e ter claro os fundamentos da programação para construir uma base sólida e sentir confiança de seguir em frente!

Sobre o seu código, ficou bacana, no entanto, uma convenção utilizada pela grande maioria dos desenvolvedores JS é utilizar o ponto e vírgula no final de cada linha de código e eu senti falta disso no código que vc fez.

Um outro detalhe que vc pode observar tbm e que em muitos casos é útil é o fato de criar uma variável para armazenar valores importantes de modo a agregar semântica ao código desenvolvido pois na maioria esmagadora das ocasiões não escrevemos código apenas para nós mesmos, mas também para outros programadores que terão que analisar o nosso código posteriormente.

Exemplo prático:

Veja a seguinte linha de código:

while(numero <= 6) {
     // restante do código omitido.
}

Batendo o olho rápido, alguém que lê o seu código ficará em dúvida sobre o que significa o número 6. E a variável numero também não dá muita pista do que ela significa. Veja também que o mesmo tipo de situação acontece nesse outro trecho:

if(numeroAleatorio !== 0 && numeroAleatorio <= 60) {
     // restante do código omitido.
}

Então, o código poderia ser melhorado assim no primeiro caso:

let numerosSorteados = [];
let quantidadeMaximaDeNumeros = 6;

while (numerosSorteados.length < quantidadeMaximaDeNumeros) {
     // restante do código omitido.
}

Repare que agora o código ficou mais fácil de ser lido e entendido. Há um ditado que é bom ser gravado desde o início por quem começa no mundo da programação e que diz mais ou menos o seguinte:

Qualquer um consegue escrever código que um computador entenda. Bons programadores escrevem código que humanos possam entender.

Sendo assim, a semântica que vc dá ao seu código é algo de muita importância!

DESAFIO:

Por último, mas não menos importante, eu tenho um desafio a te lançar! A sua função sorteia() está gerando números aleatórios entre 0 e 100. Tanto é verdade que para adicionar um determinado número ao array vc precisa verificar se ele é diferente de 0 e menor ou igual a 60, justamente no if que eu indiquei anteriormente.

O desafio é fazer com que a função sorteia() gere números de 1 a 60, fazendo com que não haja mais necessidade de fazer o if.

Depois de tentar, achando a solução posta aqui para que os demais alunos possam ver como se faz! E qualquer coisa, se tiver alguma dúvida é só falar!

Te desejo um excelente ano de 2019, com muito estudo e muito sucesso!

Grande abraço, meu aluno!

Boa tarde Gabriel! Muito obrigado pelas dicas e por acompanhar o meu estudo. Muitas vezes um detalhe passa em branco e é sempre bom ter pessoas para nos orientar. Realmente eu estava programando apenas para mim. E Semântica é indispensável para o entendimento de todos em um trabalho em grupo. Peguei o seu desafio de não precisar usar o if para números == 0 e <= 60 . Inicialmente tinha pensado em multiplicar o Math.round(Math.random() * 60), porém, o resultado me daria números até 60 (isso é bom), mas também a qualquer momento o número 0 (isso é ruim). Então parti para a famosa pesquisa na net. E descobri o Math.floor, que arredonda uma dizima periódica sempre para baixo. Então somando 1 no final da função eu sempre teria um número entre 1 e 60, já que o Math.random inclui o 0 e exclui o 1. Logo ficou :

function sorteia() {

            return Math.floor(Math.random() * 60) + 1;

        }

Aproveitei e pesquisei algo que estava me incomodando. Os valores do Array estavam todos desordenados e eu queria colocá-los em ordem crescente, pois seria muito mais fácil e inteligente para a compreensão dos números a serem jogados na Mega Sena. Logo tb descobri que posso usar uma função para isso:

megaSena.sort(function(a, b){return a - b});

Chamado de "The compare function". quem tiver interesse em entender segue o link :https://www.w3schools.com/js/js_array_sort.asp

É isso, segue como ficou a programação:

<!DOCTYPE html>
<html lang = "pt-br">
    <head>
        <meta charset = "UTF-8">
        <title>Mega Sena</title>
        <link rel="icon" href="favicon.png">
    </head>

<body>

    <button>Clique para sortear 6 números</button>

    <script>

        let button = document.querySelector("button");
        button.onclick = sorteiaNumeros;

        function sorteia() {

            return Math.floor(Math.random() * 60) + 1;

        }

        function sorteiaNumeros() {

            let megaSena = [];
            let numero = 1;
            let quantidadeMaximaDeNumeros = 6;

            while(numero <= quantidadeMaximaDeNumeros) {

                let numerosSorteados = sorteia();
                let achou = false;

                    for(posicao = 0; posicao < megaSena.length; posicao++) {

                        if(megaSena[posicao] == numerosSorteados) {

                            achou = true;
                            break;
                        }
                    }

                    if(achou == false) {

                        megaSena.push(numerosSorteados);
                        numero++;
                    }

            }

            megaSena.sort(function(a, b){return a - b});
            alert("Os números da sorte são: " + megaSena);
        }

    </script>    
</body>
</html>

Fiquem a vontade para me corrigir se falei alguma besteira, estou aprendendo ainda e com possibilidades de muitos erros. kkkkk

Feliz 2019 Gabriel e para todos do grupo!

Quanta dica boa vocês estão compartilhando. Obrigada demais.

Fala Caue, tranquilo?

Sua dúvida foi solucionada? :)

Opa, Caue! Sim, é ótimo ter pessoas ao nosso lado dando suporte quando necessário! Por isso, nunca deixe de recorrer aqui ao fórum da Alura sempre que precisar!

Quanto ao desafio e ao seu código, gostei muito! Principalmente em relação a ideia que vc teve de ordenar o array! No começo do aprendizado, uma das melhores formas de aprender coisas novas é essa! Criando pequenos desafios e procurando pelas soluções! Ficou muito bom e, a propósito, vc resolveu com sucesso o desafio que te passei!

No entanto, há uma outra solução (que foi a que eu utilizei) para resolver o meu próprio desafio! Dá só uma olhada!

function sorteia() {

     return Math.round(Math.random() * 59) + 1;
}

Veja que o Math.round(Math.random() * 59) irá gerar um número aleatório entre 0 e 59, no entanto, como eu quero entre 1 e 60, basta somar 1 ao número gerado. E essa é uma outra solução ao meu desafio. Um pouco mais intuitiva dado que é utiliza somente as funções já conhecidas pelo pessoal que está fazendo o curso de Lógica de Programação! O que vc achou?

Hannah, seja bem vinda! E fique a vontade tbm caso queira participar dessa troca de ideias!

Grande abraço e bons estudos a todos, meus alunos!

Oi Caue o caminho devfullstack na minha opinião é cada vez mais longo, esteja motivado! Quanto ao seu programa além das preciosas dicas que já foram dadas pelos colegas eu lhe desafiaria no futuro a implementar uma lógica que armazenasse números já sorteados e identificasse padrões entre eles sabemos que ganhar na Mega- Sena não é uma questão de identificar padrões, sonhos e etc :) Mas seria interessante um relatório tipo no Ano de 2019 os 6 números mais sorteados foram:

05 - 26 - 27- 35 - 41- 58 

Confira aqui a lista de números menos ou nunca sorteados:

01 - 10 - 21 - 37 - 59

Indo um pouco mais longe vc pode Adicionar funcionalidades através de funções que deem alguma tratativa para os números sorteados por exemplo armazenar as datas onde vc fez um terno ou acertou uma quadra por exemplo, ou tentar identificar algum padrão interessante.

Espero ter ajudado e bons estudos.

Oi Gabriel, Maison e Daniel, muito obrigado pelas dicas e pelos desafios propostos. Hanna, sou novato em tudo isso aqui e fico muito feliz que de uma certa maneira posso estar te ajudando.

Maison, vou guardar essse desafio proposto para um exercício futuro. Obrigado!

Eu acabei de fazer um outro programa com a mesma pegada da Mega Sena, porém agora, com uma interatividade do usuário. Vou postar em um outro tópico. Ficarei muito grato se puderem dar uma analisada.

Grande abraço!