Hola.
Como ya sabrás, para recorrer los elementos de una matriz solemos usar dos bucles anidados.
Cada bucle tiene un indice, y usando ambos indices apuntamos a cada elemento de la matriz.
Si la matriz tiene 5 filas y 9 columnas (5x9), el primer indice va de 0 a 5 y el segundo de 0 a 9.
Bien, una matriz transpuesta, su diferencia respecto al original es únicamente que intercambian filas y columnas.
Lo que en la matriz original es una fila, en la transpuesta es una columna, y las columnas son filas.
Entonces, si 5x9 transponemos a 9x5, significa que su primer indice ha de ir de 0 a 9 y el segundo de 0 a 5.
Como ves, los indices hacen los mismos recorridos, solo que intercambiados.
De esto deducimos que podemos transponer una matriz usando los mismos indices, pero intercambiando el orden según si nos referimos a la matriz original o a la transpuesta.
Es decir, el indice que usamos para las filas de una matriz, lo usaremos también para las columnas de la otra. Y el de las columnas de una servirá para las filas de la otra.
Aquí un código de ejemplo. Marco en negrita la parte donde se hace la transposición.
En pantalla nos da este resultado: