Циклический сдвиг элементов матрицы против часовой стрелки - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д