Advertisement
SomniP

Сортировка_Строк_Матрицы_По_Возрастанию_Их_Суммы

Oct 1st, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.30 KB | None | 0 0
  1. #include < iostream >
  2. #include < windows.h >
  3. #include < vector >
  4. #include < algorithm >
  5. #include < ctime >
  6. #include < cstdlib >
  7.  
  8. using namespace std;
  9.  
  10. void Show_Arr(int **);
  11.  
  12. int main()
  13. {
  14.     SetConsoleCP(1251);
  15.     SetConsoleOutputCP(1251);
  16.     srand(time(NULL));
  17.     system("color 0A");
  18.  
  19.     cout << "Введите размеры массива ";
  20.     unsigned n, m;
  21.     cin >> n >> m;
  22.  
  23.     //Анонимные методы
  24.     //Получение случайного числа от - 50 до 50
  25.     auto gen_symbol = []()
  26.     {
  27.         return -50 + rand() % 101;
  28.     };
  29.     //Получение строки чисел для вставки в двумерный массив
  30.     auto gen_string = [m, gen_symbol]()
  31.     {
  32.         auto str = new int[m + 1];
  33.         generate(str, str + m + 1, gen_symbol);
  34.         return str;
  35.     };
  36.     //Нахождение построчной суммы
  37.     auto edit = [m](int *str)
  38.     {
  39.         auto sum = 0;
  40.         auto len = m + 1;
  41.         for (auto u = 0u; u < len - 1; ++u)
  42.         {
  43.             sum += str[u];
  44.         }
  45.         str[len - 1] = sum;
  46.     };
  47.     //Сравнение сумм строк
  48.     auto predicate = [m](int *str1, int *str2)
  49.     {
  50.         auto len1 = m + 1;
  51.         auto len2 = m + 1;
  52.  
  53.         return str1[len1 - 1] < str2[len2 - 1];
  54.     };
  55.  
  56.     //Объявление двумерного массива
  57.     int **v = new int*[n];
  58.     for (auto count = 0u; count < n; ++count)
  59.     {
  60.         v[count] = new int[m + 1];
  61.     }
  62.  
  63.     //Заполнение двумерного массива
  64.     generate(v, v + n, gen_string);
  65.  
  66.     //Демонстрация содержимого двумерного массива
  67.     cout << "Исходный массив" << endl;
  68.     Show_Arr(v);
  69.  
  70.     //Обработка двумерного  массива
  71.     for_each(v, v + n, edit);
  72.     sort(v, v + n, predicate);
  73.  
  74.     //Демонстрация содержимого двумерного массива
  75.     cout << "Обработанный массив" << endl;
  76.     Show_Arr(v);
  77.  
  78.     system("pause");
  79.     return 0;
  80. }
  81.  
  82. //Функция для отображения содержимого двумерного массива в консоле
  83. void Show_Arr(int **arr)
  84. {
  85.     auto len1 = _msize(arr) / sizeof(arr);
  86.     auto len2 = _msize(*arr) / sizeof(*arr);
  87.    
  88.     for (auto u = 0u; u < len1; ++u)
  89.     {
  90.         for (auto p = 0u; p < len2 - 1; ++p)
  91.         {
  92.             cout << arr[u][p] << " ";
  93.         }
  94.         cout << endl;
  95.     }
  96.     cout << endl;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement