- Создать класс
Vector
вещественных векторов, реализующий следующие операции:
- конструктор, принимающий размер вектора и начальное значение элементов (по умолчанию принять 0);
- копирующий конструктор;
- деструктор;
- операторы:
=
,+=
,-=
,+
(бинарный и унарный),-
(бинарный и унарный),*
(произведение вектора на число, на вектор (скалярно), на матрицу, а также произведение числа на вектор),[]
,<<
,>>
, оператор приведения типа к указателю на double; - метод вычисления длины вектора;
- метод, возвращающий размерность вектора.
- Создать класс вещественных матриц (вариант 1 - нечетные номера в журнале; вариант 2 - четные номера в журнале) [1]:
Вариант 1 – несимметричные разреженные матрицы, формат хранения CSR [1] (класс CSRMatrix
):
- конструктор, принимающий необходимые массивы (данные необходимо скопировать во внутренние массивы);
- деструктор;
- операторы умножения * матрицы на число и вектор [1], а также числа на матрицу;
- операторы считывания из потока (
>>
) для инициализации внутренних массивов и форматированного вывода в поток (<<
); - методы, возвращающие размерность матрицы и количество ненулевых элементов;
Вариант 2 – симметричные разреженные матрицы, формат хранения CSLR [1] (класс CSLRMatrix
):
- требования те же, что и для варианта 1.
- Для классов вектора и матрицы создать класс исключения OutOfRangeException, который наследуется от стандартного класса std::exception (располагается в файле exception.h), переопределяет метод what() и выводит сообщение, описывающее суть ошибки. Аналогично, создать класс исключения IncompatibleDimException для обработки ошибок, связанных с выполнением операций над матрицами и векторами с некорректными размерностями.
- Для внутренних массивов использовать тип
double
. - Для заполнения вектора использовать оператор
[]
. Передача динамических массивов в конструктор вектора не допускается. Для инициализации матриц передача массивов в конструктор допускается. - Подумать, какие из функций реализовать в виде членов класса, какие в виде дружественных функций и какие в виде обычных функций.
- Использование операций чтения и записи из потоков в методах классов вектора и матрицы не допускается за исключением операторов
<<
и>>
. - Разбить программу на отдельные .h/.cpp файлы.
- В файле Main.cpp в функции main привести тесты всех операций с выводом названий операций на консоль.
- Выполнить тестирование методов с использование сложных выражений, включающих разные операции, например:
Vector res = - c1 * m1 * (v1 - c2 * v2) + v3 * c3
- Баландин М.Ю., Шурина Э.П. Методы решения СЛАУ большой размерности.
- Канатников А.Н., Крищенко А.П. Аналитическая геометрия.