Advertisement
crackanddie

task 09 20

Sep 26th, 2022
1,089
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.31 KB | Software | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. #pragma region first
  7. int len(string str)
  8. {
  9.     int length = 0;
  10.     for (int i = 0; str[i] != '\0'; i++)
  11.     {
  12.         length++;
  13.  
  14.     }
  15.     return length;
  16. }
  17.  
  18. void split(string str, char seperator, int* out_arr)
  19. {
  20.     int currIndex = 0, i = 0;
  21.     int startIndex = 0, endIndex = 0;
  22.     while (i <= len(str))
  23.     {
  24.         if (str[i] == seperator || i == len(str))
  25.         {
  26.             endIndex = i;
  27.             string subStr = "";
  28.             subStr.append(str, startIndex, endIndex - startIndex);
  29.             out_arr[currIndex] = stoi(subStr);
  30.             currIndex += 1;
  31.             startIndex = endIndex + 1;
  32.         }
  33.         i++;
  34.     }
  35. }
  36. #pragma endregion
  37.  
  38. #pragma region second
  39. void print_mat(int* arr, int n, int m)
  40. {
  41.     for (int i = 0; i < n; i++)
  42.     {
  43.         for (int j = 0; j < m; j++)
  44.             cout << arr[i * m + j] << " ";
  45.         cout << endl;
  46.     }
  47. }
  48.  
  49. template <size_t n, size_t m>
  50. void print_mat(int(&arr)[n][m]) {
  51.     print_mat(*arr, n, m);
  52. }
  53. #pragma endregion
  54.  
  55. #pragma region third
  56. void sum_mats(int* arr_1, int* arr_2, int* out_arr, int n, int m)
  57. {
  58.     for (int i = 0; i < n; i++)
  59.     {
  60.         for (int j = 0; j < m; j++)
  61.             out_arr[i * m + j] = arr_1[i * m + j] + arr_2[i * m + j];
  62.     }
  63. }
  64. template <size_t n, size_t m>
  65. void sum_mats(int(&arr_1)[n][m], int(&arr_2)[n][m], int(&out_arr)[n][m]) {
  66.     sum_mats(*arr_1, *arr_2, *out_arr, n, m);
  67. }
  68.  
  69. void prod_mats(int* arr_1, int* arr_2, int* out_arr, int n, int m)
  70. {
  71.     for (int i = 0; i < n; i++)
  72.     {
  73.         for (int j = 0; j < m; j++)
  74.         {
  75.             // этот кринж будет фурычить только на матрицах с одинаковым размером
  76.             // и если только они симетричные
  77.             // я устал это писать, лучше пойду посплю
  78.             int mini_sum = 0;
  79.             for (int k = 0; k < n; ++k)
  80.             {
  81.                 mini_sum += arr_1[i * m + k] * arr_2[k * m + j];
  82.             }
  83.             out_arr[i * m + j] = mini_sum;
  84.         }
  85.     }
  86. }
  87. template <size_t n, size_t m>
  88. void prod_mats(int(&arr_1)[n][m], int(&arr_2)[n][m], int(&out_arr)[n][m]) {
  89.     prod_mats(*arr_1, *arr_2, *out_arr, n, m);
  90. }
  91. #pragma endregion
  92.  
  93.  
  94. void all_tasks()
  95. {
  96.     using size_type = std::size_t;
  97.     using value_type = int;
  98.  
  99.     const size_type n1 = 3, n2 = 3;
  100.     value_type m1[n1][n2], m2[n1][n2];
  101.  
  102.     // 1
  103.     for (int i = 0; i < n1; ++i)
  104.     {
  105.         string user_row;
  106.         getline(cin, user_row);
  107.         int splitted[n2];
  108.         split(user_row, ' ', splitted);
  109.         for (int j = 0; j < n2; ++j)
  110.         {
  111.             m1[i][j] = splitted[j];
  112.             m2[(n1 - 1) - i][(n2 - 1) - j] = splitted[j];
  113.         }
  114.     }
  115.     cout << endl;
  116.  
  117.     // 2
  118.     cout << "Mat 1: " << endl;
  119.     print_mat(m1);
  120.     cout << endl;
  121.     cout << "Mat 2: " << endl;
  122.     print_mat(m2);
  123.     cout << endl;
  124.  
  125.     // 3
  126.     value_type sums[n1][n2];
  127.     sum_mats(m1, m2, sums);
  128.     value_type prods[n1][n2];
  129.     prod_mats(m1, m2, prods);
  130.  
  131.     cout << "Sums: " << endl;
  132.     print_mat(sums);
  133.     cout << endl;
  134.     cout << "Prods: " << endl;
  135.     print_mat(prods);
  136.     cout << endl;
  137. }
  138.  
  139. int main()
  140. {
  141.     all_tasks();
  142. }
  143.  
  144.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement