Introducción
En este laboratorio (lab), aprenderás cómo comprobar si una matriz es simétrica en programación C. El laboratorio cubre los siguientes pasos: leer las dimensiones y los elementos de la matriz, comprobar si la matriz es simétrica comparando los elementos en posiciones simétricas y mostrar si la matriz es simétrica o no. El laboratorio proporciona una guía paso a paso con ejemplos de código para ayudarte a entender el proceso de comprobación de la simetría de una matriz en C.
El laboratorio comienza mostrando cómo leer las dimensiones y los elementos de la matriz utilizando programación C. Luego, introduce la lógica para comprobar si la matriz es simétrica comparando los elementos en posiciones simétricas. Finalmente, el laboratorio demuestra cómo mostrar el resultado, indicando si la matriz es simétrica o no.
Leer dimensiones y elementos
En este paso, aprenderás cómo leer las dimensiones y los elementos de una matriz en programación C para comprobar la simetría de la matriz. Crearemos un programa que permita a los usuarios ingresar el tamaño y los elementos de una matriz.
Primero, creemos un nuevo archivo C para nuestro programa de simetría de matrices:
cd ~/project
nano symmetric_matrix.c
Ahora, agreguemos el siguiente código para leer las dimensiones y los elementos de la matriz:
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
// 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]);
}
}
// Print the entered matrix
printf("\nEntered Matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
Compila y ejecuta el programa:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
Ejemplo de salida:
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
Entered Matrix:
1 2 3
2 4 5
3 5 6
Analicemos las partes clave del código:
#define MAX_SIZE 100establece un tamaño máximo de matriz para evitar desbordamientos de búferscanf()se utiliza para leer las dimensiones de la matriz y los elementos individuales- Se utilizan bucles anidados para ingresar y mostrar los elementos de la matriz
- El programa asegura que el usuario pueda ingresar una matriz cuadrada de cualquier tamaño hasta 100x100
Comprobar si A[i][j] = A[j][i]
En este paso, modificarás el programa anterior para comprobar si la matriz es simétrica comparando elementos entre filas y columnas.
Abre el archivo existente y actualiza el código:
cd ~/project
nano symmetric_matrix.c
Reemplaza el código anterior con la siguiente implementación:
#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;
}
Compila y ejecuta el programa:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
Ejemplo de salida para una matriz simétrica:
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.
Ejemplo de salida para una matriz no simétrica:
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.
Puntos clave en el código:
- La variable booleana
is_symmetricrastrea la simetría de la matriz - Los bucles anidados comparan
matrix[i][j]conmatrix[j][i] - Si cualquier elemento es diferente,
is_symmetricse establece enfalse - El programa sale de los bucles temprano si se encuentra asimetría
Mostrar si es simétrica o no
En este último paso, mejorará el programa para proporcionar una salida más detallada sobre la simetría de la matriz y creará una función para mejorar la modularidad del código.
Abra el archivo existente y actualice el código:
cd ~/project
nano symmetric_matrix.c
Reemplace el código anterior con la siguiente implementación:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// Function to check matrix symmetry
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;
}
// Function to print matrix
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
printf("\nMatrix:\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];
// 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]);
}
}
// Print the entered matrix
print_matrix(matrix, n);
// Check and print symmetry status
if (is_symmetric_matrix(matrix, n)) {
printf("\nSymmetry Analysis:\n");
printf("✓ The matrix is symmetric.\n");
printf(" - All elements A[i][j] are equal to A[j][i]\n");
printf(" - Matrix is invariant under transpose\n");
} else {
printf("\nSymmetry Analysis:\n");
printf("✗ The matrix is not symmetric.\n");
printf(" - Some elements A[i][j] are not equal to A[j][i]\n");
}
return 0;
}
Compile y ejecute el programa:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
Ejemplo de salida para una matriz simétrica:
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
Matrix:
1 2 3
2 4 5
3 5 6
Symmetry Analysis:
✓ The matrix is symmetric.
- All elements A[i][j] are equal to A[j][i]
- Matrix is invariant under transpose
Ejemplo de salida para una matriz no simétrica:
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
Matrix:
1 2 3
4 5 6
7 8 9
Symmetry Analysis:
✗ The matrix is not symmetric.
- Some elements A[i][j] are not equal to A[j][i]
Mejoras clave:
- Se agregó la función
is_symmetric_matrix()para una mejor organización del código - Se creó la función
print_matrix()para mostrar el contenido de la matriz - Se mejoró la salida con un análisis detallado de la simetría
- Se utilizaron indicadores visuales (✓/✗) para resaltar el estado de la simetría
Resumen
En este laboratorio (lab), aprenderás cómo leer las dimensiones y los elementos de una matriz en programación C y luego comprobar si la matriz es simétrica. Primero, crearás un programa que permita a los usuarios ingresar el tamaño y los elementos de una matriz. Luego, modificarás el programa para comprobar si la matriz es simétrica verificando que cada elemento A[i][j] sea igual a su elemento correspondiente A[j][i]. Finalmente, mostrarás si la matriz es simétrica o no.
Los puntos clave de aprendizaje de los pasos completados incluyen leer las dimensiones y los elementos de la matriz utilizando scanf(), mostrar la matriz ingresada y comparar los elementos de la matriz para determinar la simetría. El programa asegura que el usuario pueda ingresar una matriz cuadrada de cualquier tamaño hasta 100x100.



