Capítulo 15: Matrizes I: Arrays Bidimensionais (Tabelas em Memória)
🎯 Objetivo da Aula
Quando os dados corporativos possuem duas dimensões (como um relatório de estoque por filial e categoria, ou um mapa de assentos de um voo cargueiro), um vetor simples de uma dimensão não é suficiente. Precisamos de uma Matriz (Array 2D).
Nesta aula, você aprenderá a:
- Compreender a estrutura conceitual de uma Matriz Bidimensional (Linhas $\times$ Colunas).
- Dominar a sintaxe de declaração:
tipo nomeMatriz[linhas][colunas]no Portugol Studio. - Compreender a Indexação Base Zero Bidimensional (
[0..L-1][0..C-1]). - Utilizar Laços Aninhados para preencher e desenhar tabelas formatadas no console.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_15.por (abra diretamente no Portugol Studio)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_15.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O sistema de WMS (Warehouse Management System) da FastLog gerencia o estoque de 3 Centros de Distribuição Regionais (CD 0: São Paulo, CD 1: Rio de Janeiro, CD 2: Curitiba). Cada CD armazena 3 categorias de mercadorias (Coluna 0: Eletrônicos, Coluna 1: Autopeças, Coluna 2: Farmacêuticos).
Missão: Construir o painel da Grade de Estoque Multirregional $3 \times 3$, permitindo que o gestor digite as quantidades em estoque e veja a tabela consolidada no console.
🧠 Fundamentos: A Estrutura de uma Matriz 2D
1. O que é uma Matriz?
Uma Matriz é uma tabela de elementos do mesmo tipo, organizada em Linhas Horizontais ($L$) e Colunas Verticais ($C$):
graph TD
subgraph Matriz_3x3 ["Matriz: estoque[3][3]"]
M00["[0][0] SP-Eletrônicos"] --- M01["[0][1] SP-Autopeças"] --- M02["[0][2] SP-Farma"]
M10["[1][0] RJ-Eletrônicos"] --- M11["[1][1] RJ-Autopeças"] --- M12["[1][2] RJ-Farma"]
M20["[2][0] PR-Eletrônicos"] --- M21["[2][1] PR-Autopeças"] --- M22["[2][2] PR-Farma"]
end
style M00 fill:#2980b9,stroke:#fff,color:#fff
style M11 fill:#8e44ad,stroke:#fff,color:#fff
style M22 fill:#27ae60,stroke:#fff,color:#fff2. A Regra Mnemônica: “LC” (Linha primeiro, Coluna depois)
No Portugol Studio, assim como em C, C++, Java e C#:
- O primeiro colchete
[ l ]sempre indica a Linha. - O segundo colchete
[ c ]sempre indica a Coluna.
Assim como o vetor unidimensional (Capítulo 13), a matriz também pode ser inicializada diretamente com valores literais entre chaves — só que agora são chaves aninhadas: uma chave externa para o conjunto de linhas, e uma chave interna para cada linha:
Cada linha entre { } internas vira uma linha da matriz, na ordem: a primeira { } interna preenche rotas[0][0] e rotas[0][1]; a segunda preenche rotas[1][0] e rotas[1][1].
📖 Exemplo Guiado: Grade de Estoque dos CDs
Código do Programa:
🛠️ Prática Obrigatória 1: Matriz Identidade $3 \times 3$ Automatizada
Passo 1: O Desafio
Em computação gráfica e álgebra linear, a Matriz Identidade possui o valor 1 na Diagonal Principal (onde linha == coluna) e 0 em todas as demais posições.
Crie um programa matriz_identidade.por que preencha automaticamente uma matriz $3 \times 3$ com essa regra usando um se (l == c) e exiba a grade na tela.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Tabuleiro de Ocupação de Doca (2×4)
Crie um programa ocupacao_docas.por que declare uma matriz $2 \times 4$ de inteiros (inteiro docas[2][4]) representando 2 turnos e 4 docas. Preencha com a quantidade de carretas atendidas e exiba a tabela final.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_15_SeuNome_SeuSobrenome.por. - Certifique-se de que os laços utilizam
lpara linhas ecpara colunas. - No Microsoft Teams, envie na tarefa “Portugol Cap 15 - Matrizes Bidimensionais”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de dominar Tabelas Relacionais e Tensors. O formato bidimensional [linha][coluna] é a exata representação de planilhas Excel, tabelas SQL e matrizes de pesos em Redes Neurais Artificiais (Inteligência Artificial).
🔥 Desafio de Fixação: Somatório Total de Matriz
Crie um programa que leia todos os valores de uma matriz $3 \times 3$ de números reais e calcule a Soma Total de todos os elementos armazenados na tabela.
🔑 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 é uma Matriz, segundo a definição apresentada nos Fundamentos deste capítulo?
- Qual é a sintaxe de declaração de uma matriz no Portugol Studio? Dê um exemplo de uma matriz 3x3 de
inteiro. - Explique a Regra Mnemônica “LC”: o que indica o primeiro colchete e o que indica o segundo colchete no acesso a uma matriz?
- No Cenário Prático da Grade de Estoque Multirregional, quais são os três Centros de Distribuição (linhas) e quais as três categorias de mercadoria (colunas)?
- No Exemplo Guiado, que tipo de estrutura de repetição é utilizada para preencher e depois exibir a matriz de estoque?
- O que é uma Matriz Identidade, segundo a Prática Obrigatória 1, e qual regra lógica (envolvendo linha e coluna) determina em quais posições deve ser colocado o valor 1?
- Na Prática Obrigatória 2 (Tabuleiro de Ocupação de Doca), quais são as dimensões da matriz criada e o que cada dimensão representa?
- Segundo o Checkpoint de Lógica & Engenharia de Software, a que estruturas do mundo real o formato bidimensional
[linha][coluna]é comparado? - Segundo a Regra Mnemônica LC, se você acessa
estoque[2][1], qual linha e qual coluna estão sendo referenciadas? - Dê um exemplo do dia a dia (fora da programação) de uma informação organizada em linhas e colunas, semelhante à grade de estoque multirregional da FastLog.