#include class Matrix3x3 { private: double A[3][3]; friend void operator<<( ostream & output, Matrix3x3 &x ); public: int isSymmetric(double m[3][3]) { int i, j; int sym = 1; for ( i = 0; i < 2; i = i + 1 ) for ( j = i+1; j < 3; j = j + 1 ) if ( m[i][j] != m[j][i] ) return(0); // No // The input matrix passed the symmetry test return(1); } int init(double m[3][3]) { int i, j; if ( ! isSymmetric(m) ) { cout << "Input matrix is NOT symmetric" << endl; for (i = 0; i < 3; i = i + 1) for (j = 0; j < 3; j = j + 1) A[i][j] = 0; return(0); } for ( i = 0; i < 3; i = i + 1 ) for ( j = 0; j < 3; j = j + 1 ) A[i][j] = m[i][j]; return(1); } Matrix3x3 operator*(Matrix3x3 &m) { Matrix3x3 out; int i, j, k; if ( ! isSymmetric(m.A) ) { cout << "Input matrix is NOT symmetric" << endl; for (i = 0; i < 3; i = i + 1) for (j = 0; j < 3; j = j + 1) out.A[i][j] = 0; return(out); } for (i = 0; i < 3; i = i + 1) { for (j = 0; j < 3; j = j + 1) { out.A[i][j] = 0.0; for (k = 0; k < 3; k = k + 1) out.A[i][j] = out.A[i][j] + A[i][k]*m.A[k][j]; } } return(out); } }; void operator<<( ostream & output, Matrix3x3 &x ) { int i, j; for (i = 0; i < 3; i = i + 1) { for (j = 0; j < 3; j = j + 1) output << " " << x.A[i][j]; output << endl; } } int main(int argc, char *argv[]) { Matrix3x3 A, B, C; double p[3][3]; p[0][0] = 1.0; p[0][1] = 0.0; p[0][2] = 1.0; p[1][0] = 0.0; p[1][1] = 1.0; p[1][2] = 1.0; p[2][0] = 1.0; p[2][1] = 1.0; p[2][2] = 0.0; if ( A.init(p) == 0 ) { cout << "Input error, exiting..." << endl; exit(1); } cout << "\nInitial matrix A:" << endl; cout << A; cout << endl; p[0][0] = 1.0; p[0][1] = 0.0; p[0][2] = 2.0; p[1][0] = 0.0; p[1][1] = 1.0; p[1][2] = 1.0; p[2][0] = 2.0; p[2][1] = 1.0; p[2][2] = 0.0; if ( B.init(p) == 0 ) { cout << "Input error, exiting..." << endl; exit(1); } cout << "\nInitial matrix B:" << endl; cout << B; cout << endl; C = A * B; cout << endl << "\nAfter C = A * B, matrix C:" << endl << endl; cout << C; cout << endl; }