Skip to content

Fuhrerbaumanki/LR2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 

Repository files navigation

Лабораторная работа № 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. Канатников А.Н., Крищенко А.П. Аналитическая геометрия.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages