Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <fstream>
- using namespace std;
- int min;
- int i, j, ip, ipf, jp, K;
- int i1, i2, i3, i4, J1, j2, j3, j4, i1start, i2start, i3start, i4start, j1start, j2start, j3start, j4start;
- int temp;
- void rotateMatrix(int k, int **A)
- {
- K = k * k - 1;
- // 1. Ищем минимум
- ip = 0, jp = K;
- min = A[ip][jp];
- for (ip = 1, jp = jp - 1; jp >= 0; ip = ip + 1, jp = jp - 1)
- {
- if (A[ip][jp] < min)
- min = A[ip][jp];
- }
- cout << "Минимальный элемент матрицы A на побочной диагонали: " << min << endl;
- // 2. & 3.
- for (i = 0; i < k; i++)
- {
- for (j = 0; j < k; j++)
- {
- // 2.
- ip = k * i, ipf = k * (i + 1);
- jp = k * j;
- for (; ip < ipf; ip = ip + 1, jp = jp + 1)
- {
- if (A[ip][jp] == min)
- {
- // 3.
- cout << "Вызов 3 шага для подматрицы : " << i << " " << j << endl;
- i1start = k * i, j1start = k * j;
- i2start = k * i, j2start = (j + 1) * k - 1;
- i3start = (i + 1) * k - 1, j3start = (j + 1) * k - 1;
- i4start = (i + 1) * k - 1, j4start = k * j;
- while (1)
- {
- i1 = i1start;
- J1 = j1start;
- i2 = i2start;
- j2 = j2start;
- i3 = i3start;
- j3 = j3start;
- i4 = i4start;
- j4 = j4start;
- while (1)
- {
- temp = A[i1][J1];
- A[i1][J1] = A[i2][j2];
- A[i2][j2] = A[i3][j3];
- A[i3][j3] = A[i4][j4];
- A[i4][j4] = temp;
- J1++;
- if (J1 == j2start)
- break;
- else
- i2++, j3--, i4--;
- }
- // 3.5
- i1start++, i3start--;
- if (i1start < i3start)
- j1start++, i2start++, j2start--, j3start--, i4start--, j4start++;
- else
- break;
- }
- break;
- }
- }
- }
- }
- // 4.
- i1start = 0, j1start = 0;
- i2start = 0, j2start = K;
- i3start = K, j3start = K;
- i4start = K, j4start = 0;
- while (1)
- {
- i1 = i1start;
- J1 = j1start;
- i2 = i2start;
- j2 = j2start;
- i3 = i3start;
- j3 = j3start;
- i4 = i4start;
- j4 = j4start;
- while (1)
- {
- temp = A[i4][j4];
- A[i4][j4] = A[i3][j3];
- A[i3][j3] = A[i2][j2];
- A[i2][j2] = A[i1][J1];
- A[i1][J1] = temp;
- J1++;
- if (J1 == j2start)
- break;
- else
- i2++, j3--, i4--;
- }
- // 4.5
- i1start++, i3start--;
- if (i1start < i3start)
- j1start++, i2start++, j2start--, j3start--, i4start--, j4start++;
- else
- break;
- }
- }
- void main()
- {
- setlocale(LC_ALL, "Russian");
- int k; //Размерность матрицы
- int square; //Перемнная в которой хранится k*k
- ifstream in;
- in.open("test.txt");
- int numberTest; //Переменная для хранения номера теста
- if (in.is_open())
- {
- for (numberTest = 1; numberTest < 5; numberTest++)
- {
- cin.get();
- cout << endl
- << "-------Тест №" << numberTest << "-------" << endl;
- in >> k; //Считываем размерность матрицы
- cout << endl
- << k << endl;
- square = k * k;
- int **A;
- A = new int *[square]; //Выделение памяти под матрицу размерности k*k
- for (int i = 0; i < square; i++)
- A[i] = new int[square];
- //Считыввание
- for (int i = 0; i < square; i++)
- for (int j = 0; j < square; j++)
- in >> A[i][j];
- //Вывод входной матрицы
- cout << "Входная матрица теста №" << numberTest << endl;
- for (int i = 0; i < square; i++)
- {
- for (int j = 0; j < square; j++)
- cout << A[i][j] << " ";
- cout << "\n";
- }
- cout << endl
- << "Нажмите любую клавишу." << endl;
- cin.get();
- rotateMatrix(k, A); //Преобразование матрицы
- cout << "Преобразованная матрица теста №" << numberTest << endl;
- for (int i = 0; i < square; i++)
- {
- for (int j = 0; j < square; j++)
- cout << A[i][j] << " ";
- cout << "\n";
- }
- }
- }
- cin.get();
- in.close();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement