Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 89 стр.

UptoLike

88
// операция сложения двух матриц
public static MatrixList operator+(MatrixList ob1, MatrixList ob2)
{
// матрицы должны иметь одинаковые размеры
if(ob1.m != ob2.m || ob1.n != ob2.n)
throw new BadDimensionException
(ob1.m, ob1.n, ob2.m, ob2.n);
// создается матрица-результат
// как копия первого слагаемого
MatrixList res = new MatrixList(ob1.m, ob1.n);
// вызов метода копирования списка класса List
res.list.AddRange(ob1.list);
res.count = ob1.count;
// просмотр элементов второй матрицы
for (int i = 0; i < ob2.count; i++ )
{
MatrixElement exists = res.ExistsElement
(ob2.list[i].I, ob2.list[i].J);
if (exists != null)
// если в матрице-результате элемент с такими
// индексами уже имеется, суммируем элементы
exists.Value += ob2.list[i].Value;
else
// если в матрице-результате элемент с
// такими индексами не существует,
// добавляем новый элемент в матрицу-результат
res[ob2.list[i].I, ob2.list[i].J] = ob2.list[i].Value;
}
return res;
}
Матрица является трехдиагональной, если ее ненулевые элементы
расположены только на главной диагонали и на двух соседних, параллельных
ей.
// метод проверки, является ли матрицы трехдиагональной
bool IsTripleDiagonal()
{
// если матрица неквадратная, генерируется исключение
if(m != n)
throw new NonSquareMatrixException();
MatrixElement exists1;
// в каждой строке проверяется наличие ненулевых
// элементов, расположенных до трех центральных
// диагоналей и после них. Если ненулевой элемент будет
// найден, матрица не является трехдиагональной.
for(int i = 0; i < m; i++)
{
for(int j = 0; j < i - 1; j++)
{
   // операция сложения двух матриц
   public static MatrixList operator+(MatrixList ob1, MatrixList ob2)
   {
       // матрицы должны иметь одинаковые размеры
       if(ob1.m != ob2.m || ob1.n != ob2.n)
           throw new BadDimensionException
                                  (ob1.m, ob1.n, ob2.m, ob2.n);
       // создается матрица-результат
       // как копия первого слагаемого
       MatrixList res = new MatrixList(ob1.m, ob1.n);
       // вызов метода копирования списка класса List
       res.list.AddRange(ob1.list);
       res.count = ob1.count;
       // просмотр элементов второй матрицы
       for (int i = 0; i < ob2.count; i++ )
       {
           MatrixElement exists = res.ExistsElement
                                  (ob2.list[i].I, ob2.list[i].J);
           if (exists != null)
              // если в матрице-результате элемент с такими
              // индексами уже имеется, суммируем элементы
              exists.Value += ob2.list[i].Value;
           else
              // если в матрице-результате элемент с
              // такими индексами не существует,
              // добавляем новый элемент в матрицу-результат
              res[ob2.list[i].I, ob2.list[i].J] = ob2.list[i].Value;
         }
         return res;
     }

    Матрица является трехдиагональной, если ее ненулевые элементы
расположены только на главной диагонали и на двух соседних, параллельных
ей.

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

                                                                        88