/* Matrix.cpp defined non-trivial Matrix operations
 *  for the Matrix class in Matrix.h
 * Joel Adams, Fall 1997.
 *****************************************************/
 
#include "Matrix.h"
 
Matrix operator*(const Matrix & m1, const Matrix & m2)
{
  assert(m1.myColumns == m2.myRows);
 
  Matrix m3(m1.Rows(), m2.Columns());
 
  double sum;
 
  for (int i = 0; i < m1.Rows(); i++)
    for (int j = 0; j < m2.Columns(); j++)
      {
        sum = 0.0;
 
        for (int k = 0; k < m1.Columns(); k++)
          sum += m1[i][k] * m2[k][j];
 
        m3[i][j] = sum;
      }
 
  return m3;
}
 
void Matrix::Read(istream & in)
{
  for (int r = 0; r < Rows(); r++)
    for (int c = 0; c < Columns(); c++)
      in >> (*this)[r][c];
}
 
void Matrix::Print(ostream & out) const
{
  for (int r = 0; r < Rows(); r++)
    {
      for (int c = 0; c < Columns(); c++)
        out << (*this)[r][c] << '\t';
 
      out << endl;
    }
}

