Циклический сдвиг элементов матрицы против часовой стрелки - 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;
}

Объяснение кода листинга программы

  1. В функции Rotate происходит циклический сдвиг элементов матрицы против часовой стрелки.
  2. В функции Print происходит вывод элементов матрицы построчно с помощью цикла for.
  3. В функции main определен исходный массив source размером 5x5 и вычислен его размер len.
  4. Результат циклического сдвига сохраняется в массиве result.
  5. Вычисляется размерность матрицы n как квадратный корень из общего количества элементов.
  6. Выводится исходный массив source с помощью функции Print.
  7. Результат циклического сдвига выводится с помощью функции Print.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы