Verificar se uma Matriz é Simétrica em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a verificar se uma matriz é simétrica na programação em C. O laboratório cobre os seguintes passos: leitura das dimensões e elementos da matriz, verificação se a matriz é simétrica comparando os elementos em posições simétricas e impressão de se a matriz é simétrica ou não. O laboratório fornece um guia passo a passo com exemplos de código para ajudá-lo a compreender o processo de verificação da simetria da matriz em C.

O laboratório começa mostrando como ler as dimensões e elementos da matriz usando programação em C. Em seguida, apresenta a lógica para verificar se a matriz é simétrica comparando os elementos em posições simétricas. Finalmente, o laboratório demonstra como imprimir o resultado, indicando se a matriz é simétrica ou não.

Ler Dimensões e Elementos

Neste passo, você aprenderá como ler as dimensões e elementos de uma matriz em programação C para verificar a simetria da matriz. Criaremos um programa que permite ao usuário inserir o tamanho e os elementos de uma matriz.

Primeiro, vamos criar um novo arquivo C para nosso programa de verificação de simetria de matriz:

cd ~/project
nano symmetric_matrix.c

Agora, adicione o seguinte código para ler as dimensões e elementos da matriz:

#include <stdio.h>

#define MAX_SIZE 100

int main() {
    int n, matrix[MAX_SIZE][MAX_SIZE];

    // Ler as dimensões da matriz
    printf("Digite o tamanho da matriz quadrada: ");
    scanf("%d", &n);

    // Ler os elementos da matriz
    printf("Digite os elementos da matriz:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Digite o elemento [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Imprimir a matriz inserida
    printf("\nMatriz inserida:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Compile e execute o programa:

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Exemplo de saída:

Digite o tamanho da matriz quadrada: 3
Digite os elementos da matriz:
Digite o elemento [0][0]: 1
Digite o elemento [0][1]: 2
Digite o elemento [0][2]: 3
Digite o elemento [1][0]: 2
Digite o elemento [1][1]: 4
Digite o elemento [1][2]: 5
Digite o elemento [2][0]: 3
Digite o elemento [2][1]: 5
Digite o elemento [2][2]: 6

Matriz inserida:
1 2 3
2 4 5
3 5 6

Vamos analisar as partes principais do código:

  • #define MAX_SIZE 100 define um tamanho máximo para a matriz para evitar estouros de buffer
  • scanf() é usado para ler as dimensões da matriz e os elementos individuais
  • Loops aninhados são usados para inserir e exibir os elementos da matriz
  • O programa garante que o usuário possa inserir uma matriz quadrada de qualquer tamanho, até 100x100

Check if A[i][j] = A[j][i]

In this step, you will modify the previous program to check if the matrix is symmetric by comparing elements across rows and columns.

Open the existing file and update the code:

cd ~/project
nano symmetric_matrix.c

Replace the previous code with the following implementation:

#include <stdio.h>
#include <stdbool.h>

#define MAX_SIZE 100

int main() {
    int n, matrix[MAX_SIZE][MAX_SIZE];
    bool is_symmetric = true;

    // Read matrix dimensions
    printf("Enter the size of the square matrix: ");
    scanf("%d", &n);

    // Read matrix elements
    printf("Enter matrix elements:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Check symmetry
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] != matrix[j][i]) {
                is_symmetric = false;
                break;
            }
        }
        if (!is_symmetric) break;
    }

    // Print symmetry result
    if (is_symmetric) {
        printf("\nThe matrix is symmetric.\n");
    } else {
        printf("\nThe matrix is not symmetric.\n");
    }

    return 0;
}

Compile and run the program:

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Example output for a symmetric matrix:

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6

The matrix is symmetric.

Example output for a non-symmetric matrix:

Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9

The matrix is not symmetric.

Key points in the code:

  • is_symmetric boolean variable tracks matrix symmetry
  • Nested loops compare matrix[i][j] with matrix[j][i]
  • If any elements differ, is_symmetric is set to false
  • The program breaks out of loops early if asymmetry is found

Verificar se a Matriz é Simétrica

Neste passo final, você aprimorará o programa para fornecer uma saída mais detalhada sobre a simetria da matriz e criará uma função para melhorar a modularidade do código.

Abra o arquivo existente e atualize o código:

cd ~/project
nano symmetric_matrix.c

Substitua o código anterior pela seguinte implementação:

#include <stdio.h>
#include <stdbool.h>

#define MAX_SIZE 100

// Função para verificar a simetria da matriz
bool is_symmetric_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] != matrix[j][i]) {
                return false;
            }
        }
    }
    return true;
}

// Função para imprimir a matriz
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    printf("\nMatriz:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int n, matrix[MAX_SIZE][MAX_SIZE];

    // Ler as dimensões da matriz
    printf("Digite o tamanho da matriz quadrada: ");
    scanf("%d", &n);

    // Ler os elementos da matriz
    printf("Digite os elementos da matriz:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Digite o elemento [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }

    // Imprimir a matriz inserida
    print_matrix(matrix, n);

    // Verificar e imprimir o status de simetria
    if (is_symmetric_matrix(matrix, n)) {
        printf("\nAnálise de Simetria:\n");
        printf("✓ A matriz é simétrica.\n");
        printf("  - Todos os elementos A[i][j] são iguais a A[j][i]\n");
        printf("  - A matriz é invariante sob transposição\n");
    } else {
        printf("\nAnálise de Simetria:\n");
        printf("✗ A matriz não é simétrica.\n");
        printf("  - Alguns elementos A[i][j] não são iguais a A[j][i]\n");
    }

    return 0;
}

Compile e execute o programa:

gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix

Exemplo de saída para uma matriz simétrica:

Digite o tamanho da matriz quadrada: 3
Digite os elementos da matriz:
Digite o elemento [0][0]: 1
Digite o elemento [0][1]: 2
Digite o elemento [0][2]: 3
Digite o elemento [1][0]: 2
Digite o elemento [1][1]: 4
Digite o elemento [1][2]: 5
Digite o elemento [2][0]: 3
Digite o elemento [2][1]: 5
Digite o elemento [2][2]: 6

Matriz:
   1    2    3
   2    4    5
   3    5    6

Análise de Simetria:
✓ A matriz é simétrica.
  - Todos os elementos A[i][j] são iguais a A[j][i]
  - A matriz é invariante sob transposição

Exemplo de saída para uma matriz não simétrica:

Digite o tamanho da matriz quadrada: 3
Digite os elementos da matriz:
Digite o elemento [0][0]: 1
Digite o elemento [0][1]: 2
Digite o elemento [0][2]: 3
Digite o elemento [1][0]: 4
Digite o elemento [1][1]: 5
Digite o elemento [1][2]: 6
Digite o elemento [2][0]: 7
Digite o elemento [2][1]: 8
Digite o elemento [2][2]: 9

Matriz:
   1    2    3
   4    5    6
   7    8    9

Análise de Simetria:
✗ A matriz não é simétrica.
  - Alguns elementos A[i][j] não são iguais a A[j][i]

Melhorias-chave:

  • Adicionada a função is_symmetric_matrix() para melhor organização do código.
  • Criada a função print_matrix() para exibir o conteúdo da matriz.
  • Saída aprimorada com análise detalhada de simetria.
  • Usados indicadores visuais (✓/✗) para destacar o status de simetria.

Resumo

Neste laboratório, você aprenderá como ler as dimensões e os elementos de uma matriz em programação C e, em seguida, verificar se a matriz é simétrica. Primeiro, você criará um programa que permite ao usuário inserir o tamanho e os elementos de uma matriz. Em seguida, modificará o programa para verificar se a matriz é simétrica, verificando se cada elemento A[i][j] é igual ao seu elemento correspondente A[j][i]. Finalmente, imprimirá se a matriz é simétrica ou não.

Os principais pontos de aprendizado das etapas concluídas incluem a leitura das dimensões e elementos da matriz usando scanf(), a exibição da matriz inserida e a comparação dos elementos da matriz para determinar a simetria. O programa garante que o usuário possa inserir uma matriz quadrada de qualquer tamanho, até 100x100.