/*
6.- Crear un programa que use una matriz de 3×4 para resolver un sistema de 3 ecuaciones con 3 incógnitas
usando el método de Gauss (hacer ceros por debajo de la diagonal principal para luego aplicar sustitución regresiva).
|-------------------------|
x +2y -3z = -16
3x + y -2z = -10
2x -3y + z = - 4
|-------------------------|
*/
#include<iostream>
#include<conio.h>
using namespace std;
int main(){
float matriz[3][4], aux[3][4], comprobacion[3],multiplicador= 0, z1= 0, z2= 0, y1=0, y2=0, t1=0, t2=0, x, y, z, t;// z1, z2 y t es para guardar un valor dentro de la tercera ecuacion
int c= 0;
bool vale= false;
//Ingreso de la matriz 3*4
cout<<"\t\t Sistema de 3 ecuaciones con 3 incognitas- Metodo Gauss Jordan.\n\n";
getch();
cout<<"\t\t Atencion!, se procedera a ingresar 4 valores; el sistema se hara cargo de colocar las incognitas...\n\n";
cout<<"\t\t Ingrese los valores: \n\n";
for(int i=0; i<=2; i++){
for(int j=0; j<=3; j++){
cout<<"\t\t Fila #"<<i+1<<" -> Columna #"<<j+1<<": "; cin>>matriz[i][j];
}
cout<<"\n\n";
}
//Para mostrar la Matriz 3*4 con sus incognitas
cout<<"\t\t La matriz 3x4 es: \n\n";
for(int i=0; i<=2; i++){
cout<<"\n\t\t Ecuacion #"<<i+1<<": ";
for(int j=0; j<=3; j++){
aux[i][j]=matriz[i][j];// guarda los valores esta matriz auxiliar
if(j==0){
if(matriz[i][j]==1){//Si el valor es positivo entonces mostrara al principio un + seguido del numero
cout<<" x";
}else if(matriz[i][j]==-1) {// Si es negativo entonces mostrara al principio un - seguido del numero
cout<<" -x";
}else{
cout<<" "<<matriz[i][j]<<"x";
}
}else if(j==1){
if(matriz[i][j]==1){
cout<<" +y";
}else if(matriz[i][j]==-1) {
cout<<" -y";
}else if(matriz[i][j]>1){
cout<<" +"<<matriz[i][j]<<"y";
}else if(matriz[i][j]<0){
cout<<matriz[i][j]<<"y";
}else{
cout<<matriz[i][j];
}
}else if(j==2){
if(matriz[i][j]==1){
cout<<" +z";
}else if(matriz[i][j]==-1) {
cout<<" -z";
}else if(matriz[i][j]>1){
cout<<" +"<<matriz[i][j]<<"z";
}else if(matriz[i][j]<0){
cout<<matriz[i][j]<<"z";
}else{
cout<<matriz[i][j];
}
}else if(j==3){
if(matriz[i][3]){
cout<<" = "<<matriz[i][j];
}
}
cout<<" ";
}
}
/*Operacion Interna
Se transformara un sistema de 3 ecuaciones lineales en un sistema escalonado. Es decir esto:
|-------------------------|
x + 2y -3z = -16
0 + ?y +?z = ?
0 + 0 + ? = ?
|-------------------------| */
//Primera fila toda la columna
multiplicador=matriz[1][0]*-1; // 3*-1 = -3x
for(int i=0; i<=2; i++){
for(int j=0; j<=3; j++){
if(i==0){
aux[i][j]=multiplicador*matriz[i][j]; // En la primera fila (i=0) se multiplica en este caso por -3 por toda la primera fila
}else if(i==1){// Si estan en la segunda fila entonces hacen esto:
matriz[i][j]+=aux[0][j]; // se suma la matriz original de la segunda fila con la matriz auxiliar de la primera fila
}
}
}
//Muestra de multiplicador para la Ecuacion
cout<<"\n\n\t\t multiplicador: "<<multiplicador<<"\n";
cout<<"\t\t Resultado de la Segunda Ecuacion Transformada: ";
for(int i=1; i<=1; i++){
for(int j=0; j<=3; j++){
cout<<matriz[i][j]<<" ";
}
}
//Segunda fila toda la columna
multiplicador=matriz[2][0]*-1; // 2*-1 = -2x
for(int i=0; i<=2; i++){
for(int j=0; j<=3; j++){
if(i==0){
aux[i][j]=multiplicador*matriz[i][j]; // En la primera fila (i=0) se multiplica en este caso por -2 por toda la primera fila
//cout<<aux[i][j];
}else if(i==2){// Si estan en la segunda fila entonces hacen esto:
matriz[i][j]+=aux[0][j]; // se suma la matriz original de la segunda fila con la matriz auxiliar de la primera fila
//cout<<aux[i][j];
}
//cout<<" ";
}
//cout<<"\n";
}
cout<<"\n\n\t\t multiplicador: "<<multiplicador<<"\n";
cout<<"\t\t Resultado de la Tercera Ecuacion Transformada: ";
for(int i=2; i<=2; i++){
for(int j=0; j<=3; j++){
cout<<matriz[i][j]<<" ";
}
}
// Muestra de la ecuacion ya modificada
cout<<"\n\n\t\t Primera transformacion del sistema: \n\n";
for(int i=0; i<=2; i++){
cout<<"\n\t\t Ecuacion #"<<i+1<<": ";
for(int j=0; j<=3; j++){
aux[i][j]=matriz[i][j];// guarda los valores esta matriz auxiliar
if(j==0){
if(matriz[i][j]==1){//Si el valor es positivo entonces mostrara al principio un + seguido del numero
cout<<" x";
}else if(matriz[i][j]==-1) {// Si es negativo entonces mostrara al principio un - seguido del numero
cout<<" -x";
}else{
cout<<" "<<matriz[i][j]<<"x";
}
}else if(j==1){
if(matriz[i][j]==1){
cout<<" +y";
}else if(matriz[i][j]==-1) {
cout<<" -y";
}else if(matriz[i][j]>1){
cout<<" +"<<matriz[i][j]<<"y";
}else if(matriz[i][j]<0){
cout<<matriz[i][j]<<"y";
}else{
cout<<matriz[i][j];
}
}else if(j==2){
if(matriz[i][j]==1){
cout<<" +z";
}else if(matriz[i][j]==-1) {
cout<<" -z";
}else if(matriz[i][j]>1){
cout<<" +"<<matriz[i][j]<<"z";
}else if(matriz[i][j]<0){
cout<<matriz[i][j]<<"z";
}else{
cout<<matriz[i][j];
}
}else if(j==3){
if(matriz[i][3]){
cout<<" = "<<matriz[i][j];
}
}
cout<<" ";
}
}
//Se eliminan las Y de la 3ra ecuacion reduciendola con la 2da ecuacion.
multiplicador=matriz[2][1]*-1; // -7*-1 = 7
for(int i=1; i<=2; i++){
for(int j=1; j<=3; j++){
if(i==1){
aux[i][j]=multiplicador*matriz[i][j]; // En la segunda fila (i=1) se multiplica en este caso por 7 por toda la primera fila
y1= aux[i][1]; // -35 y
z1= aux[i][2]; // +49 z
t1= aux[i][3]; // +266
}else if(i==2){// Si estan en la segunda fila entonces hacen esto:
aux[i][j]=multiplicador*matriz[i][j];
y2= aux[i][1]; // +35 y
z2= aux[i][2]; // -35 z
t2= aux[i][3]; // -140
}
}
multiplicador=matriz[1][1]; // = -5
if(i==2){
matriz[i][1]=y1+y2;
matriz[i][2]=z1+z2;
matriz[i][3]=t1+t2;
}
}
cout<<"\n\n\t\t Segunda transformacion del sistema: \n\n";
for(int i=0; i<=2; i++){
cout<<"\n\t\t Ecuacion #"<<i+1<<": ";
for(int j=0; j<=3; j++){
aux[i][j]=matriz[i][j];
if(j==0){
if(matriz[i][j]==1){
cout<<" x";
}else if(matriz[i][j]==-1) {
cout<<" -x";
}else{
cout<<" "<<matriz[i][j]<<"x";
}
}else if(j==1){
if(matriz[i][j]==1){
cout<<" +y";
}else if(matriz[i][j]==0){
cout<<" +0y";
}else if(matriz[i][j]==-1){
cout<<" -y";
}else if(matriz[i][j]>1){
cout<<" +"<<matriz[i][j]<<"y";
}else if(matriz[i][j]<0){
cout<<matriz[i][j]<<"y";
}else{
cout<<matriz[i][j];
}
}else if(j==2){
if(matriz[i][j]==1){
cout<<" +z";
}else if(matriz[i][j]==0){
cout<<" +0z";
}else if(matriz[i][j]==-1){
cout<<" -z";
}else if(matriz[i][j]>1){
cout<<" +"<<matriz[i][j]<<"z";
}else if(matriz[i][j]<0){
cout<<matriz[i][j]<<"z";
}else{
cout<<matriz[i][j];
}
}else if(j==3){
if(matriz[i][3]){
cout<<" = "<<matriz[i][j];
}
}
cout<<" ";
}
}
//Obtener resultado de las incognitas
//Calcular Z en la tercera Ecuacion
for(int i=0; i<=2; i++){
for(int j=0; j<=3; j++){
if(i==2){
// asignamos valores individuales a partir de la matriz
z=matriz[i][2]; // 14
t=matriz[i][3]; // 126
}
}
}
//operacion para obtener el valor de Z
z=t/z;
//Calcular Y en la segunda Ecuacion
for(int i=0; i<=2; i++){
for(int j=0; j<=3; j++){
if(i==1){
// asignamos valores individuales a partir de la matriz
y1 = matriz[i][1]; // -5
z1 = matriz[i][2]*z; // 63
t1 = matriz[i][3]; // 38
}
}
}
//operacion para obtener el valor de Y
z1*=-1; // -63
t1+=z1; // -25
y=t1/y1;
//Calcular X en la primera Ecuacion
for(int i=0; i<=2; i++){
for(int j=0; j<=3; j++){
if(i==0){
// asignamos valores individuales a partir de la matriz
y2 = matriz[i][1]*y; // 10
z2 = matriz[i][2]*z; // -27
t2 = matriz[i][3]; // -16
}
}
}
//operacion para obtener el valor de X
y2+=z2; // -17
y2*=-1; // 17
x= t2+y2;
//Muestra el resultado
cout<<"\n\n\t\t Incognita Z = "<<z;
cout<<"\n\n\t\t Incognita Y = "<<y;
cout<<"\n\n\t\t Incognita X = "<<x;
//COMPROBACION
for(int i=0; i<=2; i++){
comprobacion[i]=0;//para almacenar valor y hacer comprobacion
for(int j=0; j<=2; j++){
if(j==0){
matriz[i][j]*=x; // 1
comprobacion[i]+=matriz[i][j]; //1
}else if(j==1){
matriz[i][j]*=y; // 10
comprobacion[i]+=matriz[i][j]; //11
}else if(j==2){
matriz[i][j]*=z; // -27
comprobacion[i]+=matriz[i][j]; // -16
}
}
if (comprobacion[i] == matriz[i][3]){
vale=true;
}else{
vale= false;
}
}
///Muestra de la comprobacion
if(vale){
cout<<"\n\n\t\t Comprobacion de la primera ecuacion: "<<comprobacion[0]<<" = "<<matriz[0][3];
cout<<"\n\n\t\t Comprobacion de la segunda ecuacion: "<<comprobacion[1]<<" = "<<matriz[1][3];
cout<<"\n\n\t\t Comprobacion de la tercera ecuacion: "<<comprobacion[2]<<" = "<<matriz[2][3];
getch();
cout<<"\n\n\t\t Excelente!, la comprobacion de las tres ecuaciones esta correcta!!";
}else{
cout<<"\n\n\t\t No esta bien alguna de las tres ecuaciones... :/";
}
getch();
return 0;
}