Calcular la Transpuesta de una Matriz en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a calcular la transpuesta de una matriz en C. El laboratorio cubre los siguientes pasos:

Lectura de Dimensiones y Elementos: Aprenderás a leer las dimensiones (filas y columnas) de una matriz y a rellenarla con valores introducidos por el usuario. Este paso establece la base para el proceso de transposición de la matriz.

Intercambio de Filas y Columnas: El núcleo de la transposición de la matriz implica intercambiar las filas y columnas de la matriz original para crear la matriz transpuesta.

Impresión de la Matriz Transpuesta: Finalmente, aprenderás a mostrar la matriz transpuesta, lo que te permitirá verificar la corrección del proceso de transposición.

Al final de este laboratorio, tendrás una sólida comprensión de la transposición de matrices y la capacidad de implementarla en programación C.

Lectura de Dimensiones y Elementos

En este paso, aprenderás a leer las dimensiones y los elementos de una matriz en un programa C para la transposición de matrices. Crearemos un programa que permita a los usuarios introducir el número de filas y columnas, y luego rellenar la matriz con valores.

Primero, creemos un nuevo archivo C para nuestro programa de transposición de matrices:

cd ~/project
nano matrix_transpose.c

Ahora, añade el siguiente código para leer las dimensiones y los elementos de la matriz:

#include <stdio.h>

#define MAX_FILAS 100
#define MAX_COLUMNAS 100

int main() {
    int filas, columnas;
    int matriz[MAX_FILAS][MAX_COLUMNAS];

    // Leer las dimensiones de la matriz
    printf("Introduce el número de filas: ");
    scanf("%d", &filas);

    printf("Introduce el número de columnas: ");
    scanf("%d", &columnas);

    // Introducir los elementos de la matriz
    printf("Introduce los elementos de la matriz:\n");
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            printf("Introduce el elemento [%d][%d]: ", i, j);
            scanf("%d", &matriz[i][j]);
        }
    }

    // Imprimir la matriz original
    printf("\nMatriz Original:\n");
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            printf("%d ", matriz[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Salida de ejemplo:

Introduce el número de filas: 3
Introduce el número de columnas: 3
Introduce los elementos de la matriz:
Introduce el elemento [0][0]: 1
Introduce el elemento [0][1]: 2
Introduce el elemento [0][2]: 3
Introduce el elemento [1][0]: 4
Introduce el elemento [1][1]: 5
Introduce el elemento [1][2]: 6
Introduce el elemento [2][0]: 7
Introduce el elemento [2][1]: 8
Introduce el elemento [2][2]: 9

Matriz Original:
1 2 3
4 5 6
7 8 9

Desglose de las partes clave del código:

  • Definimos el tamaño máximo de la matriz usando MAX_FILAS y MAX_COLUMNAS
  • scanf() se utiliza para leer la entrada del usuario para las filas, columnas y elementos de la matriz
  • Se utilizan bucles anidados para introducir y mostrar los elementos de la matriz
  • El programa valida la entrada dentro del tamaño máximo permitido de la matriz

Intercambio de Filas y Columnas

En este paso, aprenderás a transponer una matriz intercambiando sus filas y columnas. Modificaremos el programa anterior para crear una matriz transpuesta.

Abre el archivo existente matrix_transpose.c:

cd ~/project
nano matrix_transpose.c

Reemplaza el código anterior con la siguiente implementación:

#include <stdio.h>

#define MAX_FILAS 100
#define MAX_COLUMNAS 100

int main() {
    int filas, columnas;
    int matriz[MAX_FILAS][MAX_COLUMNAS];
    int transpuesta[MAX_COLUMNAS][MAX_FILAS];

    // Leer las dimensiones de la matriz
    printf("Introduce el número de filas: ");
    scanf("%d", &filas);

    printf("Introduce el número de columnas: ");
    scanf("%d", &columnas);

    // Introducir los elementos de la matriz
    printf("Introduce los elementos de la matriz:\n");
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            printf("Introduce el elemento [%d][%d]: ", i, j);
            scanf("%d", &matriz[i][j]);
        }
    }

    // Transponer la matriz
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            transpuesta[j][i] = matriz[i][j];
        }
    }

    // Imprimir la matriz original
    printf("\nMatriz Original:\n");
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            printf("%d ", matriz[i][j]);
        }
        printf("\n");
    }

    // Imprimir la matriz transpuesta
    printf("\nMatriz Transpuesta:\n");
    for (int i = 0; i < columnas; i++) {
        for (int j = 0; j < filas; j++) {
            printf("%d ", transpuesta[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Compila y ejecuta el programa:

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Salida de ejemplo:

Introduce el número de filas: 3
Introduce el número de columnas: 3
Introduce los elementos de la matriz:
Introduce el elemento [0][0]: 1
Introduce el elemento [0][1]: 2
Introduce el elemento [0][2]: 3
Introduce el elemento [1][0]: 4
Introduce el elemento [1][1]: 5
Introduce el elemento [1][2]: 6
Introduce el elemento [2][0]: 7
Introduce el elemento [2][1]: 8
Introduce el elemento [2][2]: 9

Matriz Original:
1 2 3
4 5 6
7 8 9

Matriz Transpuesta:
1 4 7
2 5 8
3 6 9

Puntos clave sobre la transposición de matrices:

  • Creamos una nueva matriz transpuesta con dimensiones intercambiadas.
  • La transposición se realiza intercambiando filas y columnas.
  • transpuesta[j][i] = matriz[i][j] es la transformación clave.
  • Las dimensiones de la matriz original y la transpuesta se invierten.

Imprimir la Matriz Transpuesta

En este paso final, aprenderás a formatear e imprimir la matriz transpuesta con una mejor legibilidad y manejo de errores. Mejoraremos el programa anterior para que la salida sea más profesional.

Abre el archivo matrix_transpose.c:

cd ~/project
nano matrix_transpose.c

Reemplaza el código anterior con la siguiente implementación mejorada:

#include <stdio.h>

#define MAX_FILAS 100
#define MAX_COLUMNAS 100

void printMatrix(int matrix[MAX_ROWS][MAX_COLS], int filas, int columnas, const char* titulo) {
    printf("%s:\n", titulo);
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            printf("%4d ", matrix[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main() {
    int filas, columnas;
    int matriz[MAX_FILAS][MAX_COLUMNAS];
    int transpuesta[MAX_COLUMNAS][MAX_FILAS];

    // Validación de entrada
    do {
        printf("Introduce el número de filas (1-%d): ", MAX_FILAS);
        scanf("%d", &filas);
    } while (filas <= 0 || filas > MAX_FILAS);

    do {
        printf("Introduce el número de columnas (1-%d): ", MAX_COLUMNAS);
        scanf("%d", &columnas);
    } while (columnas <= 0 || columnas > MAX_COLUMNAS);

    // Introducir los elementos de la matriz
    printf("Introduce los elementos de la matriz:\n");
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            printf("Introduce el elemento [%d][%d]: ", i, j);
            scanf("%d", &matriz[i][j]);
        }
    }

    // Transponer la matriz
    for (int i = 0; i < filas; i++) {
        for (int j = 0; j < columnas; j++) {
            transpuesta[j][i] = matriz[i][j];
        }
    }

    // Imprimir matrices con formato
    printMatrix(matriz, filas, columnas, "Matriz Original");
    printMatrix(transpuesta, columnas, filas, "Matriz Transpuesta");

    return 0;
}

Compila y ejecuta el programa:

gcc matrix_transpose.c -o matrix_transpose
./matrix_transpose

Salida de ejemplo:

Introduce el número de filas (1-100): 3
Introduce el número de columnas (1-100): 3
Introduce los elementos de la matriz:
Introduce el elemento [0][0]: 1
Introduce el elemento [0][1]: 2
Introduce el elemento [0][2]: 3
Introduce el elemento [1][0]: 4
Introduce el elemento [1][1]: 5
Introduce el elemento [1][2]: 6
Introduce el elemento [2][0]: 7
Introduce el elemento [2][1]: 8
Introduce el elemento [2][2]: 9

Matriz Original:
   1    2    3
   4    5    6
   7    8    9

Matriz Transpuesta:
   1    4    7
   2    5    8
   3    6    9

Mejoras clave en esta versión:

  • Se añadió validación de entrada para las dimensiones de la matriz.
  • Se creó una función printMatrix() separada para una mejor organización del código.
  • Se mejoró la impresión de la matriz con formato alineado usando %4d.
  • Se añadieron títulos a la salida de la matriz para mayor claridad.
  • Maneja diferentes tamaños de matriz de forma más robusta.

Resumen

En este laboratorio, aprenderás a leer las dimensiones y elementos de una matriz, intercambiar filas y columnas, e imprimir la matriz transpuesta en un programa C. Primero, el programa solicita al usuario que ingrese el número de filas y columnas, y luego permite al usuario introducir los elementos de la matriz. A continuación, se muestra la matriz original. Luego, el programa intercambia las filas y columnas para calcular la transpuesta de la matriz, y finalmente, se imprime la matriz transpuesta.

Los puntos clave de aprendizaje en este laboratorio incluyen el uso de scanf() para leer la entrada del usuario, la implementación de bucles anidados para introducir y mostrar los elementos de la matriz, y la realización de la operación de transposición intercambiando filas y columnas. El programa también demuestra el uso de printf() para mostrar las matrices original y transpuesta.