[C++]I need to write a class that solves 3×3 systems of equations (3 equations with 3 unknowns). (This is about Matrices reduced to row echelon form).
The class should be derived from and has a base of the class of HW.1 (So the class that is going to be written inherits from the class that I wrote in my first home work)
Please if anything is unclear, write a comment and I will answer it.
Here’s the link to my code: https://repl.it/KhHC/12
#include <iostream>
using namespace std;
class Matrix{
private :
double A[3][3];
double B[3][3];
double result[3][3];
public :
/*——————————————————-
FUNCTON NAME: input
PARAMETERS:
RETURN TYPE:
DESCRIPTION: Stores user values inside the corresponding arrays to be referenced later
——————————————————-*/
void input(){
cout << “Input 9 elements into your 3×3 matrix A: “;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
cin >> A[i][j];
// terminates function on failure
if(cin.fail()) {
cin.clear();
cin.ignore(100, ‘n’);
cerr << “nERROR: Please enter valid input!n” << endl;
}
}
}
cout << “Input 9 elements into your 3×3 matrix B: “;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
cin >> B[i][j];
// terminates function on failure
if(cin.fail()) {
cin.clear();
cin.ignore(100, ‘n’);
cerr << “nERROR: Please enter valid input!n” << endl;
}
}
}
}
/*——————————————————-
FUNCTON NAME: print
PARAMETERS: result
RETURN TYPE: will output the results of the array calculation
DESCRIPTION: This function will print out the results from the subtraction and addition function
——————————————————-*/
void print(double result[3][3]){
for(int i = 0; i < 3; i++) {
cout << “[“;
for(int j = 0; j < 3; j++) {
cout << result[i][j] << “t”;
}
cout << “]” << endl;
}
}
/*——————————————————-
FUNCTON NAME: printAB
PARAMETERS:
RETURN TYPE:
DESCRIPTION: This function will simply display the Matrices of A and B right after the user has finished their input
——————————————————-*/
void printAB(){
cout<<“nMatrix A :”<<endl;
for(int i = 0; i < 3; i++) {
cout << “[“;
for(int j = 0; j < 3; j++) {
cout << A[i][j] << “t”;
}
cout << “]” << endl;
}
cout<<“nMatrix B :”<<endl;
for(int i = 0; i < 3; i++) {
cout << “[“;
for(int j = 0; j < 3; j++) {
cout << A[i][j] << “t”;
}
cout << “]” << endl;
}
}
/*——————————————————-
FUNCTON NAME: addition
PARAMETERS:
RETURN TYPE:
DESCRIPTION: This function will perform the addition and the print function will output the result
——————————————————-*/
void addition(){
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
result[i][j] = A[i][j] + B[i][j];
}
}
print(result);
}
/*——————————————————-
FUNCTON NAME: subtraction
PARAMETERS:
RETURN TYPE:
DESCRIPTION: This function will perform the subtraction and the print function will output the result
——————————————————-*/
void subtraction(){
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
result[i][j] = A[i][j] – B[i][j];
}
}
print(result);
}
/*——————————————————-
FUNCTON NAME: determinant
PARAMETERS:
RETURN TYPE: determin, an integer
DESCRIPTION: This function will find the determinant
——————————————————-*/
int determinant(){
int determin = 0;
//finding the determinant
for(int i = 0; i < 3; i++)
determin = determin + (A[0][i] * (A[1][(i+1)%3] * A[2][(i+2)%3] – A[1][(i+2)%3] * A[2][(i+1)%3]));
return determin;
}
/*——————————————————-
FUNCTON NAME: inverse
PARAMETERS:
RETURN TYPE:
DESCRIPTION: This function will find the inverse and output the result
——————————————————-*/
void inverse(){
cout <<“nnInverse of Matrix A is: n”;
cout << ” ” << endl;
for(int i = 0; i < 3; i++){
for(int j = 0; j < 3; j++)
cout<< “[” << ((A[(j+1)%3][(i+1)%3] * A[(j+2)%3][(i+2)%3]) – (A[(j+1)%3][(i+2)%3] * A[(j+2)%3][(i+1)%3]))/ determinant()<< “]” << “t”;
cout<<“n”;
}
}
};
//Main function
int main() {
//Initializing Variables; “choice” will initiate a a loop, “input” will come in useful to do a switch statement, and obj will simply create another instance of the original class that can be manipulated
bool choice;
char input;
Matrix obj;
cout << “nWhen filling up matrices, separate individual elements by a space (e.g 2 4 1.4 56.3 …) nn”;
obj.input();
obj.printAB();
//Displaying a menu, so that the user can choose what he wants to do
choice = false;
//The Loop
while(!choice) {
cout << ” ” << endl;
cout <<“** Choose from the following **”<< endl;
cout << ” ” << endl;
cout << “a – Addition” << endl;
cout << “s – Subtraction” << endl;
cout << “d – Determinant” << endl;
cout << “i – Inverse” << endl;
cout << “q – Quit” << endl;
cout << ” ” << endl;
cout << “Note: Choosing ‘i’ or ‘d’ will only apply to Matrix A” << endl;
cout << ” ” << endl;
cout << “Enter your choice: “;
cin >> input;
cout << endl;
//A switch to handle the user inputs
switch(input){
case ‘a’: case ‘A’: obj.addition();
break;
case ‘s’: case ‘S’: obj.subtraction();
break;
case ‘d’|’D’: cout<<“Determinant is : “<<obj.determinant();
cout << ” ” << endl;
break;
case ‘i’: case ‘I’: obj.inverse();
break;
case ‘q’: case ‘Q’: exit(0);
default:cout<<“nERROR: Please enter valid input!nn”;
}
}
return 0;
}