Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.41 KB | None | 0 0
  1. #include "iostream"
  2.  
  3. using namespace std;
  4.  
  5. class matrix {
  6.     friend matrix operator+(matrix m1, matrix m2) {
  7.         if (m1.rows != m2.rows || m1.columns != m2.columns) throw Bad_size();
  8.         matrix m(m1.rows, m1.columns);
  9.         for (int i = 0; i < m.rows; i++)
  10.         {
  11.             for (int j = 0; j < m.columns; j++)
  12.             {
  13.                 m.elements[i][j] = m1.elements[i][j] + m2.elements[i][j];
  14.             }
  15.         }
  16.         return m;
  17.     }
  18.     friend matrix operator-(matrix m1, matrix m2) {
  19.         if (m1.rows != m2.rows || m1.columns != m2.columns) throw Bad_size();
  20.         matrix m(m1.rows, m1.columns);
  21.         for (int i = 0; i < m.rows; i++)
  22.         {
  23.             for (int j = 0; j < m.columns; j++)
  24.             {
  25.                 m.elements[i][j] = m1.elements[i][j] - m2.elements[i][j];
  26.             }
  27.         }
  28.         return m;
  29.     }
  30.     friend matrix operator*(matrix m1, matrix m2) {
  31.         if (m1.columns != m2.rows) throw Bad_size();
  32.         matrix m(m1.rows, m2.columns);
  33.         double temp = 0;
  34.         for (int i = 0; i < m1.rows; i++)
  35.         {
  36.             for (int j = 0; j < m2.rows; j++)
  37.             {
  38.                 for (int k = 0; k < m2.rows; k++)
  39.                 {
  40.                     temp += m1.elements[i][k] * m2.elements[k][j];
  41.                 }
  42.                 m.add(temp);
  43.                 temp = 0;
  44.             }
  45.         }
  46.         return m;
  47.     }
  48.     double & operator() (int i, int j)const {
  49.         return elements[i][j];
  50.     }
  51.     friend istream& operator >> (istream& in, matrix& m) {
  52.         for (int i = 0; i < m.rows; i++)
  53.         {
  54.             for (int j = 0; j < m.columns; j++)
  55.             {
  56.                 in >> m(i, j);
  57.             }
  58.         }
  59.         return in;
  60.     }
  61.     friend ostream& operator << (ostream& out, const matrix& m) {
  62.         for (int i = 0; i < m.rows; i++)
  63.         {
  64.             for (int j = 0; j < m.columns; j++)
  65.             {
  66.                 int k = m.elements[i][j];
  67.                 out << m.elements[i][j] << " ";
  68.             }
  69.             out << endl;
  70.         }
  71.         return out;
  72.     }
  73.  
  74. public:
  75.     matrix() {
  76.  
  77.     }
  78.     matrix(int r, int c) {
  79.         rows = r;
  80.         columns = c;
  81.         curr_row = 0;
  82.         curr_column = 0;
  83.  
  84.         elements = new double*[rows];
  85.         for (int i = 0; i < rows; i++)
  86.         {
  87.             elements[i] = new double[columns];
  88.         }
  89.  
  90.     }
  91.     //~matrix() {
  92.     //  for (int i = 0; i < rows; i++)
  93.     //  {
  94.     //      delete[] elements[i];
  95.     //  }
  96.     //  delete[] elements;
  97.     //}
  98.     class Bad_size{};
  99.     int rows, columns;
  100.     double** elements;
  101.     int curr_row, curr_column;
  102.     void add(double value) {
  103.         elements[curr_row][curr_column] = value;
  104.         if (curr_column + 1 >= columns) { curr_column = 0; curr_row++; }
  105.         else curr_column++;
  106.     }
  107. };
  108.  
  109. void main() {
  110.     matrix m1(2, 2);
  111.     cin >> m1;
  112.     cout << m1;
  113.     matrix m2(2, 2);
  114.     cin >> m2;
  115.     cout << m2;
  116.     matrix m3 = m1 + m2;
  117.     cout << m3;
  118.     system("pause");
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement