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_FILASyMAX_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
transpuestacon 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.



