Завершено
3
18.04.2024, 11:27
22.04.2024, 09:25
Реализовать класс Matrix для работы с матрицами NxM.
Реализовать класс Matrix в соответствии с указанным интерфейсом.
public и protected методы классов фиксированы,
кроме спецификаторов.
Т.е. нельзя менять названия методов, а также типы и количество аргументов.
НО в этих методах отсутствуют спецификаторы const и static,
которые были удалены намеренно. Их необходимо вернуть на место.
private поля и private методы можно добавлять в класс Matrix.
//Matrix.hpp
class Matrix final {
public:
Matrix();
Matrix(size_t cols);
Matrix(size_t rows, size_t cols);
~Matrix();
Matrix(const Matrix& mat);
Matrix operator*(const Matrix& mat);
Matrix operator-(const Matrix& mat);
Matrix operator+(const Matrix& mat);
Matrix operator*(double value);
Matrix operator/(double value);
Matrix& operator=(const Matrix& mat);
Matrix& operator*=(const Matrix& mat);
Matrix& operator+=(const Matrix& mat);
Matrix& operator-=(const Matrix& mat);
Matrix& operator*=(double value);
Matrix& operator/=(double value);
bool isValid();
void resize(size_t rows, size_t cols);
const double& coeffRef(size_t rowIdx, size_t colIdx) const;
double& coeffRef(size_t rowIdx, size_t colIdx);
const double* data() const;
double* data();
size_t rows();
size_t cols();
Matrix& setIdentity();
Matrix& setZero();
Matrix& setConstants(double value);
Matrix& setIdentity(size_t rows, size_t cols);
Matrix& setZero(size_t rows, size_t cols);
Matrix& setConstants(size_t rows, size_t cols, double value);
Matrix transpose();
Matrix inverse();
double det();
Matrix identity(size_t rows, size_t cols);
Matrix zeros(size_t rows, size_t cols);
Matrix constants(size_t rows, size_t cols, double value);
friend Matrix operator*(double value, const Matrix& mat);
};
Matrix() -- конструктор по умолчанию.
Matrix(size_t cols) -- конструктор
для создания вектор (матрицы с одной строкой).
cols -- размер вектора.
Matrix(size_t rows, size_t cols) -- конструктор с параметрами.
rows -- количество строк, cols -- количество столбцов.
~Matrix() -- деструктор.
Matrix(const Matrix& mat) -- конструктор копий.
Выполняет полное копирование матрицы.
operator*(const Matrix& mat) -- оператор умножения матриц.
При невозможности выполнения операции возвращает Matrix().
operator-(const Matrix& mat) -- оператор вычитания матриц.
При невозможности выполнения операции возвращает Matrix().
operator+(const Matrix& mat) -- оператор сложения матриц.
При невозможности выполнения операции возвращает Matrix().
operator*(double value) -- оператор умножения на число.
operator/(double value) -- оператор деления на число.
operator=(const Matrix& mat) -- оператор присваивания.
Выполняет полное копирование матрицы.
operator*=(const Matrix& mat) -- совмещенный оператор умножения и присваивания.
При невозможности выполнения операции объект, который вызывал данный оператор становится невалидным.
Т.е. при вызове метода isValid(), он вернет false.
operator+=(const Matrix& mat) -- совмещенный оператор сложения и присваивания.
При невозможности выполнения операции объект, который вызывал данный оператор становится невалидным.
Т.е. при вызове метода isValid(), он вернет false.
operator-=(const Matrix& mat) -- совмещенный оператор вычитания и присваивания.
При невозможности выполнения операции объект, который вызывал данный оператор становится невалидным.
Т.е. при вызове метода isValid(), он вернет false.
operator*=(double value) -- совмещенный оператор умножения на число и присваивания.
operator/=(double value) -- совмещенный оператор деления на число и присваивания.
isValid() -- проверка матрицы на валидность. Если матрица невалидна, то метод возвращает
false, иначе true. Для пустой матрицы: isValid() == false.
resize(size_t rows, size_t cols) -- меняет размер матрицы.
coeffRef(size_t rowIdx, size_t colIdx) const -- доступ к элементу (i, j).
Возвращает константную ссылку на элемент матрицы. При выходе за границу матрицы кидаем
exception: throw std::out_of_range("message");.
coeffRef(size_t rowIdx, size_t colIdx) -- доступ к элементу (i, j).
Возвращает ссылку на элемент матрицы. При выходе за границу матрицы кидаем
exception: throw std::out_of_range("message");.
data() const -- возвращает указатель на константные элементы матрицы.
data() -- возвращает указатель на элементы матрицы.
rows() -- возвращает общее количество строк в матрице.
cols() -- возвращает общее количество столбцов в матрице.
setIdentity() -- делает матрицу единичной. Возвращает ссылку на объект,
вызвавший этот метод.
setZero() -- заполняет матрицу нулями. Возвращает ссылку на объект,
вызвавший этот метод.
setConstants(double value) -- заполняет матрицу
константными значениями value. Возвращает ссылку на объект, вызвавший этот метод.
setIdentity(size_t rows, size_t cols) -- задает новый размер матрице и
делает матрицу единичной. Возвращает ссылку на объект, вызвавший этот метод.
setZero(size_t rows, size_t cols) -- задает новый размер матрице и
заполняет матрицу нулями. Возвращает ссылку на объект, вызвавший этот метод.
setConstants(size_t rows, size_t cols, double value) -- задает новый размер матрице и
заполняет матрицу константными значениями value.
Возвращает ссылку на объект, вызвавший этот метод.
transpose() -- транспонирует матрицу.
inverse() -- вычисляет обратную матрицу. При невозможности выполнения операции
метод возвращает Matrix().
det() -- вычисляет определитель матрицы. При невозможности выполнения операции
метод возвращает NAN.
identity(size_t rows, size_t cols) -- создает новую матрицу и
делает матрицу единичной. Возвращает созданную матрицу.
zero(size_t rows, size_t cols) -- создает новую матрицу и
заполняет матрицу нулями. Возвращает созданную матрицу.
constants(size_t rows, size_t cols, double value) -- создает новую матрицу и
заполняет матрицу константными значениями value.
Возвращает созданную матрицу.
operator*(double value, const Matrix& mat) -- оператор умножения числа на матрицу.
Т.е. левым операндом является число, а не матрица.
public методам, класса Matrix,
необходимо добавить спецификаторы static и const.
Но только в те места, где это необходимо.public и protected методы классов фиксированы, кроме спецификаторов.
Т.е. нельзя менять названия методов, а также типы и количество аргументов.Matrix.hpp, Matrix.cpp.