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