/*
4.- Crear un programa que pida al usuario los datos de una matriz de 3×3, y calcule y muestre su matriz inversa.
*/
#include<iostream>
using namespace std;
int main(){
//-------------------------------------VARIABLES--------------------------------------------
float matriz[3][3], mInversa[3][3], muestra= 0, determinante = 0;
//-----------------------------------OPERACIONES-------------------------------------------
cout<<"\t Ingreso de matriz 3x3\n\n";
for(int i=0; i<=2; i++) {
for(int j=0; j<=2; j++){
cout<<"\t Ingresar valor ["<<i<<"] "<<"["<<j<<"]: ";
cin>>matriz[i][j];
}
cout<<endl;
}
//Se saca la determinante
muestra = matriz[0][0] * matriz[1][1] * matriz[2][2];//Primer resultado
cout<<"\t ("<<muestra<<") + ";
determinante += muestra;
muestra = matriz[0][1] * matriz[1][2] * matriz[2][0];//Segundo resultado
cout<<"("<<muestra<<") + ";
determinante += muestra;
muestra = matriz[0][2] * matriz[1][0] * matriz[2][1];//Tercer resultado
cout<<"("<<muestra<<") - ";
determinante += muestra;
//RESTA
muestra = matriz[0][2] * matriz[1][1] * matriz[2][0];//Cuarto resultado
cout<<"("<<muestra<<") - ";
determinante -= muestra;
muestra = matriz[0][1] * matriz[1][0] * matriz[2][2];//Quinto resultado
cout<<"("<<muestra<<") - ";
determinante -= muestra;
muestra = matriz[0][0] * matriz[1][2] * matriz[2][1];//Sexto resultado
cout<<"("<<muestra<<")";
determinante -= muestra;
cout<<endl<<"\t La Determinante de esta Matriz es: "<<determinante<<endl;
/* + - +
( [0][0] [0][1] [0][2] )
- + -
( [1][0] [1][1] [1][2] )
+ - +
( [2][0] [2][1] [2][2] ) */
//Se consigue la Matriz Adjunta
//Primera Fila
mInversa[0][0] = +1 * (matriz[1][1] * matriz[2][2]) - (matriz[2][1] * matriz[1][2]);//Resultado con signo +
mInversa[0][1] = -1 * (matriz[1][0] * matriz[2][2]) - (matriz[2][0] * matriz[1][2]);//Resultado con signo -
mInversa[0][2] = +1 * (matriz[1][0] * matriz[2][1]) - (matriz[2][0] * matriz[1][1]);//Resultado con signo +
//Segunda Fila
mInversa[1][0] = -1 * (matriz[0][1] * matriz[2][2]) - (matriz[2][1] * matriz[0][2]);//Resultado con signo -
mInversa[1][1] = +1 * (matriz[0][0] * matriz[2][2]) - (matriz[2][0] * matriz[0][2]);//Resultado con signo +
mInversa[1][2] = -1 * (matriz[0][0] * matriz[2][1]) - (matriz[2][0] * matriz[0][1]);//Resultado con signo -
//Tercera Fila
mInversa[2][0] = +1 * (matriz[0][1] * matriz[1][2]) - (matriz[1][1] * matriz[0][2]);//Resultado con signo +
mInversa[2][1] = -1 * (matriz[0][0] * matriz[1][2]) - (matriz[1][0] * matriz[0][2]);//Resultado con signo -
mInversa[2][2] = +1 * (matriz[0][0] * matriz[1][1]) - (matriz[1][0] * matriz[0][1]);//Resultado con signo +
//------------------------------------RESULTADO--------------------------------------------
cout<<"\n\n\t Matriz Adjunta: \n\n";
for(int i=0; i<=2; i++){
for(int j=0; j<=2; j++){
cout<<"\t "<<mInversa[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\n\n\t Matriz Transpuesta: \n\n"<<endl;
for(int i=0; i<=2; i++) {
for(int j=0; j<=2; j++){
cout<<"\t "<<mInversa[j][i]<<" ";
}
cout<<"\n";
}
cout<<"\n\n\t Matriz Inversa: \n\n"<<endl;
for(int i=0; i<=2; i++) {
for(int j=0; j<=2; j++){
mInversa[j][i] /=determinante;
cout<<"\t "<<mInversa[j][i]<<" ";
}
cout<<"\n";
}
return 0;
}