hola. Oye, te hecho el codigo que sigue, no lo he repasado mucho, asi que seria bueno que lo revisaras un poquito, aunque creo que esta bien, pero no estaria de mas.
Te hecho todas las funciones excepto la del determinante. Lo he hecho siguiendo la formula de A^(-1) = ((adj(A))^t) / det(A). Es lo siguiente:
#define n 3 /* vamos a hacer matriz 3x3 cambiando n a otro valor tendremos nxn*/
int* traspuesta(int matriz[][]);
int det(int matriz[][]);
int* adj(int matriz[][]);
int* inversa(int matriz[][]);
void main()
{
int matriz[n][n];
int inv[n][n];
/*
...
aqui vendria el codigo pa rellenar la matriz
...
*/
inv = inversa(matriz);
/*
...
ale, ya tienes la inversa en inv[][]
a usarla agusto
...
*/
}
int* inversa(int matriz[][])
{
int mat1[n][n];
int mat2[n][n];
int i,j,k;
mat1 = adj(matriz);
mat2 = traspuesta(mat1);
k = det(matriz);
for (i=0 ; i<n ; i++)
for (j=0 ; j<n ; j++)
mat2[j] = mat2[j] / k;
return mat2;
}
int* traspuesta(int matriz[][])
{
/* calcula la traspuesta de matriz[][] */
int i,j;
int mat[n][n];
for (i = 0 ; i<n ; i++)
for (j=0 ; j<n ; j++)
mat[j] = matriz[j];
return mat;
}
int* adj(int matriz[][])
{
/* calcula la matriz de los adjuntos de matriz[][] */
int mat[n][n];
int temp[n-1][n-1];
int i,j,a,b,k,m;
k = m = 0;
for (i=0 ; i<n ; i++)
{
for (j=0 ; j<n ; j++)
{
for (a=0 ; a<n ; a++)
{
for (b=0 ; b<n ; b++)
{
if (a>=i) k = 1;
else k = 0;
if (b>=j) m = 1;
else m = 0;
if ((a != i) || (b !=i))
temp[a-k][b-m] = matriz[j];
}
}
}
}
}
return mat;
}
int det(matriz[][])
{
/* calcula el determinante de la matriz. Esta funcion te la dejo pa ti;) */
return 0;
}
Espero que te sirva de algo. Saludos.