Skip to content

Latest commit

 

History

History
46 lines (33 loc) · 4.72 KB

README.md

File metadata and controls

46 lines (33 loc) · 4.72 KB

Лабораторная работа № 2 «Классы, перегрузка операций и исключения»

Задача

  1. Создать класс Vector вещественных векторов, реализующий следующие операции:
  • конструктор, принимающий размер вектора и начальное значение элементов (по умолчанию принять 0);
  • копирующий конструктор;
  • деструктор;
  • операторы: =, +=, -=, + (бинарный и унарный), - (бинарный и унарный), * (произведение вектора на число, на вектор (скалярно), на матрицу, а также произведение числа на вектор), [], <<, >>, оператор приведения типа к указателю на double;
  • метод вычисления длины вектора;
  • метод, возвращающий размерность вектора.
  1. Создать класс вещественных матриц (вариант 1 - нечетные номера в журнале; вариант 2 - четные номера в журнале) [1]:

Вариант 1 – несимметричные разреженные матрицы, формат хранения CSR [1] (класс CSRMatrix):

  • конструктор, принимающий необходимые массивы (данные необходимо скопировать во внутренние массивы);
  • деструктор;
  • операторы умножения * матрицы на число и вектор [1], а также числа на матрицу;
  • операторы считывания из потока (>>) для инициализации внутренних массивов и форматированного вывода в поток (<<);
  • методы, возвращающие размерность матрицы и количество ненулевых элементов;

Вариант 2 – симметричные разреженные матрицы, формат хранения CSLR [1] (класс CSLRMatrix):

  • требования те же, что и для варианта 1.
  1. Для классов вектора и матрицы создать класс исключения OutOfRangeException, который наследуется от стандартного класса std::exception (располагается в файле exception.h), переопределяет метод what() и выводит сообщение, описывающее суть ошибки. Аналогично, создать класс исключения IncompatibleDimException для обработки ошибок, связанных с выполнением операций над матрицами и векторами с некорректными размерностями.

Требования:

  1. Для внутренних массивов использовать тип double.
  2. Для заполнения вектора использовать оператор []. Передача динамических массивов в конструктор вектора не допускается. Для инициализации матриц передача массивов в конструктор допускается.
  3. Подумать, какие из функций реализовать в виде членов класса, какие в виде дружественных функций и какие в виде обычных функций.
  4. Использование операций чтения и записи из потоков в методах классов вектора и матрицы не допускается за исключением операторов << и >>.
  5. Разбить программу на отдельные .h/.cpp файлы.
  6. В файле Main.cpp в функции main привести тесты всех операций с выводом названий операций на консоль.
  7. Выполнить тестирование методов с использование сложных выражений, включающих разные операции, например:

Vector res = - c1 * m1 * (v1 - c2 * v2) + v3 * c3

Литература

  1. Баландин М.Ю., Шурина Э.П. Методы решения СЛАУ большой размерности.
  2. Канатников А.Н., Крищенко А.П. Аналитическая геометрия.