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!

2
respostas

[Dúvida] questões 5, 6 e 10 da quarta lista de exercícios

alguém poderia, por favor, me explicar a lógica da solução?

Eu achei um pouco difícil o próprio enunciado porque eu preencheria o numeroDigitado, ao mesmo tempo que deveria criar um laço de repetições até que o numeroDigitado fosse zero e a quantidade de numeroDigitado diferente de zero seria computado

Ponto 1 que eu não entendi:

é possível ter um laço de repetição comigo alterando manualmente uma variável entre cada rodada?

Ponto 2. seria tido um input para cada rodada e elas seriam computadas contando as repetições e quantidades de vezes que o número zero(o) não foi designado para o numeroDigitado?

Ponto 3. não seria mais proveitoso conhecermos listas antes para ai então aplicarmos um laço de repetições que simule todas as alterações do númeroDigitado até que fosse o zero.

Ponto4. Não seria interessante estabelecer um limite de 0 a 10 por exemplo, para que o numero vá decrescendo até chegar ao zero, se o objetivo deste exercício seria lidar com o laço de repetição e incremento para as variáveis repetições e quantidade de tentativas até o acerto?

// 5. Receber números até digitar 0 (simulado com array) 

let numeroDigitado;
let quantidade = 0;
let repeticoes = 0;

do {
  // simulação manual de entrada
  if (repeticoes === 0) {
    numeroDigitado = 5; // o numero de repetições não deveria ser zero somente se eu digitasse o número zero(0) no primeiro preenchimento do numeroDigitado?
  } else if (repeticoes === 1) {
    numeroDigitado = 10;
  } else {
    numeroDigitado = 0;
  }

  if (numeroDigitado !== 0) {
    quantidade++;
  }

  repeticoes++;
} while (numeroDigitado !== 0);

console.log("Total de números digitados: " + quantidade);

Esse é realmente o exercício que vocês gostariam que resolvessemos com o que sabemos até agora?

// 5. Receber números até digitar 0

// Simule a digitação de números usando uma variável numeroDigitado.     
         // (primeiro passo é criar a variável número digitado - let numeoDigitado)
// Use um do...while para repetir a execução até que o valor seja 0.
        // vale relembrar que o número digitado é alterado manualmente a cada repetição
// Conte quantos números diferentes de zero foram digitados e mostre o total no console ao final.

// Observação:
// Considere que o valor de numeroDigitado é alterado manualmente a cada repetição.
2 respostas

Olá, Esperidião! Tudo bem?

Vamos entender a lógica por trás do exercício 5 da sua lista de exercícios.

A ideia principal aqui é usar um laço do...while para simular a entrada de números até que o número digitado seja zero. Durante esse processo, você deve contar quantos números diferentes de zero foram "digitados".

Vamos aos seus pontos

Ponto 1: Sim, é possível ter um laço de repetição onde você altera manualmente uma variável a cada rodada. No seu caso, a variável numeroDigitado é alterada manualmente dentro do laço para simular a entrada de números.

Ponto 2: A cada iteração do laço, você simula um novo número sendo "digitado". Se o número for diferente de zero, você incrementa a variável quantidade, que conta quantos números diferentes de zero foram "digitados".

Ponto 3: Conhecer listas (ou arrays) pode ser útil, mas o foco deste exercício é entender o funcionamento do laço do...while. Ele é usado quando você quer que o bloco de código seja executado pelo menos uma vez, o que é o caso aqui, já que você quer garantir que pelo menos uma entrada seja processada.

Ponto 4: Estabelecer um limite de 0 a 10 para o número pode ser uma abordagem interessante para outros tipos de exercícios, mas aqui o objetivo é praticar a lógica de repetição até que uma condição específica seja atendida (neste caso, até que o número digitado seja zero).

Exemplo

No seu código, você está simulando entradas com os valores 5, 10 e 0. O laço do...while continua executando até que numeroDigitado seja zero. Durante as iterações, você conta quantas vezes um número diferente de zero foi "digitado", incrementando a variável quantidade sempre que numeroDigitado não for zero.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Olá, Daniel! Agradeço pelo retorno e por esclarecer o objetivo pedagógico de exercitar o do...while.

Entendi a ideia de tentar simular o comportamento de um usuário. No entanto, a minha dificuldade com os exercícios 5, 6 e 10 não foi com a sintaxe do laço ou com estruturas condicionais (as quais consegui aplicar nos demais exercícios da lista), mas sim por uma incompatibilidade entre o enunciado e a mecânica de execução do JavaScript:

Iteração vs. Interação: Um laço no JS roda de forma síncrona em frações de milissegundo. Sem uma instrução de bloqueio/espera para leitura de terminal (como readline ou prompt), é tecnicamente impossível para um ser humano "alterar uma variável manualmente entre cada rodada" enquanto o loop executa.

A perda do fluxo dinâmico: Para fazer o código rodar sem travar em um loop infinito, o gabarito precisou usar um contador auxiliar (passo === 0, passo === 1) dentro do próprio laço para injetar os valores. Ao pré-programar a sequência de entradas dentro do código-fonte, o laço deixa de tratar uma condição indeterminada/dinâmica e passa a seguir um roteiro 100% estático.

Comportamento humano imprevisível: Em um cenário real (como um menu ou jogo de adivinhação), o usuário pode escolher a mesma opção várias vezes ou digitar valores em qualquer ordem. Tentar simular esse fator humano engessando valores num if/else dentro do loop descaracteriza a própria razão de ser do do...while. o indíviduo pode checar o saldo, depois fazer um depósito e depois checar o saldo novamente até pedir para sair

Acredito que forçar essa simulação sem o uso de Arrays ou de ferramentas de leitura de dados acaba gerando um ruído de lógica para quem está tentando entender o fluxo de execução real de um programa.

Agradeço pela atenção e pelo suporte!

Abraços,
Esperidião