Advertisement
qberik

Untitled

Dec 14th, 2022
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. #include <ios>
  2. #include <vector>
  3. #include <iostream>
  4. #include <iomanip>
  5. using namespace std;
  6. #define TYPE int
  7. #define line vector<TYPE>
  8. #define matrix vector<line>
  9. #define DEBUG(args) // cout << args << endl
  10. #define DEBUG2(args) cout << args << endl
  11.  
  12. class diagonMatrix{
  13. public:
  14. diagonMatrix( int dim );
  15. diagonMatrix( matrix );
  16. int index( int i, int j );
  17. void edit( int i, int j, TYPE value );
  18. void print();
  19. matrix data;
  20. };
  21.  
  22. int main(){
  23. matrix razr = { {1, 0, 0, 0, 0, 0, 0},
  24. {0, 2, 8, 9, 0, 0, 0},
  25. {0, 8, 3, 0, 0, 0, 0},
  26. {0, 9, 0, 4, 10,0, 0},
  27. {0, 0, 0, 10,5, 11,12},
  28. {0, 0, 0, 0, 11,6, 0},
  29. {0, 0, 0, 0, 12,0, 7} };
  30.  
  31. /*
  32. matrix razr = { {1,2,3},
  33. {4,5,6},
  34. {7,8,9} };
  35. */
  36.  
  37. int len = razr.size();
  38.  
  39. diagonMatrix M1( razr );
  40.  
  41.  
  42. diagonMatrix M2( razr );
  43.  
  44. diagonMatrix M3( razr.size() );
  45.  
  46. for( int i = 0; i < len; i++ ){
  47. for( int j = 0; j < len; j++ ){
  48. M3.edit(i, j, 0);
  49. for( int k = 0; k < len; k++ ){
  50. int E1 = M1.index(i, k);
  51. int E2 = M2.index(k, j);
  52. int E3 = M3.index(i, j);
  53. M3.edit(i, j, E1*E2+E3);
  54. }
  55. }
  56. }
  57.  
  58.  
  59. M3.print();
  60.  
  61. }
  62.  
  63.  
  64. diagonMatrix::diagonMatrix( int dim ){
  65. for( int i = 0; i < dim; i++ ){
  66. data.push_back(line());
  67. }
  68. }
  69.  
  70. diagonMatrix::diagonMatrix( matrix m ){
  71. int len = m.size();
  72.  
  73. line tmp;
  74. for( int i = 0; i < len; i++ ){
  75. tmp.push_back(0);
  76. }
  77. for( int i = 0; i < len; i++ ){
  78. data.push_back(tmp);
  79. }
  80.  
  81.  
  82.  
  83. for( int i = 0; i < len; i++ ){
  84. for( int j = 0; j < len; j++ ){
  85. int I = 1-len + i + j;
  86. int J = j;
  87. int elem = 0;
  88. if( I >= 0 ){
  89. elem = m[I][J];
  90. }
  91. data[j][i] = elem;
  92. }
  93. }
  94.  
  95. matrix data_copy = data;
  96. for( int i = 0; i < len; i++ ){
  97. bool empty_row = true;
  98. for( int j = 0; j < len; j++ ){
  99. if( data[j][i] != 0 ){
  100. empty_row = false;
  101. }
  102. }
  103. if( !empty_row ){
  104. break;
  105. }else{
  106. for( int j = 0; j < len; j++ ){
  107. data_copy[j].erase( data_copy[j].begin() ) ;
  108. }
  109. }
  110. }
  111. data = data_copy;
  112.  
  113. /**/
  114.  
  115. for( int i = 0; i < data.size(); i++ ){
  116. for( int j = 0; j < data[i].size(); j++ ){
  117. cout << data[i][j] << ' ';
  118. } cout << endl;
  119. }
  120.  
  121. }
  122.  
  123. void diagonMatrix::print(){
  124. int len = data.size();
  125. for( int i = 0; i < len; i++ ){
  126. for( int j = 0; j < len; j++ ){
  127. cout << right << setw(4) << diagonMatrix::index(i, j) << ' ';
  128. }
  129. cout << endl;
  130. }
  131. }
  132.  
  133.  
  134. int diagonMatrix::index( int i, int j ){
  135.  
  136. int len = data.size();
  137. int depth = data[0].size();
  138.  
  139. if( i < j ){
  140. int tmp = i;
  141. i = j;
  142. j = tmp;
  143. }
  144.  
  145. int di = i - j;
  146. int I = i;
  147. int J = depth - di - 1;
  148.  
  149. int elem = 0;
  150. if( J >= 0 )
  151. elem = data[I][J];
  152. return elem;
  153.  
  154. }
  155.  
  156. void diagonMatrix::edit( int i, int j, int val ){
  157.  
  158. int len = data.size();
  159. int depth = data[0].size();
  160.  
  161. if( i < j ){
  162. int tmp = i;
  163. i = j;
  164. j = tmp;
  165. }
  166.  
  167. int di = i - j;
  168. int I = i;
  169. int J = depth - di - 1;
  170.  
  171.  
  172. while( J < 0 ){
  173. for( int i = 0; i < data.size(); i++ )
  174. data[i].insert( data[i].begin(), 0 );
  175. J++;
  176. }
  177.  
  178. data[I][J] = val;
  179.  
  180.  
  181. return;
  182.  
  183. }
  184.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement