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