Capítulo 16: Operações Avançadas em Matrizes (Cálculos e Agregações)
🎯 Objetivo da Aula
Em sistemas de Business Intelligence (BI) e ERPs corporativos, uma tabela em memória não serve apenas para guardar valores: precisamos extrair totais consolidados por linha (ex: quanto cada filial vendeu no ano), totais por coluna (ex: quanto a empresa inteira faturou no mês de Janeiro) e cruzar matrizes de distâncias entre polos logísticos.
Nesta aula, você aprenderá a:
- Implementar o algoritmo de Somatório e Média por Linha.
- Implementar o algoritmo de Somatório e Média por Coluna.
- Compreender a teoria da Diagonal Principal ($L = C$) e Diagonal Secundária.
- Construir uma Matriz de Tarifas Cruzadas de Frete (Origem $\times$ Destino).
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_16.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_16.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: A FastLog opera rotas entre 4 Capitais Brasileiras:
1: São Paulo (SP)2: Rio de Janeiro (RJ)3: Curitiba (PR)4: Belo Horizonte (MG)
Os custos de transporte entre as cidades são armazenados em uma matriz $4 \times 4$. Quando a origem e o destino são a mesma cidade (ex: SP para SP), a distância e o custo são zero (a Diagonal Principal).
Missão: Você deve construir o Cotador de Rotas Intermunicipais FastLog, permitindo que o operador consulte o valor do frete digitando apenas os números da cidade de Origem e da cidade de Destino.
🧠 Fundamentos: Algoritmos de Agregação em Matrizes
1. Somatório por Linha vs Somatório por Coluna
graph TD
subgraph Matriz_Calculos ["Matriz de Vendas (3 Filiais x 3 Meses)"]
M11["[1,1]"] --- M12["[1,2]"] --- M13["[1,3]"] --> SumL1["Total Linha 1: Filial SP"]
M21["[2,1]"] --- M22["[2,2]"] --- M23["[2,3]"] --> SumL2["Total Linha 2: Filial RJ"]
M31["[3,1]"] --- M32["[3,2]"] --- M33["[3,3]"] --> SumL3["Total Linha 3: Filial PR"]
M11 -.-> SumC1["Total Coluna 1:<br/>Mês Jan"]
M12 -.-> SumC2["Total Coluna 2:<br/>Mês Fev"]
M13 -.-> SumC3["Total Coluna 3:<br/>Mês Mar"]
end
style SumL1 fill:#2980b9,stroke:#fff,color:#fff
style SumL2 fill:#2980b9,stroke:#fff,color:#fff
style SumL3 fill:#2980b9,stroke:#fff,color:#fff
style SumC1 fill:#8e44ad,stroke:#fff,color:#fff
style SumC2 fill:#8e44ad,stroke:#fff,color:#fff
style SumC3 fill:#8e44ad,stroke:#fff,color:#fff- Para Somar por Linha: Fixe a linha
lno laço externo, zere o acumuladortotalLinha <- 0, e percorra todas as colunasccom o laço interno. - Para Somar por Coluna: Inverta a ordem dos laços! Fixe a coluna
cno laço externo, zere o acumuladortotalColuna <- 0, e percorra todas as linhaslcom o laço interno.
Calculando a Média (Soma ÷ Contagem)
Uma vez que você tenha o somatório de uma linha (ou coluna), a média é simplesmente esse total dividido pela quantidade de elementos que foram somados:
Mini-Exemplo — Somatório e Média de uma única linha:
Imagine a Linha 1 (Filial SP) com 3 valores de faturamento mensal: [1200.00, 1500.00, 1100.00].
2. A Diagonal Principal ($L = C$)
Em uma matriz quadrada ($N \times N$), a Diagonal Principal é formada pelas células onde o índice da linha é rigorosamente igual ao índice da coluna:
matriz[1, 1],matriz[2, 2],matriz[3, 3],matriz[4, 4].- Em matrizes de frete e distâncias, a diagonal principal representa o custo local de uma cidade para ela mesma (geralmente zero).
📖 Exemplo Guiado: Matriz de Cotação de Rotas ($4 \times 4$)
Código do Algoritmo:
✅ Exemplo de Execução no Console (F9):
🛠️ Prática Obrigatória 1: Somatório Anual de 3 Filiais (Totais por Linha)
Passo 1: O Desafio
Crie um algoritmo "Soma_Linhas_Filiais" que receba uma matriz $3 \times 4$ (3 Filiais $\times$ 4 Trimestres).
O programa deve:
- Receber os dados da matriz.
- Calcular e imprimir o Faturamento Total Anual de cada uma das 3 Filiais separadamente.
- Calcular e imprimir também a Média Trimestral de cada Filial (Total Anual ÷ 4 trimestres).
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Somatório de Vendas Globais por Mês (Totais por Coluna)
Com a mesma matriz $3 \times 4$, construa o laço invertido que calcula o Faturamento Total da Empresa em cada um dos 4 Trimestres (somando todas as filiais na vertical).
✅ Resultado Esperado (Prática 2):
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_16_SeuNome_SeuSobrenome.alg. - Verifique se os acumuladores de linha e coluna são devidamente zerados a cada iteração externa.
- No Microsoft Teams, envie na tarefa “VisuAlg Cap 16 - Operações em Matrizes”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar os conceitos essenciais de Álgebra Linear Computacional e Processamento Matricial. Frameworks como NumPy (Python), TensorFlow e PyTorch utilizam operações matriciais altamente otimizadas na GPU para treinar Modelos de Linguagem (LLMs) e Redes Neurais Artificiais.
🔥 Desafio de Fixação: Soma da Diagonal Principal
Crie um algoritmo que leia uma matriz $4 \times 4$ de números inteiros e calcule a soma exclusiva dos elementos que pertencem à Diagonal Principal (l = c).
🔑 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.
- Para somar os valores de uma matriz por linha, qual índice deve ficar fixo no laço externo e qual índice o laço interno percorre, segundo os Fundamentos?
- Como se deve inverter a ordem dos laços para calcular o somatório por coluna, em comparação com o somatório por linha?
- O que é a Diagonal Principal de uma matriz quadrada, e qual condição matemática entre linha e coluna a define?
- Em matrizes de frete e distâncias entre cidades, o que a Diagonal Principal geralmente representa?
- No Cenário Prático, quais são as 4 capitais brasileiras atendidas pela FastLog e seus respectivos números de identificação (1 a 4)?
- No algoritmo
Cotador_Rotas_4x4, o que o programa exibe quando a cidade de origem digitada é igual à cidade de destino? - Na Prática Obrigatória 1 (
Soma_Linhas_Filiais), qual é a dimensão da matriz de vendas utilizada (quantas filiais por quantos trimestres)? - Na Prática Obrigatória 2, qual índice passa a ser fixado no laço externo, em vez do índice usado como laço externo na Prática 1?
- Segundo o Checkpoint de Lógica, quais frameworks citados usam operações matriciais otimizadas em GPU para treinar Modelos de Linguagem (LLMs) e Redes Neurais?
- No código
Soma_Linhas_Filiais, por que a variáveltotalFilialprecisa ser zerada (totalFilial <- 0.0) dentro do laço externo, antes de somar os dados de cada nova filial?