online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code    Language
//Matrices - Proyecto N°4 /* Elabora una calculadora de matrices | Sumas, Resta, Multiplicación, Tranpuesta, Inversa, Adjunta y Determinante ------------------------------------------------------------------------------------------------------------------*/ #include<iostream> #include<locale.h> #include<conio.h> int main(){ setlocale(LC_CTYPE, "Spanish"); /*Variables enteras: opt(Hará terminar o volver al programa), elec(establecerá el máximo de elegir una opción a resolver), i-j-k(itiradores para los ciclos FOR), f-cl(Filas y columnas de la primera matriz), f1-cl1(Filas y columnas de la segunda matriz)*/ int opt = 0, elec = 0, i = 0, j = 0, k = 0, f = 0, cl = 0, f1 = 0, cl1 = 0; /*Variables double: rta2(Resolución de la determinante), det(Primer paso de resolver la determinante de N X N matriz), det1(Segundo paso de resolver la determinante de N X N matriz), det2(Tercer paso de resolver la determinante de N X N matriz) */ double rta2 = 0, det = 0, det1 = 0, det2 = 0; //Introducción del programa std::cout<<"CALCULADORA DE MATRICES"<<std::endl<<std::endl<<"-------------------------------------------------"<<std::endl<<"1.-Sumar matrices |"<<std::endl<<"2.-Restar matrices |"<<std::endl<<"3.-Multiplicar matrices |"<<std::endl<<"4.-Sacar la inversa de la matriz (máximo 3 x 3) |"<<std::endl<<"5.-Adjunta de la matriz |"<<std::endl<<"-------------------------------------------------"<<std::endl<<std::endl; do{ //Ciclo DO WHILE para que se elija lo disponible en el programa std::cout<<"Elección = "; std::cin>>elec; if(elec > 5 || elec<=0){ std::cout<<std::endl<<"-----ERROR: Solo puede elegir del 1 hasta el 5-----"<<std::endl<<std::endl; } }while(elec > 5 || elec<=0); //IF para la resolución de dos matrices if(elec == 1 || elec == 2 || elec == 3){ std::cout<<std::endl<<"Número de filas de la primera matriz = "; std::cin>>f; std::cout<<"Número de columnas de la primera matriz = "; std::cin>>cl; std::cout<<"Número de filas de la segunda matriz = "; std::cin>>f1; std::cout<<"Número de columnas de la segunda matriz = "; std::cin>>cl1; } else{ //ELSE para la resolución de una matriz std::cout<<std::endl<<"Número de filas = "; std::cin>>f; std::cout<<"Número de columnas = "; std::cin>>cl; } /*Matrices double: ms(Primera matriz), ms1(Segunda matriz), rta(Cotendrá la suma o resta de las matrices), rtam(Cotendrá la multiplicación de las matrices), ms2(Cotendrá la adjunta de la martriz)*/ double ms[f][cl] = {}, ms1[f1][cl1] = {}, rta[f][cl] = {}, rtam[f][cl1] = {}, ms2[f][cl] = {}; system("cls"); switch(elec){ //Suma de matrices case 1: if(f + cl == f1 + cl1){ std::cout<<"Ingreso de datos - Matriz N°1 - "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Ingreso de datos de la primera matriz. for(j = 0; j<cl; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms[i][j]; } std::cout<<std::endl; } std::cout<<std::endl<<"Ingreso de datos - Matriz N°2 -"<<f1<<" x "<<cl1<<std::endl; for(i = 0; i<f1; i++){ //Ingreso de datos de la segunda matriz. for(j = 0; j<cl1; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms1[i][j]; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz N°1 - "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Presentación de la primera matriz. std::cout<<" | "; for(j = 0; j<cl; j++){ std::cout<<ms[i][j]<<" | "; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz N°2 - "<<f1<<" x "<<cl1<<std::endl; for(i = 0; i<f; i++){ //Presentación de la segunda matriz. std::cout<<" | "; for(j = 0; j<cl; j++){ std::cout<<ms1[i][j]<<" | "; } std::cout<<std::endl; } for(int i = 0; i<f; i++){ //Ciclo FOR para sumar las matrices. for(int j = 0; j<cl; j++){ rta[i][j] = (ms[i][j]+ms1[i][j]); } } std::cout<<std::endl<<"Matrices sumadas"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de las matrices sumadas. std::cout<<" | "; for(int j = 0; j<cl; j++){ std::cout<<rta[i][j]<<" | "; } std::cout<<std::endl; } } else{ //ELSE para matrices que no cumplen en ser sumadas. std::cout<<"-----No se pueden sumar matrices que tengan diferente orden-----"<<std::endl<<std::endl; return main(); } break; //Resta de matrices case 2: if(f + cl == f1 + cl1){ std::cout<<"Ingreso de datos - Matriz N°1 - "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Ingreso de la datos de la primera matriz. for(j = 0; j<cl; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms[i][j]; } std::cout<<std::endl; } std::cout<<"Ingreso de datos - Matriz N°2 - "<<f1<<" x "<<cl1<<std::endl; for(i = 0; i<f1; i++){ //Ingreso de la datos de la segunda matriz. for(j = 0; j<cl1; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms1[i][j]; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz N°1 - "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Presentación de la primera matriz. std::cout<<" | "; for(j = 0; j<cl; j++){ std::cout<<ms[i][j]<<" | "; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz N°2 - "<<f1<<" x "<<cl1<<std::endl; for(i = 0; i<f1; i++){ //Presentación de la segunda matriz. std::cout<<" | "; for(j = 0; j<cl1; j++){ std::cout<<ms1[i][j]<<" | "; } std::cout<<std::endl; } for(int i = 0; i<f; i++){ //Ciclo FOR para restar las matrices. for(int j = 0; j<cl; j++){ rta[i][j] = (ms[i][j]-ms1[i][j]); } } std::cout<<std::endl<<"Matrices restadas"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de las matrices restadas. std::cout<<" | "; for(int j = 0; j<cl; j++){ std::cout<<rta[i][j]<<" | "; } std::cout<<std::endl; } } else{ //ELSE para matrices que no cumplen en ser restadas. std::cout<<"-----No se pueden restar matrices que tengan diferente orden-----"<<std::endl<<std::endl; return main(); } break; //Producto de matrices case 3: if(cl == f1){ //IF para matrices que cumplen al ser multiplicadas. std::cout<<"Ingreso de datos - Matriz N°1 - "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Ingreso de datos de la primera matriz. for(j = 0; j<cl; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms[i][j]; } std::cout<<std::endl; } std::cout<<"Ingreso de datos - Matriz N°2 - "<<f1<<" x "<<cl1<<std::endl; for(i = 0; i<f1; i++){ //Ingreso de datos de la segunda matriz. for(j = 0; j<cl1; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms1[i][j]; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz N°1 - "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Presentación de la primera matriz. std::cout<<" | "; for(j = 0; j<cl; j++){ std::cout<<ms[i][j]<<" | "; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz N°2 - "<<f1<<" x "<<cl1<<std::endl; for(i = 0; i<f1; i++){ //Presentación de la segunda matriz. std::cout<<" | "; for(j = 0; j<cl1; j++){ std::cout<<ms1[i][j]<<" | "; } std::cout<<std::endl; } for(int i = 0; i<f; i++){ //Ciclo FOR para multiplicar las matrices. for(int j = 0; j<cl1; j++){ rta[i][j] = 0; for(int k = 0; k<cl; k++) rta[i][j] += (ms[i][k]*ms1[k][j]); } } std::cout<<std::endl<<"Matrices multiplicadas"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de las matrices multiplicadas. std::cout<<" | "; for(int j = 0; j<cl1; j++){ std::cout<<rta[i][j]<<" | "; } std::cout<<std::endl; } } else{ //ELSE para matrices que no cumplen en ser multiplicadas. std::cout<<"-----Las matrices se pueden mutiplicar cuando el númeo de filas de la primera matriz[N°1] sea igual al número de columnas de segunda matriz[2]-----"<<std::endl<<std::endl; return main(); } break; //Matriz inversa case 4: //Para matrices de 1 x 1 :v if(f * cl == 1){ std::cout<<"Datos de la matriz 1 x 1"<<std::endl<<std::endl<<"Ubicación de datos en la matriz"<<std::endl<<"|[1][1]"<<std::endl<<std::endl<<"Ingreso de datos de la matriz 1 x 1"<<std::endl<<"[1][1] = "; std::cin>>ms[0][0]; std::cout<<std::endl<<"Matriz 1 x 1"<<std::endl<<"|"<<ms[0][0]<<"|"<<std::endl<<std::endl<<"La determinante de su matriz es = "<<ms[0][0]<<std::endl<<std::endl<<"Matriz traspuesta"<<std::endl<<"|"<<ms[0][0]<<"|"<<std::endl; } else if(f * cl == 4){ //ELSE IF para matrices 2 x 2 std::cout<<"Datos de la matriz 2 x 2"<<std::endl<<std::endl<<"Ubicación de datos en la matriz"<<std::endl<<"|[1][1] [1][2]|"<<std::endl<<"|[2][1] [2][2]|"<<std::endl<<std::endl; for(i = 0; i<f; i++){ //Ingreso de datos de la matriz. for(j = 0; j<cl; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms[i][j]; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Presentación de la matriz. std::cout<<" | "; for(j = 0; j<cl; j++){ std::cout<<ms[i][j]<<" | "; } std::cout<<std::endl; } //Resolución de la determinante de la matriz 2 x 2. det = ((ms[0][0])*(ms[1][1]))-((ms[0][1])*ms[1][0]); std::cout<<std::endl<<"La determinante de su matriz es = "<<det<<std::endl; //´Presentación de la determinante. if(det==0){ std::cout<<"Su matriz no tiene inversa"<<std::endl; } else{ //Matriz adjunta de matriz 2 x 2. double ms2[f][cl] = {{ms[1][1], -(ms[0][1])}, {-(ms[1][0]), ms[0][0]}}; std::cout<<std::endl<<"-Matriz adjunta 2 x 2"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de la matriz adjunta. std::cout<<" | "; for(int j = 0; j<cl; j++){ std::cout<<ms2[i][j]<<" | "; } std::cout<<std::endl; } std::cout<<std::endl<<"-Matriz inversa 2 x 2"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de la matriz inversa. std::cout<<"| "; for(int j = 0; j<cl; j++){ std::cout<<((ms2[i][j])/det)<<" | "; } std::cout<<std::endl; } } } else if(f * cl == 9){ //ELSE IF para matrices 3 x 3 std::cout<<"Datos de la matriz 3 x 3"<<std::endl<<std::endl<<"Ubicación de datos en la matriz"<<std::endl<<"|[1][1] [1][2] [1][3]|"<<std::endl<<"|[2][1] [2][2] [2][3]|"<<std::endl<<"|[3][1] [3][2] [3][3]|"<<std::endl<<std::endl; for(i = 0; i<f; i++){ //Ingreso de datos de la matriz. for(j = 0; j<cl; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms[i][j]; } std::cout<<std::endl; } std::cout<<std::endl<<"Matriz "<<f<<" x "<<cl<<std::endl; for(i = 0; i<f; i++){ //Presentación de la matriz. std::cout<<" | "; for(j = 0; j<cl; j++){ std::cout<<ms[i][j]<<" | "; } std::cout<<std::endl; } //Resolución de la determinante de la matriz 3 x 3. det = (ms[0][0])*(((ms[1][1])*(ms[2][2]))-((ms[1][2])*(ms[2][1]))); det1 = (ms[0][1])*(((ms[0][1])*(ms[2][2]))-((ms[1][2])*(ms[2][0]))); det2 = (ms[0][2])*(((ms[0][1])*(ms[2][1]))-((ms[1][1])*(ms[2][0]))); rta2 = det - (det1) + (det2); std::cout<<std::endl<<"La determinante de su matriz es = "<<rta2<<std::endl; //Presentación de la determinante. if(rta2 == 0){ //IF para determinante igual a 0 std::cout<<"Su matriz no tiene inversa"<<std::endl; } else{ //ELSE para calcular la determinantes mayor o menor a 0. //Resolución de la adjunta de la matriz 3 x 3. ms2[0][0] = +(((ms[1][1])*(ms[2][2]))-((ms[1][2])*(ms[2][1]))); ms2[0][1] = -(((ms[1][0])*(ms[2][2]))-((ms[1][2])*(ms[2][0]))); ms2[0][2] = +(((ms[1][0])*(ms[2][1]))-((ms[1][1])*(ms[2][0]))); ms2[1][0] = -(((ms[0][1])*(ms[2][2]))-((ms[0][2])*(ms[2][1]))); ms2[1][1] = +(((ms[0][0])*(ms[2][2]))-((ms[0][2])*(ms[2][0]))); ms2[1][2] = -(((ms[0][0])*(ms[2][1]))-((ms[0][1])*(ms[2][0]))); ms2[2][0] = +(((ms[0][1])*(ms[1][2]))-((ms[0][2])*(ms[1][1]))); ms2[2][1] = -(((ms[0][0])*(ms[1][2]))-((ms[0][2])*(ms[1][0]))); ms2[2][2] = +(((ms[0][0])*(ms[1][1]))-((ms[0][1])*(ms[1][0]))); std::cout<<std::endl<<"-Matriz adjunta 3 x 3"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de la matriz adjunta. std::cout<<" | "; for(int j = 0; j<cl; j++){ std::cout<<ms2[j][i]<<" | "; } std::cout<<std::endl; } std::cout<<std::endl<<"-Matriz inversa 3 x 3"<<std::endl; for(int i = 0; i<f; i++){ //Presentación de la matriz inversa. std::cout<<"| "; for(int j = 0; j<cl; j++){ std::cout<<((ms2[j][i])/rta2)<<" | "; } std::cout<<std::endl; } } } else{ //ELSE por si se pone una matriz N x M o N x N mayor a 3 x 3. std::cout<<"-----ERROR: La matriz no está en el margen de posible cálculo-----"<<std::endl<<std::endl; return main(); } break; //Matriz traspuesta case 5: std::cout<<"Ingreso de datos de matriz "<<f<<" x "<<cl<<std::endl; for(int i = 0; i<=f-1; i++){ //Ciclo FOR anidado para ingreso de la matriz. for(int j = 0; j<=cl-1; j++){ std::cout<<"["<<i+1<<"] ["<<j+1<<"] = "; std::cin>>ms[i][j]; } std::cout<<std::endl; } std::cout<<"Matriz "<<f<<" x "<<cl<<std::endl; for(int i = 0; i<=f-1; i++){ //Ciclo FOR para la presentación de la matriz. std::cout<<"| "; for(int j = 0; j<=cl-1; j++){ std::cout<<ms[i][j]<<" | "; } std::cout<<std::endl; } std::cout<<std::endl; if(f<cl){ //IF para matrices traspuesta que el número de filas sea menor al número de columnas. std::cout<<"Matriz tranpuesta "<<cl<<" x "<<f<<std::endl; for(int i = 0; i<=cl-1; i++){ std::cout<<"| "; for(int j = 0; j<=f-1; j++){ std::cout<<ms[j][i]<<" | "; } std::cout<<std::endl; } } else if(f>cl){ //ELSE IF para matrices con número de filas mayor al número de columnas. std::cout<<"Matriz tranpuesta "<<cl<<" x "<<f<<std::endl; for(int i = 0; i<cl; i++){ std::cout<<"| "; for(int j = 0; j<f; j++){ std::cout<<ms[j][i]<<" | "; } std::cout<<std::endl; } } else{ //ELSE para matrices igual tamaño. std::cout<<"Matriz tranpuesta "<<f<<" x "<<cl<<std::endl; for(int i = 0; i<=f-1; i++){ std::cout<<"| "; for(int j = 0; j<=cl-1; j++){ std::cout<<ms[j][i]<<" | "; } std::cout<<std::endl; } } break; } do{ //Ciclo DO WHILE para volver o terminar el programa. std::cout<<std::endl<<"Volver al menú[1] || Salir del programa[2]"<<std::endl<<"Opción = "; std::cin>>opt; if(opt == 1){ //Vuelve al inicio del programa. system("cls"); return main(); } else if(opt > 2 || opt<=0){ //Error de elegir 3 o mayor a este, o elegir 0 o menor a este. std::cout<<std::endl<<"-----ERROR: Solo puede elegir el 1 o el 2-----"<<std::endl; } else{ //Termina el programa. std::cout<<std::endl<<"Gracias por usar este programa :D"; getch(); return 0; } }while(opt > 2 || opt<=0); return 0; }

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue