Advertisement
xxeell

Sort_diag_matrix

Apr 9th, 2019
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <stdio.h>
  4. #include <cstdlib>
  5. #include <fstream>
  6. #include <cctype>
  7. #include <cassert>
  8. using namespace std;
  9.  
  10. bool DEBUG = !true;
  11.  
  12. int** init(int n)
  13. {
  14.     int c = 0;
  15.     int** a = new int*[n];
  16.     for(int i = 0; i < n; i++) a[i] = new int[n];
  17.  
  18.     for(int x = 0; x < n; x++)
  19.     {
  20.         for(int y = 0; y < n; y++)
  21.         {
  22.             if((c++) % 2)
  23.             {
  24.                 a[x][y] = x + y;
  25.             }
  26.             else
  27.             {
  28.                 a[x][y] = x - y;
  29.             }
  30.  
  31.             if(a[x][y] < 0) a[x][y] = -a[x][y];
  32.  
  33.             a[x][y] %= 10;
  34.         }
  35.     }
  36.     return a;
  37. }
  38.  
  39. void write(int** a, int n)
  40. {
  41.     cout << "--- --- ---\n";
  42.     for(int y = 0; y < n; y++)
  43.     {
  44.         for(int x = 0; x < n; x++)
  45.         {
  46.             cout << a[x][y] << " ";
  47.         }
  48.         cout << "\n";
  49.     }
  50.     cout << "--- --- ---\n";
  51. }
  52.  
  53. void write_array(int* a, int n)
  54. {
  55.     for(int i = 0; i < n; i++) cout << a[i] << " ";
  56. }
  57.  
  58. void dsort(int* a, int n, bool (*dcmp)(int, int))
  59. {
  60.     int t, li;
  61.  
  62.     for(int i = 0; i < n - 1; i++)
  63.     {
  64.         li = i;
  65.         for(int j = i + 1; j < n; j++)
  66.         {
  67.             if(dcmp(a[j], a[li])) li = j;
  68.         }
  69.         t = a[i];
  70.         a[i] = a[li];
  71.         a[li] = t;
  72.     }
  73. }
  74.  
  75. bool f_mr_s(int f, int s)
  76. {
  77.     return f <= s;
  78. }
  79.  
  80. bool f_br_s(int f, int s)
  81. {
  82.     return f >= s;
  83. }
  84.  
  85. void black_magick(int** a, int n)
  86. {
  87.     int* ta;
  88.     for(int i = 1; i < n; i++)
  89.     {
  90.         ta = new int[n - i];
  91.  
  92.         for(int t = 0; t + i < n; t++)
  93.         {
  94.             ta[t] = a[t + i][t];
  95.         }
  96.  
  97.         if(DEBUG)
  98.         {
  99.             cout << "DEBUG default ---\n";
  100.             write_array(ta, n - i);
  101.             cout << "\n--- --- ---\n";
  102.         }
  103.  
  104.         dsort(ta, n - i, f_br_s);
  105.  
  106.         if(DEBUG)
  107.         {
  108.             cout << "DEBUG sort ---\n";
  109.             write_array(ta, n - i);
  110.             cout << "\n--- --- ---\n";
  111.         }
  112.  
  113.         for(int t = 0; t + i < n; t++)
  114.         {
  115.             a[t + i][t] = ta[t];
  116.         }
  117.  
  118.         delete[] ta;
  119.     }
  120.  
  121.     for(int i = 1; i < n; i++)
  122.     {
  123.         ta = new int[n - i];
  124.  
  125.         for(int t = 0; t + i < n; t++)
  126.         {
  127.             ta[t] = a[t][t + i];
  128.         }
  129.  
  130.         if(DEBUG)
  131.         {
  132.             cout << "DEBUG default ---\n";
  133.             write_array(ta, n - i);
  134.             cout << "\n--- --- ---\n";
  135.         }
  136.  
  137.         dsort(ta, n - i, f_mr_s);
  138.  
  139.         if(DEBUG)
  140.         {
  141.             cout << "DEBUG sort ---\n";
  142.             write_array(ta, n - i);
  143.             cout << "\n--- --- ---\n";
  144.         }
  145.  
  146.         for(int t = 0; t + i < n; t++)
  147.         {
  148.             a[t][t + i] = ta[t];
  149.         }
  150.  
  151.         delete[] ta;
  152.     }
  153. }
  154.  
  155. int main()
  156. {
  157.     //ifstream in("input.txt"); ofstream out("output.txt");
  158.  
  159.     const int n = 10;
  160.  
  161.     int** a = init(n);
  162.  
  163.     write(a, n);
  164.     black_magick(a, n);
  165.     write(a, n);
  166.  
  167.  
  168.     return 0;
  169.  
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement