Advertisement
SomniP

Обработка двумерного массива

Dec 17th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <ctime>
  4. #include <algorithm>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. bool uneven(const int &);
  10.  
  11. size_t count_uneven_in_string(int *);
  12.  
  13. void show(int **);
  14.  
  15. int main()
  16. {
  17.     SetConsoleCP(1251);
  18.     SetConsoleOutputCP(1251);
  19.     srand(time(NULL));
  20.     system("color 0A");
  21.  
  22.     cout << "Введите размеры матрицы ";
  23.     size_t n, m;
  24.     cin >> n >> m;
  25.     auto **a = new int*[n];
  26.     for (size_t count = 0u; count < n; ++count)
  27.         a[count] = new int[m + 1];
  28.  
  29.     auto get_num = []()
  30.     {
  31.         return rand() % 101;
  32.     };
  33.     auto get_string = [a, n, m, get_num]()
  34.     {
  35.         auto str = new int[m];
  36.         generate(str, str + m, get_num);
  37.         return str;
  38.     };
  39.     generate(a, a + n, get_string);
  40.     for (size_t u = 0u; u < n; ++u)
  41.     {
  42.         a[u][m] = 0;
  43.     }
  44.     cout << "Исходная матрица" << endl;
  45.     show(a);
  46.  
  47.     size_t ind = 0u;
  48.     auto f = [&a, &ind, m](int *t)
  49.     {
  50.         a[ind++][m] = count_uneven_in_string(t);
  51.     };
  52.     for_each(a, a + n, f);
  53.     auto predicate = [m](int *t1, int *t2)
  54.     {
  55.         return t1[m] < t2[m];
  56.     };
  57.     sort(a, a + n, predicate);
  58.     cout << "Обработанная матрица" << endl;
  59.     show(a);
  60.  
  61.     system("pause");
  62.     return 0;
  63. }
  64.  
  65. bool uneven(const int &k)
  66. {
  67.     return k & 1u;
  68. }
  69.  
  70. size_t count_uneven_in_string(int *a)
  71. {
  72.     size_t len = _msize(a) / sizeof(a);
  73.     size_t cnt = 0u;
  74.     for (size_t u = 0u; u < len; ++u)
  75.     {
  76.         cnt += uneven(a[u]);
  77.     }
  78.     return cnt;
  79. }
  80.  
  81. void show(int **a)
  82. {
  83.     auto n = _msize(a) / sizeof(a);
  84.     auto m = _msize(a[0u]) / sizeof(a[0u]);
  85.     for (size_t u = 0u; u < n; ++u)
  86.     {
  87.         for (size_t p = 0u; p < m; ++p)
  88.         {
  89.             cout << setw(4u) << a[u][p];
  90.         }
  91.         cout << endl;
  92.     }
  93.     cout << endl;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement