Объектно-ориентированное программирование на C++. Андрианова А.А - 220 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
// оператор траспонирования матрицы
template <class T> Matrix<T> Matrix<T>::operator !()
{
Matrix<T> temp(n, m);
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
temp.a[j][i] = a[i][j];
return temp;
}
// функция получения подматрицы путем вычеркиванмя строки
// с номером i1 и столбца с номером j1
template <class T>
Matrix<T> Matrix<T>::SubMatrix(int i1,int j1)
{
Matrix<T> temp(m - 1, n - 1);
for(int i = 0; i < i1; i++)
{
for(int j = 0; j < j1; j++)
temp.a[i][j] = a[i][j];
for(int j = j1 + 1; j < n; j++)
temp.a[i][j - 1] = a[i][j];
}
for(int i = i1 + 1; i < m; i++)
{
for(int j = 0; j < j1; j++)
temp.a[i - 1][j] = a[i][j];
for(int j = j1 + 1; j < n; j++)
temp.a[i - 1][j - 1] = a[i][j];
}
return temp;
}
// функция вычисления определителя матрицы
template <class T> T Matrix<T>::Determinant()
{
T det = 0;
if(m != n)
throw NonSquareMatrixException();
if(n == 1)
return a[0][0];
Matrix<T> temp(m - 1, n - 1);
for(int j = 0; j < n; j++)
{
temp = SubMatrix(0, j);
if(j % 2 == 0)
det = det + temp.Determinant() * a[0][j];
else
det = det - temp.Determinant() * a[0][j];
220
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
      // оператор траспонирования матрицы
      template  Matrix Matrix::operator !()
      {
           Matrix temp(n, m);
           for(int i = 0; i < m; i++)
                for(int j = 0; j < n; j++)
                     temp.a[j][i] = a[i][j];
           return temp;
      }

      // функция получения подматрицы путем вычеркиванмя строки
      // с номером i1 и столбца с номером j1
      template 
      Matrix Matrix::SubMatrix(int i1,int j1)
      {
           Matrix temp(m - 1, n - 1);
           for(int i = 0; i < i1; i++)
           {
                for(int j = 0; j < j1; j++)
                     temp.a[i][j] = a[i][j];
                for(int j = j1 + 1; j < n; j++)
                     temp.a[i][j - 1] = a[i][j];
           }
           for(int i = i1 + 1; i < m; i++)
           {
                for(int j = 0; j < j1; j++)
                     temp.a[i - 1][j] = a[i][j];
                for(int j = j1 + 1; j < n; j++)
                     temp.a[i - 1][j - 1] = a[i][j];
           }
           return temp;
      }

      // функция вычисления определителя матрицы
      template  T Matrix::Determinant()
      {
           T det = 0;
           if(m != n)
                throw NonSquareMatrixException();
           if(n == 1)
                     return a[0][0];
           Matrix temp(m - 1, n - 1);
           for(int j = 0; j < n; j++)
           {
                temp = SubMatrix(0, j);
                if(j % 2 == 0)
                     det = det + temp.Determinant() * a[0][j];
                else
                     det = det - temp.Determinant() * a[0][j];

220