Capítulo 15: Matrizes I: Arrays Bidimensionais

🎯 Objetivo da Aula

Um vetor é uma linha de dados. Uma Matriz é uma tabela inteira. Nesta aula, você aprenderá sobre as estruturas de dados bidimensionais. O objetivo é entender como localizar informações usando duas coordenadas: a Linha e a Coluna, permitindo que seu programa processe dados como se estivessem em uma planilha de Excel.


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

Situação: O galpão da FastLog é dividido em 3 prateleiras, e cada prateleira tem 3 nichos para caixas. O Problema: Você precisa registrar a quantidade de caixas em cada nicho desse galpão 3x3.

Missão: Criar um mapa digital do galpão usando uma matriz e exibir a ocupação total de cada setor.


🧠 Fundamentos: A Teoria Traduzida

1. O que é uma Matriz?

Pense em uma matriz como um prédio ou uma grade de coordenadas.

💺 Exemplo 1: Cotidiano (Cinema)

Localizar seu assento: Fila (Linha) F, Cadeira (Coluna) 12.

🏭 Exemplo 2: Técnico (Endereçamento de Galpão)

Localizar um pallet: Rua (Linha) 3, Prateleira (Coluna) 5.

graph TD
    M[Matriz Galpão]
    M --> L0[Rua 0]
    M --> L1[Rua 1]
    M --> L2[Rua 2]
    L0 --> C0["Endereço [0][0]"]
    L0 --> C1["Endereço [0][1]"]
    
    style C0 fill:#3498db,stroke:#fff,color:#fff

3. Declaração no Portugol

1
inteiro galpao[3][3] // Uma grade de 3x3

📖 Exemplo Guiado: Mapa de Ocupação

Para percorrer uma matriz (tabela), precisamos de dois loops para (um dentro do outro). O primeiro controla as Linhas (l) e o segundo as Colunas (c):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
programa {
	funcao inicio() {
		inteiro grade[3][3]
		
		para (inteiro l = 0; l < 3; l++) {
			para (inteiro c = 0; c < 3; c++) {
				escreva("Valor em [", l, "][", c, "]: ")
				leia(grade[l][c])
			}
		}
		
		escreva("\n--- TABELA ---\n")
		para (inteiro l = 0; l < 3; l++) {
			para (inteiro c = 0; c < 3; c++) {
				escreva("[ ", grade[l][c], " ] ")
			}
			escreva("\n") 
		}
	}
}

🛠️ Prática Obrigatória 1: Agenda de Contatos

Crie uma matriz de cadeia com 3 linhas e 2 colunas. A coluna 0 guardará o Nome e a coluna 1 o Telefone. Use loops para cadastrar 3 pessoas e depois exiba a lista formatada.

✅ Resultado Esperado

1
2
3
Nome: Ana | Fone: 9999-0000
Nome: Bia | Fone: 8888-1111
Nome: Caio | Fone: 7777-2222

🛠️ Prática Obrigatória 2: Relatório de Vendas Trimestral FastLog

Crie uma matriz 3x3 onde as linhas representam 3 Vendedores e as colunas os Meses (Jan, Fev, Mar). Peça os valores de venda de cada célula e exiba a tabela final organizada.

✅ Resultado Esperado

1
2
3
4
5
VENDA VENDEDOR 1 - MÊS 1: 1500.0
...
TABELA FINAL:
[ 1500.0 ] [ 1200.0 ] [ 1800.0 ]
...

🔥 Desafio de Fixação (Opcional): Batalha Naval Simplificada

Crie uma matriz 3x3 preenchida com zeros. “Esconda” um navio (número 1) em uma posição fixa. Peça para o usuário digitar uma linha e uma coluna. Se ele acertar a posição do navio, ele ganha!


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Lembre-se: o primeiro colchete é a Linha e o segundo é a Coluna.
  2. Salve os arquivos com a extensão .por (Ex: Atividade_15_SeuNome.por).
  3. Envie no Microsoft Teams na tarefa “Capítulo 15 - Matrizes”.

🔑 Gabarito de Código

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
programa {
	funcao inicio() {
		cadeia agenda[3][2]
		para (inteiro i = 0; i < 3; i++) {
			escreva("Nome: ") leia(agenda[i][0])
			escreva("Fone: ") leia(agenda[i][1])
		}
		escreva("\n--- LISTA ---\n")
		para (inteiro i = 0; i < 3; i++) {
			escreva(agenda[i][0], " -> ", agenda[i][1], "\n")
		}
	}
}

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
programa {
	funcao inicio() {
		inteiro mapa[3][3] = {{0,0,0}, {0,1,0}, {0,0,0}}, l, c
		escreva("Chute Linha (0-2): ") leia(l)
		escreva("Chute Coluna (0-2): ") leia(c)
		
		se (mapa[l][c] == 1) { escreva("FOGO! Navio afundado.") }
		senao { escreva("ÁGUA! Tente novamente.") }
	}
}