📐 Guia Didático

Lista 7 · Matrizes Bidimensionais em Linguagem C

📝 0. Nomenclatura Padrão (Professor)

Para facilitar o entendimento, use sempre esta notação:

VariávelSignificadoExemplo
LLinha da matrizL = 0, 1, 2, ...
CColuna da matrizC = 0, 1, 2, ...
DDimensão (tamanho) da matriz quadradaD = 3 (matriz 3×3)
D = 4 (matriz 4×4)

💡 Exemplo de declaração:

int D = 4;                     // Dimensão da matriz
float matriz[D][D];         // Matriz quadrada D×D
int L, C;                       // Índices: Linha e Coluna

🧠 1. O que é uma Matriz Bidimensional?

🏢 Analogia: Prédio com Andares e Apartamentos

Se um vetor é um prédio com vários apartamentos enfileirados...

Uma matriz é como um prédio com VÁRIOS ANDARES, onde cada andar tem vários apartamentos.

  • L (Linha) = Andar do prédio
  • C (Coluna) = Apartamento naquele andar
  • matriz[L][C] = Valor guardado no andar L, apartamento C

Declaração de uma matriz:

int D = 3;
int matriz[D][D];   // D linhas × D colunas = D² elementos

float M[4][4];        // D=4: 4 linhas × 4 colunas = 16 elementos
int dados[6][6];      // D=6: 6 linhas × 6 colunas = 36 elementos

📝 Regra de ouro: O primeiro colchete é sempre a LINHA (L), o segundo é a COLUNA (C).

matriz[L][C]

Visualização de uma matriz 4x4 (D=4):

L = Linha
C = Coluna
D = 4 (tamanho)
C=0
C=1
C=2
C=3
L=0
1
2
3
4
L=1
5
6
7
8
L=2
9
10
11
12
L=3
13
14
15
16

📐 2. Entendendo as Diagonais (O CONCEITO MAIS IMPORTANTE!)

⚠️ Este é o coração da Lista 7! Se você entender as diagonais, resolve todos os exercícios.

📝 Notação: L = Linha, C = Coluna, D = Dimensão da matriz

Diagonal Principal (↘)

A diagonal principal vai do canto superior esquerdo ao inferior direito.

Condição: L == C (Linha igual a Coluna)

[0,0]
[0,1]
[0,2]
[0,3]
[1,0]
[1,1]
[1,2]
[1,3]
[2,0]
[2,1]
[2,2]
[2,3]
[3,0]
[3,1]
[3,2]
[3,3]

Posições: (0,0), (1,1), (2,2), (3,3) → L == C

Diagonal Secundária (↙)

A diagonal secundária vai do canto superior direito ao inferior esquerdo.

Condição: L + C == D - 1

[0,0]
[0,1]
[0,2]
[0,3]
[1,0]
[1,1]
[1,2]
[1,3]
[2,0]
[2,1]
[2,2]
[2,3]
[3,0]
[3,1]
[3,2]
[3,3]

Posições: (0,3), (1,2), (2,1), (3,0) → L + C == D - 1L + C == 3

📋 Tabela Resumo das Condições (usando L, C e D):

RegiãoCondição GeralExemplo D=4
Diagonal PrincipalL == C(0,0)(1,1)(2,2)(3,3)
Diagonal SecundáriaL + C == D - 1L+C=3: (0,3)(1,2)(2,1)(3,0)
Acima da PrincipalC > LTriângulo superior direito
Abaixo da PrincipalC < LTriângulo inferior esquerdo
Acima da SecundáriaL + C < D - 1L+C < 3
Abaixo da SecundáriaL + C > D - 1L+C > 3

🔄 3. Como Percorrer uma Matriz com Laços

int D = 4;
int matriz[D][D];
for(L = 0; L < D; L++) {
    for(C = 0; C < D; C++) {
        scanf("%d", &matriz[L][C]);
    }
}

🔢 4. Somatório da Diagonal Principal (Exercício 3)

int D = 5;
int matriz[D][D];
int soma = 0;
// ... leitura da matriz ...
for(L = 0; L < D; L++) {
    soma += matriz[L][L];
}
printf("Soma diagonal principal: %d\n", soma);

📊 5. Acima/Abaixo da Diagonal (Exercícios 4 e 7)

// Acima da diagonal principal (C > L)
for(L=0; L<D; L++)
    for(C=0; C<D; C++)
        if(C > L) soma_acima += matriz[L][C];

// Abaixo da diagonal secundária (L + C > D-1)
for(L=0; L<D; L++)
    for(C=0; C<D; C++)
        if(L + C > D - 1) soma_abaixo += matriz[L][C];

⭐ 6. Números Perfeitos (Exercício 5)

for(L=0; L<D; L++) {
    for(C=0; C<D; C++) {
        int num = matriz[L][C];
        int soma_div = 0;
        for(int k = 1; k <= num/2; k++)
            if(num % k == 0) soma_div += k;
        if(soma_div == num)
            printf("%d é perfeito\n", num);
    }
}

🔍 7. Produto das Diagonais (Exercício 8)

float prod_princ = 1, prod_sec = 1;
for(L=0; L<D; L++) {
    prod_princ *= matriz[L][L];
    prod_sec *= matriz[L][D-1-L];
}

📋 8. Resumo: Checklist para Matrizes

  1. ✅ Defina D (dimensão da matriz quadrada)
  2. ✅ Declare a matriz: tipo nome[D][D]
  3. ✅ Use L e C para índices
  4. ✅ Leia com laço duplo: for(L) for(C) scanf
  5. ✅ Identifique região:
    • Principal: L == C
    • Secundária: L + C == D-1
    • Acima Principal: C > L
    • Abaixo Secundária: L + C > D-1
  6. ✅ Calcule (soma, média, produto)
  7. ✅ Exiba o resultado

🎯 9. Gabarito Rápido: Qual Condição Usar?

ExercícioDCondição(ões)
1 - Diagonal Secundária6L + C == 5
2 - Cópia Inversa3M2[2-L][2-C] = M1[L][C]
3 - Soma Diagonal Principal5L == C
4 - Acima/Abaixo Principal4C > L e C < L
5 - Números Perfeitos3Divisores: num % k == 0
6 - Maior Somatório Diagonais4L == C e L + C == 3
7 - Acima/Abaixo Secundária5L + C < 4 e L + C > 4
8 - Produto Diagonais4L == C e L + C == 3

📐 Lembre-se: L = Linha, C = Coluna, D = Dimensão
Domine as diagonais e você dominará as matrizes! 🚀