Capítulo 12: Laços Aninhados e Varredura Bidimensional
🎯 Objetivo da Aula
O espaço físico dos centros de distribuição e as telas de computadores são bidimensionais: possuem Linhas e Colunas, Corredores e Prateleiras. Para que um sistema varra todas as posições de uma estrutura desse tipo, precisamos de Laços Aninhados (Nested Loops).
Nesta aula, você aprenderá a:
- Compreender o fluxo de execução de Laços Aninhados no Portugol Studio.
- Dominar a coordenação das variáveis canônicas
i(Linha / Externo) ej(Coluna / Interno). - Compreender a noção intuitiva de Complexidade de Tempo ($O(N \times M)$).
- Mapear e desenhar grades de coordenadas visuais no console.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_12.por (abra diretamente no Portugol Studio)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_12.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O novo Centro Logístico Automatizado da FastLog possui 3 Galpões de Armazenagem. Cada galpão possui 4 Docas de Carregamento. O painel supervisor precisa gerar o mapa de todas as 12 posições físicas de carga ([G1-D1], [G1-D2], etc.) de forma automatizada no console.
Missão: Você deve construir o Mapeador de Docas FastLog, utilizando laços aninhados para gerar a grade de coordenadas bidimensionais.
🧠 Fundamentos: Como Funcionam os Laços Aninhados?
1. A Dinâmica dos Ponteiros de Relógio
Pense em laços aninhados como os ponteiros de um relógio:
- O Laço Interno (
j) gira rapidamente de 1 até o fim a cada ciclo. - O Laço Externo (
i) só avança+1quando o laço interno completa todas as suas repetições!
graph TD
A["Laço Externo: para (inteiro i = 1; i <= 3; i++) [Galpões]"] --> B["Laço Interno: para (inteiro j = 1; j <= 4; j++) [Docas]"]
B --> C["Ação: escreva('[G', i, '-D', j, '] ')"]
C --> D{j <= 4?}
D -- "Sim" --> B
D -- "Não (Fim das Docas)" --> E["escreva('\n') - Quebra Linha"]
E --> F{i <= 3?}
F -- "Sim" --> A
F -- "Não (Fim dos Galpões)" --> G[Fim do Mapeamento]
style A fill:#8e44ad,stroke:#fff,color:#fff
style B fill:#2980b9,stroke:#fff,color:#fff
style C fill:#27ae60,stroke:#fff,color:#fff
style G fill:#217346,stroke:#fff,color:#fff2. Complexidade de Execução ($N \times M$)
Se o laço externo roda 3 vezes e o laço interno roda 4 vezes, o comando central dentro das chaves será executado exatamente: $$3 \times 4 = 12 \text{ vezes}$$
Atenção às Variáveis de Controle:
Nunca declare a mesma variável i para o laço externo e para o interno. Use sempre nomes distintos (como i e j, ou linha e coluna).
📖 Exemplo Guiado: Mapeador de Posições do Centro Logístico
Código do Programa:
✅ Exemplo de Execução no Console (Shift + F6):
🛠️ Prática Obrigatória 1: Gerador de Tabuadas de Tarifas (1 a 5)
Passo 1: O Desafio
Crie um programa tabuadas_tarifas.por que utilize laços aninhados para gerar as tabuadas multiplicativas de tarifas de 1 até 5 (multiplicando de 1 a 10 cada uma).
- Laço externo: Tarifa base (1 a 5).
- Laço interno: Multiplicando (1 a 10).
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Grade Vertical de Armazenagem
No armazém vertical, temos 4 Níveis de Altura (Andares) e 6 Vagas por Andar.
Crie um programa grade_vertical.por que desenhe a grade de armazenagem completa utilizando colchetes [ ].
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_12_SeuNome_SeuSobrenome.por. - Verifique se o
\né disparado no final do laço interno. - No Microsoft Teams, envie na tarefa “Portugol Cap 12 - Laços Aninhados”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o alicerce de Computação Gráfica e Processamento de Matrizes. Cada pixel de uma tela de alta definição Full HD (1920 $\times$ 1080) é renderizado através de laços aninhados que percorrem linhas e colunas 60 vezes por segundo!
🔥 Desafio de Fixação: Pirâmide de Paletização
Crie um programa que utilize laços aninhados para desenhar uma pirâmide de caixas com asteriscos *:
- Linha 1:
* - Linha 2:
* * - Linha 3:
* * * - Linha 4:
* * * * - Linha 5:
* * * * *
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- O que caracteriza um Laço Aninhado, segundo a analogia dos ponteiros de relógio usada no capítulo?
- Por convenção adotada no capítulo, qual variável representa o laço Externo (Linha) e qual representa o laço Interno (Coluna)?
- Se o laço externo executa 3 vezes e o laço interno executa 4 vezes, quantas vezes o comando dentro das chaves do laço interno será executado ao todo? Explique com base na fórmula apresentada no capítulo.
- Segundo o aviso de atenção do capítulo, por que nunca se deve declarar a mesma variável de controle para o laço externo e para o laço interno?
- No Exemplo Guiado do Mapeador de Docas, quantos Galpões e quantas Docas por galpão são mapeados, e qual é o total de posições geradas ao final?
- Na Prática Obrigatória 1 (Gerador de Tabuadas de Tarifas), o que representa o laço externo e o que representa o laço interno?
- Na Prática Obrigatória 2 (Grade Vertical de Armazenagem), quantos Níveis de Altura (Andares) e quantas Vagas por Andar existem no armazém a ser mapeado?
- Segundo o Checkpoint de Lógica & Engenharia de Software, qual exemplo do cotidiano tecnológico o capítulo usa para ilustrar a aplicação de laços aninhados em Computação Gráfica?
- No diagrama de fluxo do capítulo, o que acontece com a execução quando a condição do laço interno (
j <= 4) é avaliada como “Não”? - Dê um exemplo do dia a dia, fora da programação, de uma estrutura organizada em linhas e colunas que poderia ser percorrida com laços aninhados, de forma parecida com o mapeamento de galpões e docas da FastLog.