#include <iostream>
using namespace std;
// Función para calcular el determinante de una matriz 3x3
float determinant(float matrix[3][3]) { return matrix[0][0] * (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1]) -
matrix[0][1] * (matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0]) +
matrix[0][2] * (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0]);
}
//Función para calcular la matriz adjunta
void adjoint(float matrix[3][3], float adj[3][3]) { adj[0][0] = matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1];
adj[0][1] = -(matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0]);
adj[0][2] = matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0];
adj[1][0] = -(matrix[0][1] * matrix[2][2] - matrix[0][2] * matrix[2][1]);
adj[1][1] = matrix[0][0] * matrix[2][2] - matrix[0][2] * matrix[2][0];
adj[1][2] = -(matrix[0][0] * matrix[2][1] - matrix[0][1] * matrix[2][0]);
adj[2][0] = matrix[0][1] * matrix[1][2] - matrix[0][2] * matrix[1][1];
adj[2][1] = -(matrix[0][0] * matrix[1][2] - matrix[0][2] * matrix[1][0]);
adj[2][2] = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
// Función para calcular la matriz inversa
bool inverse(float matrix[3][3], float inverse[3][3]) { float det = determinant(matrix);
if (det == 0) { cout << "La matriz no tiene inversa (determinante es cero)." << endl;
return false;
}
float adj[3][3];
adjoint(matrix, adj);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
inverse[i][j] = adj[i][j] / det;
return true;
}
// Función principal
int main() { float matrix[3][3] = { {4, 7, 2}, {3, 6, 1}, {2, 5, 3} };
float inv[3][3];
if (inverse(matrix, inv)) { cout << "La matriz inversa es:" << endl;
for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++)
cout << inv[i][j] << " ";
cout << endl;
}
}
return 0;
}