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!

1
resposta

Desafio prático! Lógica de programação

Bom dia, sou um entusiasta na área de programação e estou em um momento de transição de carreira, saindo da eletrônica e pondo a cara a tapa nessa área que sempre me fascinou, já possuo uma certa noção básica, mas também ainda estou aprendendo muitas coisas, os únicos momentos prático mesmo é aqui na plataforma e às vezes no trabalho quando tenho que retrabalhar os códigos, corrigir ou fazer pequenas melhorias, nos programas das jigas de teste de linha de produção, chega de mais de longas e vamos ver se eu me sai bem com a lógica nesse exercício.

//Contador de números de 0 a 10
let contador = 0;
while (contador <= 10) {
    console.log(contador);
    contador++; //Acrescentador de 1 a cada iteração. O sinal ++ significa "acrescentar e atribuir", exemplo: 0 + 1 = 1, então contador = 1 e assim por diante até que o contador chegue a 10.
}

// Contador de números reverso de 10 a 0
let contadorReverso = 10;
while (contadorReverso >= 0) {
    console.log(contadorReverso);
    contadorReverso--; // Decrementação do contador, ou seja, diminui 1 a cada iteração. O sinal -- significa "diminuir e atribuir", exemplo: 10 - 1 = 9, então contadorReverso = 9 e assim por diante até que o contadorReverso chegue a 0.
}

// Contador de números multipllicados até alcançar 100
let contadorMult = 1;
while (contadorMult <= 100) {
    console.log(contadorMult);
    contadorMult *= 2; // Multiplicando por 2 a cada iteração. O sinal *= significa "multiplicar e atribuir", exemplo: 2 * 2 = 4, então contadorMult = 4 e assim por diante até que o contadorMult chegue a 100.
}

Vou colocar abaixo os 3 código que eu fiz, sendo eles, um para incrementar, decrementar e multiplicar.
Obs: Já vi que posso melhorar no meu último teste, caso eu coloque valores negativos, vou ter que estudar uma lógica para impedir que o usuário coloque e faça isso, porque se não buga, pelo menos no de multiplicação bugou heheheh... rindo de triste, porque só nisso aqui me foram 2:30 para aprender e anotar e praticar os códigos.

1) Contador Incrementador:

const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

readline.question('Até quanto você quer contar? ', (numeroDigitado) => {
    // Transformamos o texto digitado em um número de verdade
    let limite = parseInt(numeroDigitado);

    let contador = 0;
    while (contador <= limite) {
        console.log(contador);
        contador++;
    }

    readline.close(); // Sempre feche no final da última ação!
});

2) Contador Decrementador:

const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

readline.question('Até quanto você quer contar? ', (numeroDigitado) => {
    // Transformamos o texto digitado em um número de verdade
    let limite = parseInt(numeroDigitado);

    let contadorReverso = limite;
    while (contadorReverso >= 0) { // isso é um loop que vai contar de trás para frente
        console.log(contadorReverso);
        contadorReverso--; // Decrementamos o contador a cada iteração
    }

    readline.close(); // Sempre feche no final da última ação!
});

3) Contador Multiplicador:

const readline = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout,
});
function iniciarContador() {
    readline.question("Por qual número você quer multiplicar? ", (numeroDigitado) => {
        // Transformamos o texto digitado em um número de verdade
        let limite = parseInt(numeroDigitado);
            if (limite === 0 || limite === 1) {
            console.log("O número digitado é zero ou um.");
            iniciarContador(); // Aqui chamamos a função novamente para reiniciar o programa.
        } else {
            console.log("O número digitado é:", limite);
            let contadorMult = 1;
            while (contadorMult <= 100) {
            console.log(contadorMult);
            contadorMult *= limite; // Multiplicando pelo número digitado a cada iteração. O sinal *= significa "multiplicar e atribuir", exemplo: 2 * 2 = 4, então contadorMult = 4 e assim por diante até que o contadorMult chegue a 100.
        }
            readline.close();
        }
    });
}
iniciarContador(); // Aqui chamamos a função para iniciar o programa.

Outra observação, eu já tinha visto em sala de aula do meu curso na faculdade que para usar o .js é preciso criar aquela estrutura pelo menos básica de .html, optei por estudar e aprender esse novo conceito que me ajudou muito, porque como só queria ver funcionando o código nas operações matemáticas nodejs readline ajudou e muito para mim aqui, me facilitou mas tive que estudar para aprender a usar, e acho que aprendi e ficou até bem documentado pelo código.

1 resposta

Oi, Vinicius. Tudo bem com você?

Curti bastante o relato da sua transição de carreira, e faz todo sentido aproveitar cada oportunidade prática que aparece. Sobre o desafio de loops, você foi além do que foi pedido nos quatro itens da lista: implementou o contador incrementador, o decrementador e ainda evoluiu pra uma versão com multiplicação, usando o readline pra tornar tudo interativo via terminal, o que mostra que você entendeu bem a lógica de repetição condicional com while.

O código está bem organizado e os comentários explicando o funcionamento de operadores ajudam bastante a fixar o conteúdo, é uma boa prática documentar assim enquanto você ainda está internalizando os conceitos. Sobre aquele ponto que você já percebeu sozinho, do contador multiplicador travar com valores negativos ou frações, isso acontece porque se o número for negativo o contadorMult só vai diminuir, e a condição contadorMult <= 100 nunca deixa de ser verdadeira, gerando um loop infinito. Uma forma de mitigar isso é validar a entrada logo no início, garantindo que só números maiores que 1 sigam pro loop, redirecionando os demais casos pra sua função iniciarContador de novo.

Parabéns pela dedicação e por compartilhar tanto o código quanto o processo de aprendizado, Vinicius, continue mandando suas atividades por aqui, o fórum está sempre à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!