Respostas

Gabarito Comentado: Praticando com Estruturas de Repetição em JavaScript

Nível Básico: Dominando os Loops Clássicos


Exercício 1: Contagem Simples com for

💡 Dica: Lembre-se da estrutura do for: for (início; condição; atualização). Você precisa começar em 1 e parar quando o número for maior que 20.

// A estrutura do 'for' é ideal quando sabemos o número exato de repetições.
// 1. Início: let i = 1; (começamos a contar do 1)
// 2. Condição: i <= 20; (o loop continua enquanto 'i' for menor ou igual a 20)
// 3. Atualização: i++; (a cada volta, incrementamos 'i' em 1)
for (let i = 1; i <= 20; i++) {
  console.log(i); // Imprime o valor atual de 'i'
}

Exercício 2: Contagem Regressiva com for

💡 Dica: A lógica é parecida com a do exercício anterior, mas o valor inicial será maior e a atualização será de decremento (--).

// 1. Início: let i = 10; (o ponto de partida é o 10)
// 2. Condição: i >= 0; (o loop roda enquanto 'i' for maior ou igual a 0)
// 3. Atualização: i--; (a cada volta, diminuímos 'i' em 1)
for (let i = 10; i >= 0; i--) {
  console.log(i);
}

Exercício 3: Tabuada com for

💡 Dica: Você pode usar prompt() para pegar o número do usuário. Dentro do loop, calcule numero * i e imprima o resultado formatado.

// Pede um número ao usuário e o converte para um valor numérico
const numero = parseInt(prompt("Digite um número para ver a tabuada:"));

// Imprime um título para a tabuada
console.log(`Tabuada do ${numero}:`);

// O loop vai de 1 a 10 para calcular a tabuada
for (let i = 1; i <= 10; i++) {
  // Calcula o resultado da multiplicação
  const resultado = numero * i;
  // Imprime a linha da tabuada de forma clara
  console.log(`${numero} x ${i} = ${resultado}`);
}

Exercício 4: Somente Números Pares com while

💡 Dica: Inicie uma variável em 2. A condição do while deve ser enquanto essa variável for menor ou igual a 20. Dentro do loop, não se esqueça de incrementar a variável de 2 em 2 (variavel += 2).

// Inicializamos a variável de controle com o primeiro número par
let i = 2;

// O loop 'while' continuará enquanto a condição (i <= 20) for verdadeira
while (i <= 20) {
  console.log(i); // Imprime o número par atual
  i += 2; // Atualiza 'i' para o próximo número par, evitando um loop infinito
}

Exercício 5: Validação de Senha com do...while

💡 Dica: O do...while é perfeito aqui, pois garante que o prompt seja executado pelo menos uma vez. A condição no while verificará se a tentativa é diferente da senha correta.

const senhaCorreta = "1234";
let tentativa;

// O loop 'do...while' executa o bloco de código primeiro e depois testa a condição.
do {
  // Pede a senha ao usuário a cada tentativa
  tentativa = prompt("Digite a senha:");
} while (tentativa !== senhaCorreta); // Continua o loop enquanto a tentativa for diferente da senha correta

// Quando o loop termina, significa que a senha está correta
console.log("Acesso liberado!");

Exercício 6: Percorrendo um Array de Frutas com for...of

💡 Dica: O for...of foi feito para percorrer itens de listas (iteráveis) de forma simples, sem a necessidade de controlar um índice i.

const frutas = ["Maçã", "Banana", "Morango", "Uva", "Abacaxi"];

// O 'for...of' é a forma mais moderna e legível para iterar sobre os valores de um array.
// A cada volta, a variável 'fruta' recebe um dos elementos do array 'frutas'.
for (let fruta of frutas) {
  console.log(fruta);
}

Exercício 7: Exibindo Propriedades de um Objeto com for...in

💡 Dica: O for...in percorre as chaves (propriedades) de um objeto. Para acessar o valor, use objeto[chave].

const carro = {
  modelo: "Fiat Argo",
  ano: 2023,
  cor: "Vermelho"
};

// O 'for...in' itera sobre as chaves ('modelo', 'ano', 'cor') do objeto 'carro'.
for (let chave in carro) {
  // 'chave' contém o nome da propriedade (ex: "modelo")
  // 'carro[chave]' acessa o valor correspondente (ex: "Fiat Argo")
  console.log(`${chave}: ${carro[chave]}`);
}

Nível Intermediário: Manipulando Dados e Controlando Fluxos


Exercício 8: Somando Elementos de um Array

💡 Dica: Crie uma variável soma inicializada com 0. Dentro do loop, some cada número do array a essa variável.

const numeros = [10, 5, 8, 20, 3];
let soma = 0; // Variável 'acumuladora' que guarda a soma

// Usamos 'for...of' para pegar cada número do array
for (let numero of numeros) {
  soma += numero; // O mesmo que 'soma = soma + numero'
}

console.log("A soma total é: " + soma); // Imprime o resultado final

Exercício 9: Encontrando o Primeiro Múltiplo de 5

💡 Dica: Use o operador de módulo (%) para checar se um número é múltiplo de outro. numero % 5 === 0 significa que é múltiplo de 5. Quando encontrar, use break para sair do loop.

const numeros = [1, 7, 3, 10, 9, 15];

for (let numero of numeros) {
  // Verifica se o resto da divisão por 5 é zero
  if (numero % 5 === 0) {
    console.log("O primeiro múltiplo de 5 é: " + numero);
    break; // Encerra o loop imediatamente, pois já encontramos o que queríamos
  }
}

Exercício 10: Pulando os Números Ímpares

💡 Dica: Dentro do for, verifique se o número é ímpar (numero % 2 !== 0). Se for, chame o continue para pular para a próxima iteração.

for (let i = 1; i <= 15; i++) {
  // Se o número for ímpar...
  if (i % 2 !== 0) {
    continue; // ...pula para a próxima iteração, ignorando o código abaixo.
  }
  // Este console.log só é executado se o 'continue' não for acionado (ou seja, para números pares)
  console.log(i);
}

Exercício 11: Encontrando o Maior Número em um Array

💡 Dica: Crie uma variável maiorNumero e atribua a ela o primeiro elemento do array. Depois, percorra o restante do array. Se encontrar um número maior, atualize o valor de maiorNumero.

const numeros = [3, 9, 2, 17, 4, 1];
// Assumimos que o primeiro número é o maior, para ter um ponto de partida
let maiorNumero = numeros[0];

// Começamos o loop do segundo elemento (índice 1) para comparar
for (let i = 1; i < numeros.length; i++) {
  // Se o número atual for maior que o nosso 'maiorNumero' guardado...
  if (numeros[i] > maiorNumero) {
    maiorNumero = numeros[i]; // ...atualizamos o valor de 'maiorNumero'.
  }
}

console.log("O maior número é: " + maiorNumero);

Exercício 12: Contando Vogais em uma String

💡 Dica: Você pode criar um array ou uma string com as vogais para facilitar a verificação. Use .toLowerCase() na letra atual para não se preocupar com maiúsculas.

const frase = "Aprender a programar é incrível!";
let contadorDeVogais = 0;

// Percorremos cada letra da frase, já convertida para minúscula.
for (let letra of frase.toLowerCase()) {
  
  // Verificamos se a 'letra' atual é igual a uma das vogais.
  // O operador || (OU) checa uma condição após a outra. Se qualquer uma for verdadeira, o bloco do if é executado.
  if (letra === 'a' || letra === 'e' || letra === 'i' || letra === 'o' || letra === 'u') {
    contadorDeVogais++; // Se for uma vogal, incrementa o contador.
  }
}

console.log(`A frase tem ${contadorDeVogais} vogais.`);

OU

const frase = "Aprender a programar é incrível!";
const vogais = "aeiou"; // Uma string que contém todas as vogais.
let contadorDeVogais = 0;

// Percorremos cada letra da frase.
for (let letra of frase.toLowerCase()) {

  // O método 'indexOf(letra)' procura a 'letra' dentro da string 'vogais'.
  // Se ele encontrar a letra, retorna sua posição (0 para 'a', 1 para 'e', etc.).
  // Se NÃO encontrar, ele retorna -1.
  // Portanto, se o resultado for diferente de -1, significa que a letra é uma vogal.
  if (vogais.indexOf(letra) !== -1) {
    contadorDeVogais++; // Incrementa o contador.
  }
}

console.log(`A frase tem ${contadorDeVogais} vogais.`);

Exercício 13: Filtrando Nomes

💡 Dica: Strings têm um método chamado .startsWith(). Você pode usar nome.startsWith("A") para checar.

const nomes = ["Ana", "Marcos", "Antônio", "Beatriz", "Amanda"];

console.log("Nomes que começam com a letra 'A':");

for (let nome of nomes) {
  // '.startsWith("A")' retorna 'true' se a string começar com "A"
  if (nome.startsWith("A")) {
    console.log(nome);
  }
}

Nível Avançado: Loops Aninhados e Métodos Funcionais


Exercício 14: Desenhando um Quadrado

💡 Dica: O loop externo controlará as linhas. O loop interno controlará as colunas e montará a string de cada linha.

const tamanho = 5; // Define o tamanho do lado do quadrado

// Loop externo: controla as linhas (altura)
for (let i = 0; i < tamanho; i++) {
  let linha = ""; // A cada nova linha, reiniciamos a string
  // Loop interno: controla as colunas (largura)
  for (let j = 0; j < tamanho; j++) {
    linha += "* "; // Adiciona um asterisco à string da linha
  }
  console.log(linha); // Imprime a linha completa
}

Exercício 15: Percorrendo uma Matriz

💡 Dica: O primeiro loop percorre as linhas (os arrays internos). O segundo loop percorre os elementos de cada linha.

const matriz = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

// O primeiro 'for...of' pega cada array interno (linha)
for (let linha of matriz) {
  // O segundo 'for...of' pega cada número dentro da linha atual
  for (let numero of linha) {
    console.log(numero);
  }
}

Exercício 16: Invertendo uma Array Manualmente

💡 Dica: A forma mais fácil é criar um novo array vazio. Depois, você pode percorrer o array original do último ao primeiro elemento usando um loop for e adicionar cada item ao novo array com .push().

const numerosOriginais = [1, 2, 3, 4, 5];
const numerosInvertidos = []; // 1. Crie um array vazio para o resultado.

// 2. Configure o loop 'for' para começar pelo último índice do array.
// O último índice é sempre 'array.length - 1'.
// A condição é rodar enquanto o índice 'i' for maior ou igual a 0.
// O passo é 'i--', para ir diminuindo o índice.
for (let i = numerosOriginais.length - 1; i >= 0; i--) {
  
  // 3. A cada volta, pegue o elemento da posição 'i' do array original...
  const elemento = numerosOriginais[i];
  
  // 4. ...e adicione-o ao final do novo array.
  numerosInvertidos.push(elemento);
}

console.log(numerosInvertidos); // Saída: [5, 4, 3, 2, 1]

Exercício 17: Filtrando e Mapeando Dados de Objetos

💡 Dica: Crie um array vazio para guardar os nomes dos produtos caros. Use um loop for...of para percorrer a lista de produtos. Dentro do loop, use um if para checar se produto.preco é maior que 50. Se for, adicione o produto.nome ao seu novo array.

const produtos = [
  { nome: "Notebook", preco: 2500 },
  { nome: "Mouse", preco: 80 },
  { nome: "Teclado", preco: 45 },
  { nome: "Monitor", preco: 950 },
  { nome: "Cadeira", preco: 35 }
];

// 1. Crie um array vazio para armazenar apenas os nomes dos produtos caros.
const nomesProdutosCaros = [];

// 2. Use 'for...of' para percorrer cada objeto 'produto' no array 'produtos'.
for (let produto of produtos) {
  
  // 3. Verifique se o preço do produto atual é maior que 50.
  if (produto.preco > 50) {
    // 4. Se for, adicione apenas a propriedade 'nome' do objeto ao novo array.
    nomesProdutosCaros.push(produto.nome);
  }
}

console.log(nomesProdutosCaros); // Saída: ["Notebook", "Mouse", "Monitor"]

Exercício 18: Encontrando Elementos em Comum

💡 Dica: A solução mais clássica para este problema envolve loops aninhados. O loop externo percorre o primeiro array, e para cada número, o loop interno percorre o segundo array para ver se encontra um número igual. Não se esqueça de criar um terceiro array para armazenar os números em comum!

const array1 = [1, 2, 3, 4, 5];
const array2 = [4, 5, 6, 7, 8];

// 1. Crie um array vazio para guardar os números que são encontrados em ambos.
const elementosEmComum = [];

// 2. O primeiro loop percorre cada 'numero1' do 'array1'.
for (let numero1 of array1) {
  
  // 3. O segundo loop (aninhado) percorre cada 'numero2' do 'array2'.
  for (let numero2 of array2) {
    
    // 4. Se o número do primeiro array for igual ao do segundo...
    if (numero1 === numero2) {
      // 5. ...adicionamos esse número ao nosso array de resultados.
      elementosEmComum.push(numero1);
    }
  }
}

console.log(elementosEmComum); // Saída: [4, 5]

Exercício 19: Calculando Balanço Financeiro

💡 Dica: Comece criando um objeto para armazenar os totais, por exemplo: { receitas: 0, despesas: 0, saldo: 0 }. Depois, percorra o array de transações com um loop. Dentro do loop, use um if para verificar o tipo da transação e some o valor à chave correspondente no seu objeto de totais. O saldo pode ser calculado após o loop.

const transacoes = [
  { tipo: 'receita', valor: 1200 },
  { tipo: 'despesa', valor: 350 },
  { tipo: 'receita', valor: 500 },
  { tipo: 'despesa', valor: 80 },
  { tipo: 'despesa', valor: 120 }
];

// 1. Crie um objeto para acumular os resultados.
let balanco = {
  receitas: 0,
  despesas: 0,
  saldo: 0
};

// 2. Use um loop 'for...of' para percorrer cada transação.
for (let transacao of transacoes) {
  
  // 3. Verifique o tipo da transação.
  if (transacao.tipo === 'receita') {
    // Se for 'receita', some o valor à propriedade 'receitas' do balanço.
    balanco.receitas += transacao.valor;
  } else if (transacao.tipo === 'despesa') {
    // Se for 'despesa', some o valor à propriedade 'despesas'.
    balanco.despesas += transacao.valor;
  }
}

// 4. Após o loop, calcule o saldo final subtraindo despesas das receitas.
balanco.saldo = balanco.receitas - balanco.despesas;

console.log("Balanço Financeiro:");
console.log(balanco); 
// Saída:
// Balanço Financeiro:
// { receitas: 1700, despesas: 550, saldo: 1150 }

Exercício 20: Combinação de Dados

💡 Dica: O loop externo percorrerá os produtos. Para cada produto, o loop interno percorrerá todas as cores, criando as combinações.

const produtos = ["Camiseta", "Calça", "Tênis"];
const cores = ["Azul", "Preto", "Branco"];

// Para cada produto no array 'produtos'...
for (let produto of produtos) {
  // ...percorremos todas as cores no array 'cores'.
  for (let cor of cores) {
    // Imprimimos a combinação do produto atual com a cor atual.
    console.log(`${produto} ${cor}`);
  }
}

Last updated