#include <iostream>
#include <cmath>
using namespace std;
class MatrixMN {
private:
int m, n;
double** a;
public:
// конструктор
MatrixMN(int rows = 1, int cols = 1) {
m = rows;
n = cols;
a = new double*[m];
for (int i = 0; i < m; i++)
a[i] = new double[n]{0};
}
// деструктор
~MatrixMN() {
for (int i = 0; i < m; i++)
delete[] a[i];
delete[] a;
}
// доступ до елементів
double& at(int i, int j) {
return a[i][j];
}
// перевірка нульової матриці
bool isZero() {
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j] != 0)
return false;
return true;
}
// норма Фробеніуса
double getNorm() {
double s = 0;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
s += a[i][j] * a[i][j];
return sqrt(s);
}
// додавання
MatrixMN add(const MatrixMN& b) {
MatrixMN r(m, n);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
r.a[i][j] = a[i][j] + b.a[i][j];
return r;
}
// +
MatrixMN operator+(const MatrixMN& b) {
return add(b);
}
// -
MatrixMN operator-(const MatrixMN& b) {
MatrixMN r(m, n);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
r.a[i][j] = a[i][j] - b.a[i][j];
return r;
}
// *
MatrixMN operator*(double x) {
MatrixMN r(m, n);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
r.a[i][j] = a[i][j] * x;
return r;
}
// вивід
friend ostream& operator<<(ostream& os, const MatrixMN& mtx) {
for (int i = 0; i < mtx.m; i++) {
for (int j = 0; j < mtx.n; j++)
os << mtx.a[i][j] << " ";
os << endl;
}
return os;
}
};
// ================= MAIN =================
int main() {
MatrixMN A(2, 2);
MatrixMN B(2, 2);
// заповнення A
A.at(0,0) = 1;
A.at(0,1) = 2;
A.at(1,0) = 3;
A.at(1,1) = 4;
// заповнення B
B.at(0,0) = 5;
B.at(0,1) = 6;
B.at(1,0) = 7;
B.at(1,1) = 8;
cout << "Matrix A:\n" << A;
cout << "Matrix B:\n" << B;
cout << "A + B:\n" << (A + B);
cout << "A - B:\n" << (A - B);
cout << "A * 2:\n" << (A * 2);
cout << "Norm of A: " << A.getNorm() << endl;
if (A.isZero())
cout << "A is zero matrix\n";
else
cout << "A is NOT zero matrix\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBNYXRyaXhNTiB7CnByaXZhdGU6CiAgICBpbnQgbSwgbjsKICAgIGRvdWJsZSoqIGE7CgpwdWJsaWM6CiAgICAvLyDQutC+0L3RgdGC0YDRg9C60YLQvtGACiAgICBNYXRyaXhNTihpbnQgcm93cyA9IDEsIGludCBjb2xzID0gMSkgewogICAgICAgIG0gPSByb3dzOwogICAgICAgIG4gPSBjb2xzOwoKICAgICAgICBhID0gbmV3IGRvdWJsZSpbbV07CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspCiAgICAgICAgICAgIGFbaV0gPSBuZXcgZG91YmxlW25dezB9OwogICAgfQoKICAgIC8vINC00LXRgdGC0YDRg9C60YLQvtGACiAgICB+TWF0cml4TU4oKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspCiAgICAgICAgICAgIGRlbGV0ZVtdIGFbaV07CiAgICAgICAgZGVsZXRlW10gYTsKICAgIH0KCiAgICAvLyDQtNC+0YHRgtGD0L8g0LTQviDQtdC70LXQvNC10L3RgtGW0LIKICAgIGRvdWJsZSYgYXQoaW50IGksIGludCBqKSB7CiAgICAgICAgcmV0dXJuIGFbaV1bal07CiAgICB9CgogICAgLy8g0L/QtdGA0LXQstGW0YDQutCwINC90YPQu9GM0L7QstC+0Zcg0LzQsNGC0YDQuNGG0ZYKICAgIGJvb2wgaXNaZXJvKCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykKICAgICAgICAgICAgICAgIGlmIChhW2ldW2pdICE9IDApCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vINC90L7RgNC80LAg0KTRgNC+0LHQtdC90ZbRg9GB0LAKICAgIGRvdWJsZSBnZXROb3JtKCkgewogICAgICAgIGRvdWJsZSBzID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG07IGkrKykKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspCiAgICAgICAgICAgICAgICBzICs9IGFbaV1bal0gKiBhW2ldW2pdOwoKICAgICAgICByZXR1cm4gc3FydChzKTsKICAgIH0KCiAgICAvLyDQtNC+0LTQsNCy0LDQvdC90Y8KICAgIE1hdHJpeE1OIGFkZChjb25zdCBNYXRyaXhNTiYgYikgewogICAgICAgIE1hdHJpeE1OIHIobSwgbik7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKQogICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG47IGorKykKICAgICAgICAgICAgICAgIHIuYVtpXVtqXSA9IGFbaV1bal0gKyBiLmFbaV1bal07CgogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIC8vICsKICAgIE1hdHJpeE1OIG9wZXJhdG9yKyhjb25zdCBNYXRyaXhNTiYgYikgewogICAgICAgIHJldHVybiBhZGQoYik7CiAgICB9CgogICAgLy8gLQogICAgTWF0cml4TU4gb3BlcmF0b3ItKGNvbnN0IE1hdHJpeE1OJiBiKSB7CiAgICAgICAgTWF0cml4TU4gcihtLCBuKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICAgICAgci5hW2ldW2pdID0gYVtpXVtqXSAtIGIuYVtpXVtqXTsKCiAgICAgICAgcmV0dXJuIHI7CiAgICB9CgogICAgLy8gKgogICAgTWF0cml4TU4gb3BlcmF0b3IqKGRvdWJsZSB4KSB7CiAgICAgICAgTWF0cml4TU4gcihtLCBuKTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspCiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICAgICAgci5hW2ldW2pdID0gYVtpXVtqXSAqIHg7CgogICAgICAgIHJldHVybiByOwogICAgfQoKICAgIC8vINCy0LjQstGW0LQKICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBNYXRyaXhNTiYgbXR4KSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdHgubTsgaSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbXR4Lm47IGorKykKICAgICAgICAgICAgICAgIG9zIDw8IG10eC5hW2ldW2pdIDw8ICIgIjsKICAgICAgICAgICAgb3MgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9zOwogICAgfQp9OwoKLy8gPT09PT09PT09PT09PT09PT0gTUFJTiA9PT09PT09PT09PT09PT09PQppbnQgbWFpbigpIHsKICAgIE1hdHJpeE1OIEEoMiwgMik7CiAgICBNYXRyaXhNTiBCKDIsIDIpOwoKICAgIC8vINC30LDQv9C+0LLQvdC10L3QvdGPIEEKICAgIEEuYXQoMCwwKSA9IDE7CiAgICBBLmF0KDAsMSkgPSAyOwogICAgQS5hdCgxLDApID0gMzsKICAgIEEuYXQoMSwxKSA9IDQ7CgogICAgLy8g0LfQsNC/0L7QstC90LXQvdC90Y8gQgogICAgQi5hdCgwLDApID0gNTsKICAgIEIuYXQoMCwxKSA9IDY7CiAgICBCLmF0KDEsMCkgPSA3OwogICAgQi5hdCgxLDEpID0gODsKCiAgICBjb3V0IDw8ICJNYXRyaXggQTpcbiIgPDwgQTsKICAgIGNvdXQgPDwgIk1hdHJpeCBCOlxuIiA8PCBCOwoKICAgIGNvdXQgPDwgIkEgKyBCOlxuIiA8PCAoQSArIEIpOwogICAgY291dCA8PCAiQSAtIEI6XG4iIDw8IChBIC0gQik7CiAgICBjb3V0IDw8ICJBICogMjpcbiIgPDwgKEEgKiAyKTsKCiAgICBjb3V0IDw8ICJOb3JtIG9mIEE6ICIgPDwgQS5nZXROb3JtKCkgPDwgZW5kbDsKCiAgICBpZiAoQS5pc1plcm8oKSkKICAgICAgICBjb3V0IDw8ICJBIGlzIHplcm8gbWF0cml4XG4iOwogICAgZWxzZQogICAgICAgIGNvdXQgPDwgIkEgaXMgTk9UIHplcm8gbWF0cml4XG4iOwoKICAgIHJldHVybiAwOwp9Cg==