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 100define um tamanho máximo para a matriz para evitar estouros de bufferscanf()é 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_symmetricboolean variable tracks matrix symmetry- Nested loops compare
matrix[i][j]withmatrix[j][i] - If any elements differ,
is_symmetricis set tofalse - 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.



