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

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
// адрес, в противном случае exists
// остается равным NULL
if (current != NULL && current->a.i == i &&
current->a.j == j)
exists = current;
return exists;
}
Сложение двух матриц заключается в создании нового списка на
основании двух существующих. Если оба исходных списка содержат
элементы с одинаковыми индексами, сумма их значений образует
соответствующий элемент нового списка. Остальные элементы обоих
списков просто дублируются в новом.
// операция сложения двух матриц
MatrixList MatrixList::operator+(MatrixList& ob)
{
// матрицы должны иметь одинаковые размеры
if(m != ob.m || n != ob.n)
throw BadDimensionException(m, n,ob.m, ob.n);
// создается матрица-результат
// как копия первого слагаемого
MatrixList temp(*this);
ListElement* current = ob.head;
ListElement* exists;
// просмотр элементов второй матрицы
while (current != NULL)
{
exists = temp.ExistsElement(current->a.i,
current->a.j);
if (exists != NULL)
// если в матрице-результате элемент
// с такими индексами уже имеется,
// суммируем элементы
exists->a.value += current->a.value;
else
// если в матрице-результате элемент с
// такими индексами не существует,
// добавляем новый элемент
// в матрицу-результат
temp.AddElement(current-> a.i, current->a.j,
current->a.value);
current = current->next;
}
return temp;
}
176
                              Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
          // адрес, в противном случае exists
          // остается равным NULL
          if (current != NULL && current->a.i == i &&
                                         current->a.j == j)
               exists = current;
          return exists;
      }

    Сложение двух матриц заключается в создании нового списка на
основании двух существующих. Если оба исходных списка содержат
элементы с одинаковыми индексами, сумма их значений образует
соответствующий элемент нового списка. Остальные элементы обоих
списков просто дублируются в новом.
      // операция сложения двух матриц
      MatrixList MatrixList::operator+(MatrixList& ob)
      {
           // матрицы должны иметь одинаковые размеры
           if(m != ob.m || n != ob.n)
                throw BadDimensionException(m, n,ob.m, ob.n);
           // создается матрица-результат
           // как копия первого слагаемого
           MatrixList temp(*this);
           ListElement* current = ob.head;
           ListElement* exists;
           // просмотр элементов второй матрицы
           while (current != NULL)
           {
                exists = temp.ExistsElement(current->a.i,
                                              current->a.j);
                if (exists != NULL)
                     // если в матрице-результате элемент
                     // с такими индексами уже имеется,
                     // суммируем элементы
                     exists->a.value += current->a.value;
                else
                     // если в матрице-результате элемент с
                     // такими индексами не существует,
                     // добавляем новый элемент
                     // в матрицу-результат
                     temp.AddElement(current-> a.i, current->a.j,
                          current->a.value);
                current = current->next;
           }
           return temp;
      }




176