Ejercicios de C/C++ para principiantes

Trasponer una matriz en C y C++

En esta lección vas a mostrar la traspuesta de una matriz intercambiando el papel de las filas y las columnas.

Introducción

Trasponer una matriz es convertir las filas en columnas y las columnas en filas: el valor de la fila i y la columna j pasa a la fila j y la columna i. Una matriz de 2 filas y 3 columnas, una vez traspuesta, pasa a tener 3 filas y 2 columnas.

Puntos importantes

  • Activa los avisos del compilador (compiler warnings) y corrígelos todos.
  • Entiende bien el tipo y la vida útil (lifetime) de cada valor.
  • Comprueba siempre los datos de entrada y los límites de los índices de los arreglos.

Mira cómo funciona

Pulsa transpose para intercambiar filas y columnas. Señala una celda para ver su nueva posición y su desplazamiento en memoria.

Ejemplos de código C y C++

C
Ejecutar →
main.c
#include <stdio.h>
int main(void) {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    // Visit columns first to print the transposed shape.
    for (int column = 0; column < 3; ++column) { for (int row = 0; row < 2; ++row) printf("%s%d", row ? " " : "", matrix[row][column]); puts(""); }
}
Resultado de la ejecución
1 4
2 5
3 6
C++
Ejecutar →
main.cpp
#include <array>
#include <iostream>
int main() {
    std::array<std::array<int, 3>, 2> matrix{{{{1, 2, 3}}, {{4, 5, 6}}}};
    // Visit columns first to print the transposed shape.
    for (size_t column = 0; column < 3; ++column) { for (size_t row = 0; row < 2; ++row) std::cout << (row ? " " : "") << matrix[row][column]; std::cout << '\n'; }
}
Resultado de la ejecución
1 4
2 5
3 6

Comparación entre C y C++

En lugar de crear una matriz nueva, el programa invierte el orden de los dos bucles: el bucle exterior recorre las columnas y el interior las filas. Así, cada columna de la matriz original se muestra como una fila, lo que da 1 4, 2 5 y 3 6.

C

C usa funciones procedurales pequeñas y muestra abiertamente cómo se representan los datos en memoria.

C++

C++ sigue permitiendo trabajar a bajo nivel, pero añade tipos de biblioteca y abstracciones más seguras.

Ejercicios de práctica

Ejecuta las dos versiones y después modifica el código para ver la diferencia de seguridad que aporta cada lenguaje.

  • Prueba entradas no válidas y valores límite.
  • Compila con las opciones -Wall -Wextra -Wpedantic para activar más avisos.
  • Pon las declaraciones comunes en un archivo de cabecera y la implementación en un archivo aparte.

Practica con un reto

Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.

Todos los retos