#include <stdio.h>
#include <stdlib.h>
typedef struct {
int **elements;
} Mat;
unsigned int IngresarMatriz(Mat *matriz);
void ImprimirMatriz(Mat *matriz, unsigned int orden);
int main() {
unsigned int orden = 0;
Mat matriz;
orden = IngresarMatriz(&matriz);
if(orden == 0)
return 1;
printf("%p", matriz);
ImprimirMatriz(&matriz, orden);
for(int i = 0; i < orden; i++)
free((void *)matriz[i]);
free((void *)matriz);
return 0;
}
unsigned int IngresarMatriz(Mat *matriz) {
unsigned int orden;
int *tempPointer;
int tempValue;
printf("Introduzca el orden de la matriz cuadrada: ");
if(scanf("%u", &orden) == EOF) {
printf("\nLa proxima vez introduzca un numero valido.");
return 0;
}
matriz->elements = (int **)malloc(orden * sizeof(int));
if(matriz->elements == (int **)0) {
printf("Error asignando memoria a la matriz (primer paso)");
return 0;
}
for(int i = 0; i < orden; i++) {
matriz->elements[i] = (int *)malloc(orden * sizeof(int));
if(matriz->elements[i] == (int *)0) {
printf("Error asignando memoria a la matriz (segundo paso)");
return 0;
}
}
for(unsigned int fila = 0; fila < orden; fila++) {
for(unsigned int columna = 0; columna < orden;) {
printf("\nIntroduzca el elemento fila %u columna %u: ", fila, columna);
if(scanf("%i", &tempValue) == EOF) {
printf("\nLa proxima vez introduzca un numero valido.");
} else {
tempPointer = matriz->elements[fila];
tempPointer[columna] = tempValue;
columna++;
}
}
}
return orden;
}
void ImprimirMatriz(Mat *matriz, unsigned int orden) {
for(unsigned int fila = 0; fila < orden; fila++) {
for(unsigned int columna = 0; columna < orden; columna++) {
printf("\nEl elemento cuya fila es %u y cuya columna es %u tiene el valor de %i", fila, columna, matriz->elements[fila][columna]);
}
}
}