Циклический сдвиг элементов матрицы - C (СИ)
Формулировка задачи:
Осуществить циклический сдвиг элементов столбцов матрицы на m элементов вправо.
Подскажите как реализовать.
Заранее спасибо
Решение задачи: «Циклический сдвиг элементов матрицы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 7
#define M 9
int main()
{
int A[N][M], i, j, q, m, temp = 1;
puts("Enter the number of shift:");
while(1 != scanf("%d", &m)){
getchar();
puts("Error!Try again.");
}
if(m >= M)
m -= M;
for(j = 0; j < M; j++)
for(i = 0; i < N; i++)
A[i][j] = temp++;
for(i = 0; i < N; i++, putchar('\n'))
for(j = 0; j < M; j++)
printf("%3d", A[i][j]);
for(i = 0; i < N; i++)
for(q = 0; q < m; q++){
temp = A[i][M - 1];
for(j = M - 1; j > 0; j--)
A[i][j] = A[i][j - 1];
A[i][0] = temp;
}
putchar('\n');
for(i = 0; i < N; i++, putchar('\n'))
for(j = 0; j < M; j++)
printf("%3d", A[i][j]);
return 0;
}
Объяснение кода листинга программы
- Объявление переменных:
A- двумерный массив размеромNнаMдля хранения элементов;i,j,q,m- индексы для обращения к элементам матрицы;temp- временная переменная для хранения значений;puts,scanf,getchar,printf- функции ввода/вывода для работы с пользователем и вывода результатов.
- Запрос у пользователя количества сдвига элементов матрицы.
- Проверка корректности введенного значения: пока не будет введено целое число, выводить сообщение об ошибке и просить ввести значение заново.
- Ограничение введенного значения: если количество сдвига больше, чем размер матрицы по второму измерению, уменьшить его до ближайшего меньшего значения.
- Инициализация всех элементов матрицы значением
temp. - Вывод значений всех элементов матрицы в формате
3d. - Сдвиг элементов матрицы вправо на количество позиций, равное
m. - Вывод значений всех элементов матрицы в формате
3d. - Возврат значения
0для успешного завершения программы.