// matrix1.cpp - The implementation of the class matrix.
// Written by Wayne Pollock, Tampa FL, 2000.

#include <iostream>
#include <iomanip>
#include "matrix1.h"

using namespace std;

matrix::matrix ()
{  for ( int i = 0; i < dim; ++i )
      for ( int j = 0; j < dim; ++j )
         rep[i][j] = 0;
}

matrix::matrix ( int m[dim][dim] )
{  for ( int i = 0; i < dim; ++i )
      for ( int j = 0; j < dim; ++j )
         rep[i][j] = m[i][j];
}

matrix::matrix ( const matrix& mat )
{  for ( int i = 0; i < dim; ++i )
      for ( int j = 0; j < dim; ++j )
         rep[i][j] = mat.rep[i][j];
}

matrix& matrix::operator= ( const matrix& mat )
{  for ( int i = 0; i < dim; ++i )
      for ( int j = 0; j < dim; ++j )
         rep[i][j] = mat.rep[i][j];
   return *this;
}

void matrix::print () const
{  cout << endl << "  {" << endl;
   for ( int i = 0; i < dim; ++i )
   {  cout << "     ";
      for ( int j = 0; j < dim; ++j )
         cout << setw( 2 ) << rep[i][j] << ", ";
      cout << endl;
   }
   cout << "  }" << endl;
}

matrix matrix::operator+ ( const matrix& mat ) const
{  matrix temp = mat;
   for ( int i=0; i<dim; ++i )
      for ( int j=0; j<dim; ++j )
         temp.rep[i][j] += rep[i][j];
   return temp;
}

matrix matrix::operator* ( const matrix& mat ) const
{  matrix temp;
   for ( int i=0; i<dim; ++i )
      for ( int j=0; j<dim; ++j )
      {  temp.rep[i][j] = 0;
         for ( int k=0; k<dim; ++k )
            temp.rep[i][j] += rep[i][k] * mat.rep[k][j];
      }
   return temp;
}
