Ejercicio 05 — Lee una matriz 3x4 e imprime su transpuesta
Dificultad: amarillo · Módulo 06 (Matrices (arrays 2D))
Enunciado
Lee una matriz 3x4 e imprime su transpuesta (4x3).
Diagrama de flujo

Cómo se resuelve
Transponer una matriz es “girarla” sobre su diagonal: lo que era una fila pasa a ser una columna y viceversa. Si la original m es de 3×4, la transpuesta t es de 4×3. Toda la operación cabe en una línea dentro del doble bucle:
t[j][i] = m[i][j]; // los índices van intercambiadosEl elemento que estaba en la fila i, columna j de la original acaba en la fila j, columna i de la transpuesta. Es el mismo valor colocado en la posición espejo.
La trampa principal es olvidar que la matriz destino tiene las dimensiones invertidas. Por eso se declara int t[COLS][FILAS] y no int t[FILAS][COLS]: si le das el tamaño de la original, cuando m no es cuadrada te sales de los límites del array y corrompes memoria. Fíjate también en que al imprimir t recorres primero sus COLS filas y luego sus FILAS columnas: las dimensiones de t son las de m al revés, y hay que respetarlo en cada bucle que la toque. Un truco para no perderte: en un array 2D en C, el primer índice siempre cuenta filas y el segundo columnas, sea cual sea el nombre de la matriz.
Para practicar — cópialo en Dev-C++
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 06: Matrices (arrays 2D)
* Ejercicio 05 — PRACTICA (rellena los TODO)
* Enunciado: Lee una matriz 3x4 e imprime su transpuesta (4x3).
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej05_practica.c -o ej05 && ./ej05
*/
#include <stdio.h>
#define FILAS 3
#define COLS 4
int main(void) {
int m[FILAS][COLS];
// TODO 1: declara la matriz transpuesta t con dimensiones COLS x FILAS
// (las dimensiones estan invertidas respecto a m)
// TODO 2: leer la matriz m (FILAS x COLS) con doble bucle y scanf
// TODO 3: calcular la transpuesta con un doble bucle:
// t[j][i] = m[i][j]
// Pista: el bucle recorre i de 0 a FILAS y j de 0 a COLS,
// pero asigna con los indices al reves en t
// TODO 4: imprimir t, que tiene COLS filas y FILAS columnas
// (bucle exterior de 0 a COLS, interior de 0 a FILAS)
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 06: Matrices (arrays 2D)
* Ejercicio 05 — MODELO (resuelto)
* Enunciado: Lee una matriz 3x4 e imprime su transpuesta (4x3).
* Dificultad: amarillo
* Compilar: gcc -std=c11 -Wall ej05_modelo.c -o ej05 && ./ej05
*/
#include <stdio.h>
#define FILAS 3
#define COLS 4
int main(void) {
int m[FILAS][COLS];
int t[COLS][FILAS]; // transpuesta: dimensiones invertidas
// Leer la matriz original
printf("Introduce la matriz %dx%d:\n", FILAS, COLS);
for (int i = 0; i < FILAS; i++)
for (int j = 0; j < COLS; j++)
scanf("%d", &m[i][j]);
// Calcular la transpuesta: t[j][i] = m[i][j]
for (int i = 0; i < FILAS; i++)
for (int j = 0; j < COLS; j++)
t[j][i] = m[i][j];
// Imprimir la transpuesta (es COLS x FILAS)
printf("\nTranspuesta (%dx%d):\n", COLS, FILAS);
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < FILAS; j++)
printf("%4d", t[i][j]);
printf("\n");
}
return 0;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.