fork download
  1. #include <iostream>
  2. #include <assert.h>
  3. #include <stdlib.h>
  4. using namespace std;
  5.  
  6. class TriMat {
  7. private:
  8. int Size;
  9. int** M;
  10. public:
  11. TriMat(int n) {
  12. Size = n;
  13. M = (int**) malloc(Size * sizeof(int));
  14. for (int k = 0; k < Size; k++) {
  15. M[k] = (int*) malloc((Size - k) * sizeof(int));
  16. for (int j = 0; j <= Size - 1 - k; j++)
  17. cin >> M[k][j];
  18. }
  19. }
  20.  
  21. // Конструктор скалярной матрицы с заданным элементом на главной диагонали
  22. TriMat(int n, int a) {
  23. Size = n;
  24. M = (int**) malloc(Size * sizeof(int));
  25. for (int k = 0; k < Size; k++) {
  26. M[k] = (int*) malloc((Size - k) * sizeof(int));
  27. M[k][0] = a;
  28. }
  29. }
  30.  
  31. void print() {
  32. for (int k = 0; k < Size; k++) {
  33. for (int j = 0; j < k; j++)
  34. cout << "\t";
  35. for (int j = 0; j <= Size - 1 - k; j++)
  36. cout << M[k][j] << "\t";
  37. cout << endl;
  38. }
  39. }
  40.  
  41. int* operator[](size_t k) {
  42. assert(0 <= k && k < Size);
  43. return M[k];
  44. }
  45.  
  46. void assign(int i, int j, int a) {
  47. assert(0 <= i && i < Size && 0 <= j && j < Size);
  48. M[i][j] = a;
  49. }
  50.  
  51. int el(int i, int j) {
  52. assert(0 <= i && i < Size && 0 <= j && j < Size);
  53. return M[i][j];
  54. }
  55.  
  56.  
  57. TriMat operator+ (TriMat B) {
  58. TriMat C(Size);
  59. for (int k = 0; k < Size; k++)
  60. for (int j = 0; j <= Size - 1 - k; j++)
  61. C[k][j] = M[k][j] + B[k][j];
  62. return C;
  63. }
  64.  
  65. TriMat operator= (TriMat B) {
  66. for (int k = 0; k < Size; k++)
  67. for (int j = 0; j <= Size - 1 - k; j++)
  68. M[k][j] = B[k][j];
  69. return *this;
  70. }
  71.  
  72. TriMat operator* (TriMat B) {
  73. TriMat C(Size);
  74. for (int k = 0; k < Size; k++)
  75. for (int j = k; j < Size; j++) {
  76. for (int r = k; r <= j; r++)
  77. C[k][j-k] += M[k][r-k] * B[r][j-r];
  78. }
  79. return C;
  80. }
  81. };
  82.  
  83.  
  84. int main() {
  85. int n;
  86. cin >> n;
  87. TriMat A(n), B(n), I(n,1), C = A * (I + B*B);
  88. A.print();
  89. B.print();
  90. C.print();
  91. return 0;
  92. }
Success #stdin #stdout 0s 3420KB
stdin
3
2 2 2
   0 3
      1
1 2 3
   4 5
      6
stdout
2	2	2	
	0	3	
		1	
1	2	3	
	4	5	
		6	
4	54	236	
	0	111	
		37