#include class myMatrix3x3 { public: double A[3][3]; }; 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; myMatrix3x3 *m; m = (myMatrix3x3 *) &A; m->A[0][0] = 1.0; m->A[0][1] = 2.0; m->A[0][2] = 3.0; m->A[1][0] = 0.0; m->A[1][1] = 1.0; m->A[1][2] = 1.0; m->A[2][0] = 1.0; m->A[2][1] = 1.0; m->A[2][2] = 0.0; cout << "\nInitial matrix A:" << endl; cout << A; cout << endl; }