Advertisement
thezxtreme

Untitled

Jun 4th, 2020
741
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.45 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class Matrix
  4. {
  5.     protected:
  6.         int** matrix = nullptr; int rows = 0x0, columns = 0x0;
  7.  
  8.     public:
  9.         Matrix(const int _row_size, const int _column_size) : rows(_row_size), columns(_column_size) { Matrix::resize(_row_size, _column_size); }
  10.  
  11.         virtual void set_value(int _row, int _column, int _value) = 0;
  12.         virtual int get_value(int _row, int _column) = 0;
  13.  
  14.         auto resize(const int row, const int column) -> void
  15.         {
  16.             matrix = new int*[row];
  17.             for(int i(0x0); i != row; ++i)
  18.                 matrix[i] = new int[column];
  19.  
  20.             Matrix::reset();
  21.         }
  22.  
  23.         auto reset() -> void
  24.         {
  25.             for (int i(0x0); i != rows; ++i)
  26.                 for (int j(0x0); j != columns; ++j)
  27.                     matrix[i][j] = 0x0;
  28.         }
  29.  
  30.         auto print() const -> void
  31.         {
  32.             for (int i(0x0); i != rows; ++i)
  33.             {
  34.                 std::cout << "Row: " << i << ": ";
  35.  
  36.                 for (int j(0x0); j != columns; ++j)
  37.                     std::cout << matrix[i][j] << " ";
  38.                 std::cout << std::endl;
  39.             }
  40.             std::cout << std::endl;
  41.         }
  42. };
  43.  
  44. class Sparse : public Matrix
  45. {
  46.     public:
  47.         Sparse(const int _row_size, const int _column_size) : Matrix(_row_size, _column_size) {}
  48.  
  49.         auto set_value(int _row, int _column, int _value) -> void override
  50.         {
  51.             matrix[_row][_column] = _value;
  52.         }
  53.  
  54.         auto get_value(int _row, int _column) -> int override
  55.         {
  56.             /* Find how many elements are not zero. */
  57.             uint16_t counter = 0x0;
  58.             for (int i(0x0); i != rows; ++i)
  59.                 for (int j(0x0); j != columns; ++j)
  60.                     if (matrix[i][j] != 0x0)
  61.                         ++counter;
  62.  
  63.             /* Create new matrix on heap. */
  64.             int** data = new int*[0x3];
  65.             for(int i(0x0); i != 0x3; ++i)
  66.                 data[i] = new int[counter];
  67.  
  68.             /* Copy values from base class matrix to data matrix. */
  69.             int row_insert = 0x0;
  70.             for (int i(0x0); i != rows; ++i)
  71.             {
  72.                 for (int j(0x0); j != columns; ++j)
  73.                 {
  74.                     if (matrix[i][j] != 0x0)
  75.                     {
  76.                         data[row_insert][0x0] = i;
  77.                         data[row_insert][0x1] = j;
  78.                         data[row_insert][0x2] = matrix[i][j];
  79.                         row_insert++;
  80.                     }
  81.                 }
  82.             }
  83.  
  84.             /* Now update base class members. */
  85.             matrix = data;
  86.             rows = counter;
  87.             columns = 3;
  88.  
  89.             return 0; //logic here...
  90.         }
  91. };
  92.  
  93. class Dense : public Matrix
  94. {
  95.     public:
  96.         Dense(const int _row_size, const int _column_size) : Matrix(_row_size, _column_size) {}
  97.  
  98.         auto set_value(int _row, int _column, int _value) -> void override
  99.         {
  100.             matrix[_row][_column] = _value + 1;
  101.         }
  102.  
  103.         auto get_value(int _row, int _column) -> int override
  104.         {
  105.             return matrix[_row][_column];
  106.         }
  107. };
  108.  
  109.  
  110.  
  111. int main()
  112. {
  113.     Sparse s1(3, 5);
  114.     s1.set_value(0, 0, 1337);
  115.     s1.set_value(0, 1, 225);
  116.     s1.get_value(0,0);
  117.     s1.print();
  118.  
  119.     Dense d1(2,2);
  120.     d1.set_value(0, 0, 1337);
  121.     d1.print();
  122.  
  123.     return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement