/******************************************************************************
Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, PHP, Ruby,
C#, OCaml, VB, Perl, Swift, Prolog, Javascript, Pascal, COBOL, HTML, CSS, JS
Code, Compile, Run and Debug online from anywhere in world.
*******************************************************************************/
//Matrices
/* 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). */
/*-----------------------------------------------------------------------------------------------------------------------------*/
#include<iostream>
#include<locale.h>
#include<conio.h>
int main(){
setlocale(LC_CTYPE, "Spanish");
/* Variables enteras; roe(Opción de continuedad del programa); c(contador para los ciclos for de las ecuaciones); i,j(Variables para los ciclos FOR)*/
int roe = 0, c = 0, h = 0, i = 0, j = 0, k = 0, l = 0;
/* Variables double; rta(Valor de la primera incognita), rta2(Valor de la segunda incognita), rta3(Valor de la tercera incognita)*/
double rta = 0, rta2 = 0, rta3 = 0;
system("cls");//Limpiador de pantalla al volver.
//Presentación del programa.
std::cout<<"RESOLUCIÓN DE TRES ECUACIONES CON TRES INCOGNITAS POR EL METODO DE GAUSS"<<std::endl<<std::endl;
std::cout<<"Incognitas que va agregar"<<std::endl;//Ingreso de las incognitas a resolver.
char incognitas[3] = {};
for(int i = 0; i<=2; i++){
std::cout<<"-Incognita : "; std::cin>>incognitas[i];
}
std::cout<<std::endl;
double numbers[12] = {};//Array que contendrá los números de las ecuacione del usuario.
//Ciclo FOR ANIDADO para ingreso de datos de la primera ecuación.
for(int i = 0; i<=0; i++){
std::cout<<"Ecuación N°"<<i+1<<std::endl;
for(int j = 0; j<4; j++){
if(j==3){ //Si el iterador j llega a 3, el usuario deberá ingresar lo que vale ecuación.
std::cout<<"Esta ecuación es igual a : "; std::cin>>numbers[j];
} else{
std::cout<<"Número alado de la '"<<incognitas[0+c]<<"' (con su signo) : "; std::cin>>numbers[j];
}
c++; //Contador para ir cambiano la posición del almacenamiento del N número ingresado en el array 'incognitas'.
}
c = 0; //Contador dado en 0, para que no afecte el siguiente contador.
std::cout<<std::endl;
}
//Ciclo FOR ANIDADO para ingreso de datos de la segunda ecuación.
for(int i = 0; i<=0; i++){
std::cout<<"Ecuación N°"<<i+2<<std::endl;
for(int j = 4; j<8; j++){
if(j==7){ //Si el iterador j llega a 7, el usuario deberá ingresar lo que vale ecuación.
std::cout<<"Esta ecuación es igual a : "; std::cin>>numbers[j];
} else{
std::cout<<"Número alado de la '"<<incognitas[0+c]<<"' (con su signo) : "; std::cin>>numbers[j];
}
c++; //Contador para ir cambiano la posición del almacenamiento del N número ingresado en el array 'incognitas'.
}
c = 0; //Contador dado en 0, para que no afecte el siguiente contador.
std::cout<<std::endl;
}
//Ciclo FOR ANIDADO para ingreso de datos de la tercera ecuación.
for(int i = 0; i<=0; i++){
std::cout<<"Ecuación N°"<<i+3<<std::endl;
for(int j = 8; j<12; j++){
if(j==11){ //Si el iterador j llega a 11, el usuario deberá ingresar lo que vale ecuación.
std::cout<<"Esta ecuación es igual a : "; std::cin>>numbers[j];
} else{
std::cout<<"Número alado de la '"<<incognitas[0+c]<<"' (con su signo) : "; std::cin>>numbers[j];
}
c++; //Contador para ir cambiano la posición del almacenamiento del N número ingresado en el array 'incognitas'.
}
c = 0; //Contador dado en 0, para que no afecte el siguiente contador.
std::cout<<std::endl;
}
system("cls");//Limpiador de pantalla.
//Presentación de las ecuaciones del usuario.
std::cout<<"---------------Ecuaciones---------------"<<std::endl;
std::cout<<" "<<numbers[0]<<incognitas[0]<<" "<<numbers[1]<<incognitas[1]<<" "<<numbers[2]<<incognitas[2]<<" = "<<numbers[3]<<std::endl;
std::cout<<" "<<numbers[4]<<incognitas[0]<<" "<<numbers[5]<<incognitas[1]<<" "<<numbers[6]<<incognitas[2]<<" = "<<numbers[7]<<std::endl;
std::cout<<" "<<numbers[8]<<incognitas[0]<<" "<<numbers[9]<<incognitas[1]<<" "<<numbers[10]<<incognitas[2]<<" = "<<numbers[11]<<std::endl;
std::cout<<"----------------------------------------"<<std::endl<<std::endl;
double gauss[3][4] = {};//Matriz que contendrá los valores de las ecuaciones.
//Presentación de las ecuaciones en una matriz 3 x 4.
std::cout<<"-------------Método Gauss-------------"<<std::endl;
for(int i = 0; i<3; i++){
std::cout<<" | ";
for(int j = 0; j<4; j++){
gauss[i][j] = numbers[0+c]; //Los números de las ecuaciones ahora se contendrán en la matriz 'gauss'.
std::cout<<gauss[i][j]<<" | ";
c++;//Contador para ir cambiando la posición del array 'numbers'.
}
std::cout<<std::endl;
}
std::cout<<"----------------------------------------"<<std::endl<<std::endl;
do{ //Ciclo DO WHILE por si el usuario quiere volver a ingresar sus ecuaciones.
std::cout<<"Volver a ingresar ecuaciones[1] || Resolver incognitas [2]"<<std::endl;
std::cout<<"Opción = "; std::cin>>roe;
if(roe == 1){
std::cout<<std::endl;
return main();
} else if(roe > 2 || roe <= 0){
std::cout<<std::endl<<"-----ERROR: Solo puede elegir el 1 o el 2-----"<<std::endl;
}
}while(roe > 2 || roe <= 0);
system("cls"); //Limpiador de pantalla.
//'gauss2' servirá para contener los valores de la ecuaciones pero multiplicados entre si.
double gauss2[3][4] = {gauss[0][0], gauss[0][1], gauss[0][2], gauss[0][3]};
double gauss3[3][4] = {};//Mini copia de la matriz 'gauss2', para que no haya problemas.
//Ciclo FOR ANIDADO de la ecuación del método de gauss.
for(int i = 0; i<3; i++){
for(int j = 0; j<4; j++){
gauss2[i+1][j] = (-(gauss[i+c][0])*(gauss[0][j]))+((gauss[0][0])*(gauss[i+c][j]));
c = 1;
gauss3[i][j] = gauss2[i][j]; //Paso de datos de 'gauss2' hacia 'gauss3'
}
if(i==2){ //Ecuación para la fila 3 para el valor faltante a convertir en 0.
for(int k = 2; k<3; k++){
for(int l = 0; l<4; l++){
/*'gauss3' ayudará en no sustituir el valor de 'gauss2[2][1]' en resolver las ecuaciones con los valores faltantes. */
gauss2[k][l] = (-(gauss3[k][1])*(gauss3[k-1][l]))+((gauss3[k-1][1])*(gauss3[k][l]));
}
}
}
}
//Presentación 'gauss2' pero con valares multiplicados.
for(int i = 0; i<3; i++){
std::cout<<" | ";
for(int j = 0; j<4; j++){
std::cout<<gauss2[i][j]<<" | ";
}
std::cout<<std::endl;
}
//Resolución del sistema de ecuacione 3 x 3.
rta = gauss2[2][3]/gauss2[2][2];
rta2 = -((-(gauss2[1][3])+(rta * (gauss2[1][2])))/gauss2[1][1]);
rta3 = -((-(gauss2[0][3])+(rta * (gauss2[0][2])+(rta2*(gauss2[0][1]))))/gauss2[0][0]);
//Presetanción de los valores de cada incogita.
std::cout<<std::endl<<"Valor de las incognitas"<<std::endl;
std::cout<<incognitas[0]<<" = "<<rta3<<std::endl;
std::cout<<incognitas[1]<<" = "<<rta2<<std::endl;
std::cout<<incognitas[2]<<" = "<<rta<<std::endl;
do{ //Ciclo DO WHILE para asegurar que el usuario quiera salir del programa o volver al principio.
std::cout<<std::endl<<"Volver a ingresar ecuaciones[1] || Salir del programa[2]"<<std::endl;
std::cout<<"Opción = "; std::cin>>roe;
if(roe == 1){ //volvemos al menú del programa.
std::cout<<std::endl;
return main();
} else if(roe > 2 || roe <= 0){
std::cout<<std::endl<<"-----ERROR: Solo puede elegir el 1 o el 2-----"<<std::endl;
} else{ //Se sale del programa.
std::cout<<std::endl<<"Gracias por usar este programa :D";
getch();
return 0;
}
}while(roe > 2 || roe <= 0);
return 0;
}