Petro_zzz

28_09_multiply_matrix

Sep 30th, 2022
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. #define My_VAl1 "Hello world!"
  5. #define My_VAl2 "Hello world!"
  6. #define My_VAl3 {1, 2, 4, 5}   // это плохая практика
  7.  
  8. using namespace std;
  9.  
  10.  
  11. inline int get_rand(int min, int max) { // inline - для вставки команд функции в место вызова
  12.     if (min > max)
  13.         swap(min, max);
  14.     return min + rand() % (max - min + 1);
  15. }
  16.  
  17. void create(int** &matr1, int size1, int size2) {
  18.     matr1 = new int* [size1];
  19.     for (int k = 0; k < size1; ++k) {
  20.         matr1[k] = new int[size2];
  21.     }
  22.  
  23.     for (int k = 0; k < size1; ++k) {
  24.         for (int n = 0; n < size2; ++n)
  25.             //  matr1[k][n] = -10 + rand()%21 ; // так нормально
  26.             matr1[k][n] = get_rand(0, 9); // так лучше
  27.     }
  28. }
  29.  
  30. void show(int**& matr1) {
  31.     int size1 = _msize(matr1) / sizeof(matr1[0]);
  32.     int size2 = _msize(matr1[0]) / sizeof(matr1[0][0]);
  33.     for (int k = 0; k < size1; ++k) {
  34.         for (int n = 0; n < size2; ++n)
  35.             cout << matr1[k][n] << "\t";
  36.         cout << endl;
  37.     }
  38.     cout << endl;
  39. }
  40.  
  41. void transpose(int**& matr1) {
  42.     int size1 = _msize(matr1) / sizeof(matr1[0]);
  43.     int size2 = _msize(matr1[0]) / sizeof(matr1[0][0]);
  44.     int** buff;
  45.     create(buff, size2, size1);
  46.     for (int k = 0; k < size1; ++k) {
  47.         for (int n = 0; n < size2; ++n)
  48.             buff[n][k] = matr1[k][n];      
  49.     }
  50.     free(matr1);
  51.     matr1 = buff;    
  52. }
  53.  
  54. // только квадратные матрицы
  55. int** mult(int** matr1, int** matr2) {
  56.     int size1 = _msize(matr1) / sizeof(matr1[0]);
  57.     int size2 = _msize(matr1[0]) / sizeof(matr1[0][0]);
  58.     int** res;
  59.     create(res, size1, size2);
  60.     // правильлное суммирование
  61.     for(int k = 0; k < size1; ++k){
  62.         for (int n = 0; n < size2; ++n) {
  63.             res[k][n] = 0;
  64.             for (int m = 0; m < size1; ++m) {
  65.                 res[k][n] += matr1[k][m] * matr2[m][n];
  66.             }
  67.         }
  68.     }
  69.     return res;
  70. }
  71.  
  72.  
  73. void free(int** &matr1) {
  74.     int size1 = _msize(matr1) / sizeof(matr1[0]);
  75.     for (int k = 0; k < size1; ++k) {
  76.         delete[] matr1[k];
  77.     }
  78.     delete[] matr1;
  79. }
  80.  
  81. void matrix_calculation() {
  82.     srand(time(NULL));
  83.     int** arr;
  84.     int** arr1;
  85.     /*
  86.     cout << My_VAl1 << endl;
  87.     int arr2[]My_VAl3;
  88.     */
  89.  
  90.     create(arr, 3, 3);
  91.     create(arr1, 3, 3);
  92.  
  93.     show(arr);
  94.     show(arr1);
  95.  
  96.     int** multarr = mult(arr, arr1);
  97.     show(multarr);
  98.     free(multarr);
  99.     /*
  100.     show(arr);
  101.     transpose(arr);
  102.     transpose(arr);
  103.     show(arr);
  104.     */
  105.     free(arr);
  106.     free(arr1);
  107. }
  108.  
  109. void show(int* arr) {
  110.     int size1 = _msize(arr) / sizeof(arr[0]);
  111.     for (int k = 0; k < size1; k++) {
  112.         cout << arr[k] << " ";
  113.     }
  114.     cout << endl;
  115. }
  116.  
  117. void add(int* &arr, int val) {
  118.     int size1 = _msize(arr) / sizeof(arr[0]);
  119.     int* buff = new int[size1 + 1];
  120.     for (int k = 0; k < size1; k++) {
  121.         buff[k] = arr[k];
  122.     }
  123.     buff[size1] = val;
  124.     delete[] arr;
  125.     arr = buff;
  126. }
  127.  
  128. void add(int*& arr, int val, int id) {
  129.     int size1 = _msize(arr) / sizeof(arr[0]);
  130.     if ((id > 0) && (id < size1)) {
  131.         int* buff = new int[size1 + 1];
  132.         for (int k = 0; k < id; ++k) {
  133.             buff[k] = arr[k];
  134.         }
  135.         buff[id] = val;
  136.         for (int k = id; k < size1; ++k) {
  137.             buff[k + 1] = arr[k];
  138.         }
  139.         delete[] arr;
  140.         arr = buff;
  141.     }
  142. }
  143.  
  144. void remove(int*& arr, int id) {   
  145.     int size1 = _msize(arr) / sizeof(arr[0]);
  146.     if ((id > 0) && (id < size1)) {
  147.         int* buff = new int[size1 - 1];
  148.         for (int k = 0; k < id; ++k)
  149.             buff[k] = arr[k];
  150.         for (int k = id + 1; k < size1; ++k)
  151.             buff[k - 1] = arr[k];
  152.         delete[] arr;
  153.         arr = buff;
  154.     }
  155. }
  156.  
  157. void main() {
  158.     int* arr = new int[0] {};
  159.     show(arr);
  160.     //arr[5] = 7;
  161.     add(arr, 1);
  162.     add(arr, 2);
  163.     add(arr, 3);
  164.     add(arr, 4);
  165.     add(arr, 5);
  166.     show(arr);
  167.     add(arr, 77, 2);
  168.     show(arr);
  169.     remove(arr, 0);
  170.     remove(arr, 0);
  171.     show(arr);
  172.     delete[] arr;
  173. }
Advertisement
Add Comment
Please, Sign In to add comment