Практика 3 задание 4 доделанное
Tue Oct 08 2024 20:23:58 GMT+0000 (Coordinated Universal Time)
Saved by @Yakostoch
#include <iostream>
using namespace std;
int main()
{
int n;
int m;
cout << "Введите размерность вашей метрицы: " << endl;
cin >> n;
cin >> m;
int* arr = new int[n * m]; // создание развертки матрицы в виде одномерного массива
cout << "Введите элементы вашей матрицы: " << endl;
for (int i = 0; i < n * m; ++i) { // хаполняем элементы массива
cin >> arr[i];
}
for (int i = 0; i < n * m; i++) { // cортировка массива пузырьковым методом
for (int j = 0; j < n * m - 1; j++) {
if (arr[j] > arr[j + 1]) {
arr[j] += arr[j + 1];
arr[j + 1] = arr[j] - arr[j + 1];
arr[j] = arr[j] - arr[j + 1];
}
}
}
int matrix[20][20]; // создание обычной матрицы которую мы будем заполнять элементами из отсортированного массива
bool b_matrix[20][20]; // создание bool матрицы
for (int i = 0; i < 20; ++i) { // заполняем bool матрицу значениями false
for (int j = 0; j < 20; ++j) {
b_matrix[i][j] = false;
}
}
int speed_x = 1; //перемещение по строчке
int speed_y = 0; // перемещение по столбцу
int x = 0, y = 0; // координаты элемента
int turn_counter = 0;
for (int i = 0; i < n * m; ++i) { //проходимся по созданному массиву и заполняем его элементами из нашего одномерного массива
matrix[x][y] = arr[i];
b_matrix[x][y] = true;
if (b_matrix[x + speed_x][y + speed_y] or (0 > speed_x + x or speed_x + x > n - 1) or (0 > speed_y + y or speed_y + y > m - 1)) { // перемещаемся по ячейкам матрицы при этом проверяем условия
turn_counter += 1; // если мы выходим за строку или столбец: меняем направление движения
switch (turn_counter % 4) // если у нас при сопоставлении с bool матрицей на элемент true, то мы не
{ // заполняем этот элемент и меняем направление движиения
case 1: // функция switch case указывает как нужно двигаться чтобы заполнять матрицу
{
speed_x = 0;
speed_y = 1;
break;
}
case 2:
{
speed_x = -1;
speed_y = 0;
break;
}
case 3:
{
speed_x = 0;
speed_y = -1;
break;
}
case 0:
{
speed_x = 1;
speed_y = 0;
break;
}
default:
break;
}
}
x += speed_x; //перемещаемся к следующему элементу
y += speed_y;
}
for (int i = 0; i < n; ++i) { // вывод матрицы
for (int j = 0; j < m; ++j) {
cout << matrix[j][i] << " ";
}
cout << endl;
}
return 0;
}



Comments