Capítulo 16: Matrizes II: Processamento Complexo

🎯 Objetivo da Aula

Uma tabela não serve apenas para guardar dados, mas para gerar informações. Nesta aula, você aprenderá a processar matrizes de forma avançada. O objetivo é dominar a técnica de percorrer a matriz para realizar Somas Totais, Médias por Linha e identificar padrões em grades de dados complexas.


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

Situação: O setor financeiro da FastLog registrou o faturamento de 3 filiais durante os primeiros 3 meses do ano em uma matriz 3x3. O Problema: O gerente precisa saber o faturamento total de cada filial separadamente (soma das linhas) e o faturamento total da empresa no trimestre (soma de toda a matriz).

Missão: Criar um programa que processe essa matriz financeira e gere os totais automaticamente.


🧠 Fundamentos: A Teoria Traduzida

1. Acumuladores em Matrizes

Para somar dados em uma tabela, usamos variáveis acumuladoras.

🎮 Exemplo 1: Cotidiano (Pontos de Jogo)

Somar a pontuação de 3 jogadores em 3 fases diferentes.

💰 Exemplo 2: Técnico (Faturamento de Filiais)

Somar o faturamento de 3 filiais da transportadora nos últimos 3 meses.

graph LR
    M[Matriz Financeira] --> L1[Filial Norte: Soma Linha 1]
    M --> L2[Filial Sul: Soma Linha 2]
    M --> L3[Filial Leste: Soma Linha 3]
    
    style L1 fill:#2ecc71,stroke:#fff,color:#fff

2. Padrão de Soma de Linha

Para somar uma linha, o índice da Linha fica parado enquanto o índice da Coluna percorre todos os valores. Dica de Ouro: Zeramos a variável soma_filial toda vez que mudamos de linha.


📖 Exemplo Guiado: Relatório de Faturamento

Para somar dados em uma matriz, usamos acumuladores. Para somar uma linha, mantemos o índice da linha fixo enquanto o da coluna varia.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
algoritmo "Relatorio_Financeiro"
var
   faturamento : vetor [1..3, 1..3] de real
   l, c : inteiro
   soma_filial, total_empresa : real
inicio
   total_empresa <- 0
   para l de 1 ate 3 faca
      soma_filial <- 0
      para c de 1 ate 3 faca
         escreva("Filial ", l, " Mês ", c, ": ")
         leia(faturamento[l,c])
         soma_filial <- soma_filial + faturamento[l,c]
      fimpara
      escreval("Total Filial ", l, ": R$ ", soma_filial)
      total_empresa <- total_empresa + soma_filial
   fimpara
   escreval("FATURAMENTO TOTAL: R$ ", total_empresa)
fimalgoritmo

🛠️ Prática Obrigatória 1: Estoque por Setor

Crie um algoritmo chamado “Estoque_por_Setor”. Use uma matriz 2x2 (2 Galpões, 2 Prateleiras). O programa deve somar e exibir o total de itens de cada Galpão (linha) separadamente.

✅ Resultado Esperado

1
2
Galpão 1: 150 itens
Galpão 2: 300 itens

🛠️ Prática Obrigatória 2: Média por Aluno FastLog

Crie uma matriz 3x3 onde cada linha representa um aluno e as colunas representam 3 notas de avaliações de segurança. O programa deve calcular e exibir a média final de cada um dos 3 alunos.

✅ Resultado Esperado

1
2
3
Aluno 1 - Média: 8.5
Aluno 2 - Média: 7.0
...

🔥 Desafio de Fixação (Opcional): Localizar Valor na Matriz

Crie um programa que peça 9 números para preencher uma matriz 3x3. Em seguida, peça um valor X para pesquisar. O programa deve dizer em qual Linha e Coluna o valor X se encontra (ou se não existe).


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Lembre-se de zerar o acumulador de linha toda vez que o loop externo mudar.
  2. Salve os arquivos com a extensão .alg (Ex: Atividade_16_SeuNome.alg).
  3. Envie no Microsoft Teams na tarefa “VisuAlg Cap 16 - Cálculos em Matrizes”.

🔑 Gabarito de Código

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
algoritmo "Estoque"
var
   mat : vetor [1..2, 1..2] de inteiro
   l, c, soma : inteiro
inicio
   para l de 1 ate 2 faca
      soma <- 0
      para c de 1 ate 2 faca
         escreva("G", l, " P", c, ": ") leia(mat[l,c])
         soma <- soma + mat[l,c]
      fimpara
      escreval("Total Galpão ", l, ": ", soma)
   fimpara
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
algoritmo "BuscaMatriz"
var
   mat : vetor [1..3, 1..3] de inteiro
   l, c, x : inteiro
   achou : logico
inicio
   para l de 1 ate 3 faca
      para c de 1 ate 3 faca
         leia(mat[l,c])
      fimpara
   fimpara
   escreva("Buscar: ") leia(x)
   achou <- falso
   para l de 1 ate 3 faca
      para c de 1 ate 3 faca
         se (mat[l,c] = x) entao
            escreval("Localizado em: ", l, ",", c)
            achou <- verdadeiro
         fimse
      fimpara
   fimpara
fimalgoritmo