Comprobar si una matriz es simétrica en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-435140{{"Comprobar si una matriz es simétrica en C"}} c/for_loop -.-> lab-435140{{"Comprobar si una matriz es simétrica en C"}} c/arrays -.-> lab-435140{{"Comprobar si una matriz es simétrica en C"}} c/user_input -.-> lab-435140{{"Comprobar si una matriz es simétrica en C"}} c/output -.-> lab-435140{{"Comprobar si una matriz es simétrica en C"}} end

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 100 establece un tamaño máximo de matriz para evitar desbordamientos de búfer
  • scanf() 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_symmetric rastrea la simetría de la matriz
  • Los bucles anidados comparan matrix[i][j] con matrix[j][i]
  • Si cualquier elemento es diferente, is_symmetric se establece en false
  • 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.