//Librería que contiene las funciones scanf y printf
#include <stdio.h>
//librería que contiene malloc
#include <stdlib.h>
//Declaración de prototipos
int *leematriz(int tam);
int *traspuesta(int *a, int fil, int col);
void imprimematriz(int *m, int fil, int col);
//Función principal del programa
int main ()
{
// Declaro las variables de mi función
int *m1, *msol,nf,nc;
printf("Introduce el número de filas de la matriz:");
scanf("%d", &nf);
printf("Introduce el número de columnas de la matriz:");
scanf("%d", &nc);
printf("Introduce los elementos de la matriz: \n");
m1=leematriz(nf*nc);
msol=traspuesta(m1,nf,nc);
printf("La matriz resultado es: \n");
imprimematriz(msol, nc,nf);
free(m1);
free(msol);
//Fin del programa
return 0;
}
//Función leematriz
//Lee los elementos de una matriz de tamaño tam y la devuelve
int *leematriz(int tam)
{
int i,j,*m;
m=(int*)malloc(sizeof(int)*tam);
for (i=0;i<tam;i++)
{
scanf("%d", (m+i));
}
return m;
}
//Función traspuesta
//Calcula la traspuesta de una matriz
int *traspuesta(int *a, int fil, int col)
{
int *res, i,j;
//Reservo espacio para la matriz resultado
res=(int*)malloc(sizeof(int)*fil*col);
//En C las matrices de n filas tienen filas de la 0 a la n-1
for (i=0;i<col;i++)
{
//En C las matrices de n columnas tienen cols. de la 0 a la n-1
for (j=0;j<fil;j++)
{
*(res+i*fil+j)=*(a+j*col+i);
}
}
return(res);
}
//Función imprimematriz
//Dada una matriz, la imprime por pantalla
void imprimematriz(int *m, int fil, int col)
{
int i,j;
for (i=0;i<fil;i++)
{
//En C las matrices de n columnas tienen cols. de la 0 a la n-1
for (j=0;j<col;j++)
{
printf("%d\t", *(m+i*col+j));
}
printf("\n");
}
return;
}