Циклический сдвиг элементов матрицы против часовой стрелки - C (СИ)
Формулировка задачи:
Задана квадратная матрица символов. Осуществить циклический сдвиг элементов следующим образом: элементы нулевой строки сдвигаются в нулевой столбец сверху вниз, из него - в последнюю строку слева направо, из нее - в последний столбец снизу вверх, из него - в нулевую строку справа налево и далее по кругу против часовой стрелки. Элементы первой сроки сдвигаются аналогично и так далее.
Три вечера думаю, но достойно работающего варианта пока не нашел. Может быть, подскажите. Не нужно писать всю программу, небольшой фрагмент с методом (идеей).
Заранее спасибо.
Решение задачи: «Циклический сдвиг элементов матрицы против часовой стрелки»
textual
Листинг программы
#include <stdio.h> #include <math.h> //----------------------------------------------------------------------------- int* Rotate(const int* source, int* result, const size_t n) { size_t i, j; for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { result[i * n + j] = source[j * n + (n - i - 1)]; } } return result; } //----------------------------------------------------------------------------- void Print(const int* array, const size_t n) { size_t i, j; for (i = 0; i < n; ++i) { for (j = 0; j < n; ++j) { printf("%d ", array[i * n + j]); } printf("\n"); } printf("\n"); } //----------------------------------------------------------------------------- int main() { int source[] = {11, 12, 13, 14, 15, 21, 22, 23, 24, 25, 31, 32, 33, 34, 35, 41, 42, 43, 44, 45, 51, 52, 53, 54, 55}; size_t len = sizeof(source) / sizeof(*source); int result[len]; size_t n = sqrt(len); Print(source, n); Rotate(source, result, n); Print(result, n); return 0; }
Объяснение кода листинга программы
- В функции
Rotate
происходит циклический сдвиг элементов матрицы против часовой стрелки. - В функции
Print
происходит вывод элементов матрицы построчно с помощью циклаfor
. - В функции
main
определен исходный массивsource
размером 5x5 и вычислен его размерlen
. - Результат циклического сдвига сохраняется в массиве
result
. - Вычисляется размерность матрицы
n
как квадратный корень из общего количества элементов. - Выводится исходный массив
source
с помощью функцииPrint
. - Результат циклического сдвига выводится с помощью функции
Print
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д