fork download
  1. #include <iostream>
  2. #include <cstdlib>
  3. int** matrix_create(int N, int M);
  4. void matrix_free(int** mat, int N);
  5. int** matrix_miltiply(int& N, int& M, int** m1, int N1, int M1, int** m2, int N2, int M2);
  6. void matrix_rand(int** m, int N, int M, int num);
  7. void matrix_print(std::ostream& _out, int** m, int N, int M);
  8.  
  9.  
  10. int main(void){
  11. int N1 = 5, M1 = 3;
  12. int** m1 = matrix_create(N1, M1);
  13. if(m1 == NULL)
  14. return 1;
  15.  
  16. int N2 = M1, M2 = 8;
  17. int** m2 = matrix_create(N2, M2);
  18. if(m2 == NULL)
  19. return 1;
  20.  
  21. matrix_rand(m1, N1, M1, 5);
  22. matrix_rand(m2, N2, M2, 7);
  23.  
  24. int N3, M3;
  25. int** m3 = matrix_miltiply(N3, M3, m1, N1, M1, m2, N2, M2);
  26. if(m3 == NULL)
  27. return 1;
  28.  
  29. matrix_print(std::cout, m1, N1, M1);
  30. matrix_print(std::cout, m2, N2, M2);
  31. matrix_print(std::cout, m3, N3, M3);
  32.  
  33. matrix_free(m1, N1);
  34. matrix_free(m2, N2);
  35. matrix_free(m3, N3);
  36. return 0;
  37. }
  38.  
  39. //перемножение матриц
  40. int** matrix_miltiply(int& N, int& M, int** m1, int N1, int M1, int** m2, int N2, int M2){
  41. if(M1 != N2)
  42. return NULL;
  43.  
  44. int** m3 = matrix_create(N1, M2);
  45. if(m3 == NULL)
  46. return NULL;
  47.  
  48. for(int i = 0; i < N1; ++i){
  49. for(int j = 0; j < M2; ++j){
  50. m3[i][j] = 0;
  51. for(int k = 0; k < N2; ++k)
  52. m3[i][j] += m1[i][k] * m2[k][j];
  53. }
  54. }
  55. N = N1, M = M2;
  56. return m3;
  57. }
  58.  
  59. //выделение памяти для матрицы
  60. int** matrix_create(int N, int M){
  61. int** mat = new (std::nothrow) int*[N];
  62. if(mat == NULL)
  63. return NULL;
  64.  
  65. for(int i = 0; i < N; ++i){
  66. mat[i] = new (std::nothrow) int[M];
  67. if(mat[i] == NULL){
  68. matrix_free(mat, i);
  69. mat = NULL;
  70. break;
  71. }
  72. }
  73. return mat;
  74. }
  75.  
  76. //удаление памяти
  77. void matrix_free(int** mat, int N){
  78. if(mat != NULL){
  79. for(int i = 0; i < N; ++i)
  80. delete[] mat[i];
  81. delete[] mat;
  82. }
  83. }
  84.  
  85. //заполнение
  86. void matrix_rand(int** m, int N, int M, int num){
  87. for(int i= 0 ; i < N; ++i){
  88. for(int j = 0; j < M; ++j)
  89. m[i][j] = rand() % num;
  90. }
  91. }
  92.  
  93. //печать
  94. void matrix_print(std::ostream& _out, int** m, int N, int M){
  95. for(int i= 0 ; i < N; ++i){
  96. for(int j = 0; j < M; ++j)
  97. _out << m[i][j] << ' ';
  98. _out << std::endl;
  99. }
  100. _out << std::endl;
  101. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
3 1 2 
0 3 0 
1 2 4 
1 2 2 
0 4 3 

0 3 1 2 2 3 0 5 
2 2 5 5 6 1 5 5 
0 3 5 3 2 1 0 2 

2 17 18 17 16 12 5 24 
6 6 15 15 18 3 15 15 
4 19 31 24 22 9 10 23 
4 13 21 18 18 7 10 19 
8 17 35 29 30 7 20 26