StoneHaos

misha4

Dec 7th, 2020
609
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. class Matrix {
  7. public:
  8.     int size;
  9.     vector<vector<int>> m;
  10.     Matrix() {
  11.         this->size = 0;
  12.     }
  13.     Matrix(vector<vector<int>> m) {
  14.         int n = m.size();
  15.         for (int i = 0; i < n; ++ i) {
  16.             if (m[i].size() != n) {
  17.                 n = -1;
  18.                 break;
  19.             }
  20.         }
  21.         if (n == -1) {
  22.             cout << "Init Error\n";
  23.             this->size = 0;
  24.         }
  25.         else {
  26.             this->size = m.size();
  27.             this->m = m;
  28.         }
  29.     }
  30.  
  31.     void print() {
  32.         for (int i = 0; i < this->size; ++ i) {
  33.             for (int j = 0; j < this->size; ++ j)
  34.                 cout << this->m[i][j] << " ";
  35.             cout << endl;
  36.         }
  37.     }
  38.  
  39.     bool sim() {
  40.         for (int i = 0; i < size; ++ i) {
  41.             for (int j = 0; j < size; ++ j) {
  42.                 if (m[i][j] != m[j][i])
  43.                     return false;
  44.             }
  45.         }
  46.         return true;
  47.     }
  48.  
  49.     ~Matrix() {}
  50.  
  51.     Matrix operator+(Matrix M) {
  52.         if (this->size != M.size) {
  53.             cout << "op+ Error\n";
  54.             return Matrix();
  55.         }
  56.         for (int i = 0; i < this->size; ++ i)
  57.             for (int j = 0; j < this->size; ++ j)
  58.                 this->m[i][j] += M.m[i][j];
  59.         return Matrix(this->m);
  60.     }
  61.  
  62.     Matrix operator-(Matrix M) {
  63.         if (this->size != M.size) {
  64.             cout << "op- Error\n";
  65.             return Matrix();
  66.         }
  67.         for (int i = 0; i < this->size; ++ i)
  68.             for (int j = 0; j < this->size; ++ j)
  69.                 this->m[i][j] -= M.m[i][j];
  70.         return Matrix(this->m);
  71.     }
  72.  
  73.     Matrix operator*(Matrix M) {
  74.         if (this->size != M.size) {
  75.             cout << "op* Error\n";
  76.             return Matrix();
  77.         }
  78.         vector<vector<int>> m;
  79.         for (int i = 0; i < this->size; ++ i) {
  80.             m.push_back(vector<int>());
  81.             for (int j = 0; j < this->size; ++ j) {
  82.                 int s = 0;
  83.                 for (int k = 0; k < this->size; ++ k)
  84.                     s += this->m[i][k] * M.m[k][j];
  85.                 m[i].push_back(s);
  86.             }
  87.         }
  88.         return Matrix(m);
  89.     }
  90.  
  91.     Matrix operator*=(int n) {
  92.         vector<vector<int>> m = this->m;
  93.         for (int i = 0; i < this->size; ++ i)
  94.             for (int j = 0; j < this->size; ++ j)
  95.                 m[i][j] *= n;
  96.         return Matrix(m);
  97.     }
  98. };
  99.  
  100. int main(void) {
  101.     int n = 3;
  102.     vector<vector<int>> v1(n, vector<int>(n)), v2(n, vector<int>(n));
  103.     v1[0][0] = 2;
  104.     v1[0][1] = 3;
  105.     v1[0][2] = 4;
  106.  
  107.     v1[1][0] = 1;
  108.     v1[1][1] = -2;
  109.     v1[1][2] = 0;
  110.  
  111.     v1[2][0] = 0;
  112.     v1[2][1] = 1;
  113.     v1[2][2] = 2;
  114.  
  115.     v2[0][0] = 2;
  116.     v2[0][1] = 0;
  117.     v2[0][2] = -2;
  118.  
  119.     v2[1][0] = 1;
  120.     v2[1][1] = 1;
  121.     v2[1][2] = 0;
  122.  
  123.     v2[2][0] = 1;
  124.     v2[2][1] = -1;
  125.     v2[2][2] = 1;
  126.  
  127.     Matrix a(v1), b(v2), x;
  128.     x = (a *= 2) * (a + b) - (a *= 3) * b;
  129.     x.print();
  130.     return 0;
  131. }
RAW Paste Data