Capítulo 12: Laços de Repetição Aninhados

🎯 Objetivo da Aula

Nesta aula, o nível de complexidade sobe. Você aprenderá a colocar um laço de repetição dentro de outro. O objetivo é entender como as Repetições Aninhadas funcionam, permitindo que você processe dados em duas dimensões (como as horas e minutos de um relógio ou as linhas e colunas de uma planilha).


🏢 O Cenário Prático (Seu Desafio)

Situação: A FastLog precisa de uma planilha de todas as tabuadas possíveis, do 1 ao 10, para servir de consulta rápida no galpão.

Missão: Criar um programa que não imprima apenas uma tabuada, mas todas as 10 tabuadas de uma vez, de forma organizada.


🧠 Fundamentos: A Teoria Traduzida

1. O Conceito de Ninho

Imagine o ponteiro de um relógio: o ponteiro dos minutos precisa dar 60 voltas completas para que o ponteiro das horas dê apenas 1 passo.

⌚ Exemplo 1: Cotidiano (Relógio)

para (hora=1...) { para (min=1...) { tique_taque } }

📊 Exemplo 2: Técnico (Tabela de Custos)

para (regiao=1...) { para (faixa_peso=1...) { calcular_tarifa } }

graph TD
    A[Início Loop Região] --> B[Início Loop Faixa Peso]
    B --> C{Fim da Faixa?}
    C -- "Sim" --> D[Próxima Região]
    C -- "Não" --> B
    
    style B fill:#8e44ad,stroke:#fff,color:#fff
    style D fill:#2ecc71,stroke:#fff,color:#fff

📖 Exemplo Guiado: A Fábrica de Tabuadas

Loops aninhados permitem processar dados em duas dimensões. No exemplo abaixo, o loop j faz 10 voltas para cada volta única do loop i:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
programa {
	funcao inicio() {
		para (inteiro i = 1; i <= 10; i++) {
			escreva("=== TABUADA DO ", i, " ===\n")
			para (inteiro j = 1; j <= 10; j++) {
				escreva(i, " x ", j, " = ", i * j, "\n")
			}
			escreva("\n")
		}
	}
}

🛠️ Prática Obrigatória 1: Cronômetro Simples

Crie um programa que use dois laços para: um para os minutos (0 a 5) e outro para os segundos (0 a 59). Exiba o tempo formatado.

✅ Resultado Esperado

1
2
3
4
5
0 : 0
0 : 1
...
0 : 59
1 : 0

🛠️ Prática Obrigatória 2: Mapa de Estoque FastLog

Imagine um galpão com 3 corredores e 5 prateleiras em cada. Use loops aninhados para exibir o endereço de cada posição disponível para armazenamento.

✅ Resultado Esperado

1
2
3
4
Corredor 1 - Prateleira 1
Corredor 1 - Prateleira 2
...
Corredor 3 - Prateleira 5

🔥 Desafio de Fixação (Opcional): Triângulo de Asteriscos

Crie um programa que peça um número (ex: 5) e desenhe um triângulo de asteriscos no console usando loops aninhados. Dica: O loop interno deve rodar até o valor atual do contador do loop externo.


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Evite aninhamentos excessivos (mais de 3 níveis) para não comprometer o desempenho.
  2. Salve os arquivos com a extensão .por (Ex: Atividade_12_SeuNome.por).
  3. Envie no Microsoft Teams na tarefa “Capítulo 12 - Laços Aninhados”.

🔑 Gabarito de Código

Prática 1:

1
2
3
4
5
6
7
8
9
programa {
	funcao inicio() {
		para (inteiro m = 0; m <= 5; m++) {
			para (inteiro s = 0; s <= 59; s++) {
				escreva(m, " : ", s, "\n")
			}
		}
	}
}

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
programa {
	funcao inicio() {
		inteiro n
		escreva("Tamanho: ") leia(n)
		para (inteiro i = 1; i <= n; i++) {
			para (inteiro j = 1; j <= i; j++) {
				escreva("*")
			}
			escreva("\n")
		}
	}
}