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

UptoLike

Объектно-ориентированное программирование на С++
Матрица является трехдиагональной, если ее ненулевые элементы
расположены только на главной диагонали и на двух соседних,
параллельных ей.
// метод проверки, является ли матрицы трехдиагональной
bool MatrixList::IsTripleDiagonal()
{
// если матрица неквадратная, генерируется исключение
if(m != n)
throw NonSquareMatrixException();
ListElement* exists1;
// в каждой строке проверяется наличие ненулевых
// элементов, расположенных до трех центральных
// диагоналей и после них. Если ненулевой элемент
// будет найден, матрица не является
// трехдиагональной.
for(int i = 0; i < m; i++)
{
for(int j = 0; j < i - 1; j++)
{
exists1 = ExistsElement(i, j);
if(exists1 != NULL)
return false;
}
for(int j = i + 2; j < n; j++)
{
exists1 = ExistsElement(i, j);
if(exists1 != NULL)
return false;
}
}
return true;
}
Для вывода разреженной матрицы используются дружественные
функции, перегружающие операции вывода для классов
MatrixElement, ListElement, MatrixList.
// операции вывода объектов классов
ostream& operator << (ostream& out, MatrixElement& ob)
{
out << ob.value;
return out;
}
ostream& operator << (ostream& out, ListElement& ob)
177
                         Объектно-ориентированное программирование на С++
    Матрица является трехдиагональной, если ее ненулевые элементы
расположены только на главной диагонали и на двух соседних,
параллельных ей.

    // метод проверки, является ли матрицы трехдиагональной
    bool MatrixList::IsTripleDiagonal()
    {
         // если матрица неквадратная, генерируется исключение
         if(m != n)
              throw NonSquareMatrixException();
         ListElement* exists1;
         // в каждой строке проверяется наличие ненулевых
         // элементов, расположенных до трех центральных
         // диагоналей и после них. Если ненулевой элемент
         // будет найден, матрица не является
         // трехдиагональной.
         for(int i = 0; i < m; i++)
         {
              for(int j = 0; j < i - 1; j++)
              {
                   exists1 = ExistsElement(i, j);
                   if(exists1 != NULL)
                        return false;
              }
              for(int j = i + 2; j < n; j++)
              {
                   exists1 = ExistsElement(i, j);
                   if(exists1 != NULL)
                        return false;
              }
         }
         return true;
    }


    Для вывода разреженной матрицы используются дружественные
функции,   перегружающие    операции   вывода   для    классов
MatrixElement, ListElement, MatrixList.

   // операции вывода объектов классов
   ostream& operator << (ostream& out, MatrixElement& ob)
   {
         out << ob.value;
         return out;
   }

   ostream& operator << (ostream& out, ListElement& ob)
                                                                     177