/*
Matriz
4.- Un programa que pida al usuario los datos de una matriz de 3×3, y calcule y muestre su matriz inversa.
*/
/* Valores de prueba, error en la linea 117
2 1 3
-1 2 4
0 1 3
*/
#include <iostream>
using namespace std;
int main ()
{
int n1=-1,n2=-1;
float matriz[3][3]={},matriz2[3][3]={};
float matrizInversa[3][3]={1,0,0,0,1,0,0,0,1};
cout<<"Este programa calculara la matriz inverza de una matriz 3x3"<<endl;
for (int i=0 ; i<3 ; i++)
{
for(int j=0 ; j<3 ; j++)
{
cout<<"Ingrese el valor para la fila "<<i+1<<" columna "<<j+1<<": ";
cin>>matriz[i][j];
matriz2[i][j]=matriz[i][j];
matrizInversa[i][j]=matriz[i][j];
}
}
cout<<endl;
if (matriz[0][0]==0 or matriz[1][1]==0 or matriz[2][2]==0)
{
cout<<"La matriz digitada no tiene inversa";
exit(0);
}
/*método de Gauss Jordan
1 0 0
0 1 0
0 0 1
*/
//convirtiendo la fila 2 columna 0 a 0 y modificando los valores de la matriz inversa *[0][0]
//Paso 1
if (matriz2[2][0]>0 and matriz2[0][0]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (-1*matriz2[2][0]) * matriz2[0][i]) + (matriz2[0][0] * matriz2[2][i]) );
matrizInversa[2][i]= ( (-1*matriz2[2][0]) * matrizInversa[2][i] ) + (matriz2[0][0] * matrizInversa[0][i]) ;
}
}
else if (matriz2[2][0]>0 and matriz2[0][0]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (matriz2[2][0] * matriz2[0][i]) + ((-1*matriz2[0][0]) * matriz2[2][i]) ));
matrizInversa[2][i]= ( matriz2[2][0] * matrizInversa[2][i] ) + ((-1*matriz2[0][0]) * matrizInversa[0][i]) ;
}
}
else if (matriz2[2][0]<0 and matriz2[0][0]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (-1*matriz2[2][0]) * matriz2[0][i]) + (matriz2[0][0] * matriz2[2][i]) );
matrizInversa[2][i]= ( (-1*matriz2[2][0]) * matrizInversa[2][i] ) + (matriz2[0][0] * matrizInversa[0][i]) ;
}
}
else if (matriz2[2][0]<0 and matriz2[0][0]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (matriz2[2][0] * matriz2[0][i]) + ((-1*matriz2[0][0]) * matriz2[2][i]) ));
matrizInversa[2][i]= ( matriz2[2][0] * matrizInversa[2][i] ) + ((-1*matriz2[0][0]) * matrizInversa[0][i]) ;
}
}
cout<<"Paso N.1 convirtiendo la F3C1 a 0: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" ";
}
cout<<endl;
}
//convirtiendo la fila 1 columna 0 a 0 y modificando los valores de la matriz inversa *[0][0]
//Paso 2
if (matriz2[1][0]>0 and matriz2[0][0]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (-1*matriz2[1][0]) * matriz2[0][i]) + (matriz2[0][0] * matriz2[1][i]) );
matrizInversa[1][i]= ( (-1*matriz2[1][0]) * matrizInversa[1][i] ) + (matriz2[0][0] * matrizInversa[0][i]) ;
}
}
else if (matriz2[1][0]>0 and matriz2[0][0]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (matriz2[1][0] * matriz2[0][i]) + ((-1*matriz2[0][0]) * matriz2[1][i]) ));
matrizInversa[1][i]= ( matriz2[1][0] * matrizInversa[1][i] ) + ((-1*matriz2[0][0]) * matrizInversa[0][i]) ;
}
}
else if (matriz2[1][0]<0 and matriz2[0][0]>0)//aca error
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (-1*matriz2[1][0]) * matriz2[0][i]) + (matriz2[0][0] * matriz2[1][i]) );
matrizInversa[1][i]= ( (-1*matriz2[1][0]) * matrizInversa[1][i] ) + (matriz2[0][0] * matrizInversa[0][i]) ;
}
}
else if (matriz2[1][0]<0 and matriz2[0][0]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (matriz2[1][0] * matriz2[0][i]) + ((-1*matriz2[0][0]) * matriz2[1][i]) ));
matrizInversa[1][i]= ( matriz2[1][0] * matrizInversa[1][i] ) + ((-1*matriz2[0][0]) * matrizInversa[0][i]) ;
}
}
cout<<"Paso N.2 convirtiendo la F2C1 a 0: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" ";
}
cout<<endl;
}
//convirtiendo la fila 2 columna 1 a 0 y modificando los valores de la matriz inversa *[1][1]
if (matriz2[2][1]>0 and matriz2[1][1]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (-1*matriz2[2][1]) * matriz2[1][i]) + (matriz2[1][1] * matriz2[2][i]) );
matrizInversa[2][i]= ( (-1*matriz2[2][1]) * matrizInversa[2][i] ) + (matriz2[1][1] * matrizInversa[1][i]) ;
}
}
else if (matriz2[2][1]>0 and matriz2[1][1]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (matriz2[2][1] * matriz2[1][i]) + ((-1*matriz2[1][1]) * matriz2[2][i]) ));
matrizInversa[2][i]= ( matriz2[2][1] * matrizInversa[2][i] ) + ((-1*matriz2[1][1]) * matrizInversa[1][i]) ;
}
}
else if (matriz2[2][1]<0 and matriz2[1][1]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (-1*matriz2[2][1]) * matriz2[1][i]) + (matriz2[1][1] * matriz2[2][i]) );
matrizInversa[2][i]= ( (-1*matriz2[2][1]) * matrizInversa[2][i] ) + (matriz2[1][1] * matrizInversa[1][i]) ;
}
}
else if (matriz2[2][1]<0 and matriz2[1][1]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (matriz2[2][1] * matriz2[1][i]) + ((-1*matriz2[1][1]) * matriz2[2][i]) ));
matrizInversa[2][i]= ( matriz2[2][1] * matrizInversa[2][i] ) + ((-1*matriz2[1][1]) * matrizInversa[1][i]) ;
}
}
cout<<"Paso N.3 convirtiendo la F3C2 a 0: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" "<<matrizInversa[i][j];
}
cout<<endl;
}
//convirtiendo la fila 0 columna 2 a 0 y modificando los valores de la matriz inversa *[1][1]
if (matriz2[2][0]>0 and matriz2[1][1]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (-1*matriz2[2][0]) * matriz2[1][i]) + (matriz2[1][1] * matriz2[2][i]) );
matrizInversa[2][i]= ( (-1*matriz2[2][0]) * matrizInversa[2][i] ) + (matriz2[1][1] * matrizInversa[1][i]) ;
}
}
else if (matriz2[2][0]>0 and matriz2[1][1]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (matriz2[2][0] * matriz2[1][i]) + ((-1*matriz2[1][1]) * matriz2[2][i]) ));
matrizInversa[2][i]= ( matriz2[2][0] * matrizInversa[2][i] ) + ((-1*matriz2[1][1]) * matrizInversa[1][i]) ;
}
}
else if (matriz2[2][0]<0 and matriz2[1][1]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (-1*matriz2[2][0]) * matriz2[1][i]) + (matriz2[1][1] * matriz2[2][i]) );
matrizInversa[2][i]= ( (-1*matriz2[2][0]) * matrizInversa[2][i] ) + (matriz2[1][1] * matrizInversa[1][i]) ;
}
}
else if (matriz2[2][0]<0 and matriz2[1][1]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[2][i]= ( ( (matriz2[2][0] * matriz2[1][i]) + ((-1*matriz2[1][1]) * matriz2[2][i]) ));
matrizInversa[2][i]= ( matriz2[2][0] * matrizInversa[2][i] ) + ((-1*matriz2[1][1]) * matrizInversa[1][i]) ;
}
}
cout<<"Paso N.4 convirtiendo la F1C3 a 0: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" "<<matrizInversa[i][j];
}
cout<<endl;
}
//convirtiendo la fila 1 columna 2 a 0 y modificando los valores de la matriz inversa *[2][2]
if (matriz2[1][2]>0 and matriz2[2][2]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (-1*matriz2[1][2]) * matriz2[2][i]) + (matriz2[2][2] * matriz2[1][i]) );
matrizInversa[1][i]= ( (-1*matriz2[1][2]) * matrizInversa[1][i] ) + (matriz2[2][2] * matrizInversa[2][i]) ;
}
}
else if (matriz2[1][2]>0 and matriz2[2][2]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (matriz2[1][2] * matriz2[2][i]) + ((-1*matriz2[2][2]) * matriz2[1][i]) ));
matrizInversa[1][i]= ( matriz2[1][2] * matrizInversa[1][i] ) + ((-1*matriz2[2][2]) * matrizInversa[2][i]) ;
}
}
else if (matriz2[1][2]<0 and matriz2[2][2]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (-1*matriz2[1][2]) * matriz2[2][i]) + (matriz2[2][2] * matriz2[1][i]) );
matrizInversa[1][i]= ( (-1*matriz2[1][2]) * matrizInversa[2][i] ) + (matriz2[2][2] * matrizInversa[2][i]) ;
}
}
else if (matriz2[1][2]<0 and matriz2[2][2]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[1][i]= ( ( (matriz2[1][2] * matriz2[2][i]) + ((-1*matriz2[2][2]) * matriz2[1][i]) ));
matrizInversa[1][i]= ( matriz2[1][2] * matrizInversa[1][i] ) + ((-1*matriz2[2][2]) * matrizInversa[2][i]) ;
}
}
cout<<"Paso N.5 convirtiendo la F2C3 a 0: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" "<<matrizInversa[i][j];
}
cout<<endl;
}
//convirtiendo la fila 0 columna 1 a 0 y modificando los valores de la matriz inversa *[1][1]
if (matriz2[0][1]>0 and matriz2[1][1]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[0][i]= ( ( (-1*matriz2[0][1]) * matriz2[1][i]) + (matriz2[1][1] * matriz2[0][i]) );
matrizInversa[0][i]= ( (-1*matriz2[0][1]) * matrizInversa[0][i] ) + (matriz2[1][1] * matrizInversa[1][i]) ;
}
}
else if (matriz2[0][1]>0 and matriz2[1][1]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[0][i]= ( ( (matriz2[0][1] * matriz2[1][i]) + ((-1*matriz2[1][1]) * matriz2[0][i]) ));
matrizInversa[0][i]= ( matriz2[0][1] * matrizInversa[0][i] ) + ((-1*matriz2[1][1]) * matrizInversa[1][i]) ;
}
}
else if (matriz2[0][1]<0 and matriz2[1][1]>0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[0][i]= ( ( (-1*matriz2[0][1]) * matriz2[1][i]) + (matriz2[1][1] * matriz2[0][i]) );
matrizInversa[0][i]= ( (-1*matriz2[0][1]) * matrizInversa[0][i] ) + (matriz2[1][1] * matrizInversa[1][i]) ;
}
}
else if (matriz2[0][1]<0 and matriz2[1][1]<0)
{
for (int i=0 ; i<3 ; i++)
{
matriz2[0][i]= ( ( (matriz2[0][1] * matriz2[1][i]) + ((-1*matriz2[1][1]) * matriz2[0][i]) ));
matrizInversa[0][i]= ( matriz2[0][1] * matrizInversa[0][i] ) + ((-1*matriz2[1][1]) * matrizInversa[1][i]) ;
}
}
cout<<"Paso N.6 convirtiendo la F1C2 a 0: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" "<<matrizInversa[i][j];
}
cout<<endl;
}
//Se vuelve a verificar si las matrices 0,0; 1,1; 2,2 sean distinto de cero para verificar si la matriz calculada tiene inversa
if (matriz[0][0]==0 or matriz[1][1]==0 or matriz[2][2]==0)
{
cout<<"La matriz digitada no tiene inversa";
exit(0);
}
//Se realiza el paso 7
matriz2[0][0]=matriz2[0][0]/matriz2[0][0];
for (int i=0 ; i<3 ; i++)
{
matrizInversa[0][i]=matrizInversa[0][i]/matriz2[0][0];
}
matriz2[1][1]=matriz2[1][1]/matriz2[1][1];
for (int i=0 ; i<3 ; i++)
{
matrizInversa[1][i]=matrizInversa[1][i]/matriz2[1][1];
}
matriz2[2][2]=matriz2[2][2]/matriz2[2][2];
for (int i=0 ; i<3 ; i++)
{
matrizInversa[2][i]=matrizInversa[2][i]/matriz2[2][2];
}
cout<<"Paso N.7 convirtiendo la F1C1, F2C2, F3C3 a 1: "<<endl;//Se mostrara el paso anterior si el numero a convertir es <> a 0
for (int i=0 ; i<3 ; i++)
{
for (int j=0 ; j<3 ; j++)
{
cout<<matriz2[i][j]<<" "<<matrizInversa[i][j];
}
cout<<endl;
}
return 0;
}