Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.06 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include <stdio.h>
  4.  
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. int min;
  10. int i, j, ip, ipf, jp, K;
  11. int i1, i2, i3, i4, J1, j2, j3, j4, i1start, i2start, i3start, i4start, j1start, j2start, j3start, j4start;
  12. int temp;
  13.  
  14. void rotateMatrix(int k, int **A)
  15. {
  16.     K = k * k - 1;
  17.  
  18.     // 1. Ищем минимум
  19.     ip = 0, jp = K;
  20.     min = A[ip][jp];
  21.     for (ip = 1, jp = jp - 1; jp >= 0; ip = ip + 1, jp = jp - 1)
  22.     {
  23.         if (A[ip][jp] < min)
  24.             min = A[ip][jp];
  25.     }
  26.  
  27.     cout << "Минимальный элемент матрицы A на побочной диагонали: " << min << endl;
  28.  
  29.     // 2. & 3.
  30.     for (i = 0; i < k; i++)
  31.     {
  32.         for (j = 0; j < k; j++)
  33.         {
  34.  
  35.             // 2.
  36.             ip = k * i, ipf = k * (i + 1);
  37.             jp = k * j;
  38.             for (; ip < ipf; ip = ip + 1, jp = jp + 1)
  39.             {
  40.                 if (A[ip][jp] == min)
  41.                 {
  42.                     // 3.
  43.                     cout << "Вызов 3 шага для подматрицы : " << i << " " << j << endl;
  44.  
  45.                     i1start = k * i, j1start = k * j;
  46.                     i2start = k * i, j2start = (j + 1) * k - 1;
  47.                     i3start = (i + 1) * k - 1, j3start = (j + 1) * k - 1;
  48.                     i4start = (i + 1) * k - 1, j4start = k * j;
  49.  
  50.                     while (1)
  51.                     {
  52.  
  53.                         i1 = i1start;
  54.                         J1 = j1start;
  55.                         i2 = i2start;
  56.                         j2 = j2start;
  57.                         i3 = i3start;
  58.                         j3 = j3start;
  59.                         i4 = i4start;
  60.                         j4 = j4start;
  61.  
  62.                         while (1)
  63.                         {
  64.  
  65.                             temp = A[i1][J1];
  66.                             A[i1][J1] = A[i2][j2];
  67.                             A[i2][j2] = A[i3][j3];
  68.                             A[i3][j3] = A[i4][j4];
  69.                             A[i4][j4] = temp;
  70.  
  71.                             J1++;
  72.                             if (J1 == j2start)
  73.                                 break;
  74.                             else
  75.                                 i2++, j3--, i4--;
  76.                         }
  77.  
  78.                         // 3.5
  79.                         i1start++, i3start--;
  80.                         if (i1start < i3start)
  81.                             j1start++, i2start++, j2start--, j3start--, i4start--, j4start++;
  82.                         else
  83.                             break;
  84.                     }
  85.  
  86.                     break;
  87.                 }
  88.             }
  89.         }
  90.     }
  91.  
  92.     // 4.
  93.  
  94.     i1start = 0, j1start = 0;
  95.     i2start = 0, j2start = K;
  96.     i3start = K, j3start = K;
  97.     i4start = K, j4start = 0;
  98.  
  99.     while (1)
  100.     {
  101.  
  102.         i1 = i1start;
  103.         J1 = j1start;
  104.         i2 = i2start;
  105.         j2 = j2start;
  106.         i3 = i3start;
  107.         j3 = j3start;
  108.         i4 = i4start;
  109.         j4 = j4start;
  110.  
  111.         while (1)
  112.         {
  113.  
  114.             temp = A[i4][j4];
  115.             A[i4][j4] = A[i3][j3];
  116.             A[i3][j3] = A[i2][j2];
  117.             A[i2][j2] = A[i1][J1];
  118.             A[i1][J1] = temp;
  119.  
  120.             J1++;
  121.             if (J1 == j2start)
  122.                 break;
  123.             else
  124.                 i2++, j3--, i4--;
  125.         }
  126.  
  127.         // 4.5
  128.         i1start++, i3start--;
  129.         if (i1start < i3start)
  130.             j1start++, i2start++, j2start--, j3start--, i4start--, j4start++;
  131.         else
  132.             break;
  133.     }
  134. }
  135.  
  136. void main()
  137. {
  138.     setlocale(LC_ALL, "Russian");
  139.     int k;      //Размерность матрицы
  140.     int square; //Перемнная в которой хранится k*k
  141.     ifstream in;
  142.     in.open("test.txt");
  143.     int numberTest; //Переменная для хранения номера теста
  144.     if (in.is_open())
  145.     {
  146.         for (numberTest = 1; numberTest < 5; numberTest++)
  147.         {
  148.             cin.get();
  149.             cout << endl
  150.                  << "-------Тест №" << numberTest << "-------" << endl;
  151.             in >> k; //Считываем размерность матрицы
  152.             cout << endl
  153.                  << k << endl;
  154.             square = k * k;
  155.             int **A;
  156.  
  157.             A = new int *[square]; //Выделение памяти под матрицу размерности k*k
  158.             for (int i = 0; i < square; i++)
  159.                 A[i] = new int[square];
  160.             //Считыввание
  161.             for (int i = 0; i < square; i++)
  162.                 for (int j = 0; j < square; j++)
  163.                     in >> A[i][j];
  164.  
  165.             //Вывод входной матрицы
  166.             cout << "Входная матрица теста №" << numberTest << endl;
  167.             for (int i = 0; i < square; i++)
  168.             {
  169.                 for (int j = 0; j < square; j++)
  170.                     cout << A[i][j] << " ";
  171.                 cout << "\n";
  172.             }
  173.             cout << endl
  174.                  << "Нажмите любую клавишу." << endl;
  175.             cin.get();
  176.  
  177.             rotateMatrix(k, A); //Преобразование матрицы
  178.             cout << "Преобразованная матрица теста №" << numberTest << endl;
  179.             for (int i = 0; i < square; i++)
  180.             {
  181.                 for (int j = 0; j < square; j++)
  182.                     cout << A[i][j] << " ";
  183.                 cout << "\n";
  184.             }
  185.         }
  186.     }
  187.     cin.get();
  188.     in.close();
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement