Циклически сдвинуть строки матрицы на 2 вверх - C (СИ)
Формулировка задачи:
Ввести прямоугольную матрицу целых чисел. Циклически сдвинуть ее строки на 2 вверх. Подсказка: циклическое смещение предусматривает, что элементы двух первых строк матрицы заносятся в соответствующие места сдвинутых элементов двух последних строк.
Решение задачи: «Циклически сдвинуть строки матрицы на 2 вверх»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #define ROWS (6) #define COLUMNS (9) #define ROLLOUTS (2) int main(void) { int ** matrix, * tmp, i, j; if ( ! ( matrix = malloc(sizeof(int*) * ROWS) ) ) { perror("malloc"); exit(1); } for ( i = 0; i < ROWS; ++i ) { if ( ! ( matrix[i] = malloc(sizeof(int) * COLUMNS) ) ) { perror("malloc"); exit(1); } for ( j = 0; j < COLUMNS; ++j ) matrix[i][j] = (i + 1) * 10 + j + 1; } printf("Before:\n"); for ( i = 0; i < ROWS; ++i ) for ( j = 0; j < COLUMNS; ++j ) printf("%d%c", matrix[i][j], ( j < COLUMNS - 1 ) ? ' ' : '\n'); for ( i = 0; i < ROLLOUTS; ++i ) { tmp = *matrix; memmove(matrix, matrix + 1, sizeof(int*) * ( ROWS - 1)); matrix[ROWS - 1] = tmp; } printf("After:\n"); for ( i = 0; i < ROWS; ++i ) for ( j = 0; j < COLUMNS; ++j ) printf("%d%c", matrix[i][j], ( j < COLUMNS - 1 ) ? ' ' : '\n'); for ( i = 0; i < ROWS; ++i ) free(matrix[i]); free(matrix); exit(0); }
Объяснение кода листинга программы
- Объявлены переменные:
- ROWS (6) - количество строк в матрице
- COLUMNS (9) - количество столбцов в матрице
- ROLLOUTS (2) - количество циклов сдвига
- Выделена память под матрицу и временную переменную tmp:
- int ** matrix - указатель на указатель целых чисел, будет содержать адреса строк матрицы
- int * tmp - указатель на целое число, будет использоваться как временная переменная
- Проверка выделения памяти под матрицу, если память не удалось выделить, то выводится сообщение об ошибке и программа завершается.
- В каждой строке матрицы выделена память под столбцы и заполнены значениями от (i+1)10 до (i+1)10+9.
- Выводится исходная матрица.
- В цикле ROLLOUTS происходит сдвиг строк матрицы вверх на 2 позиции.
- Выводится измененная матрица.
- Освобождается память, выделенная под матрицу и временную переменную tmp.
- Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д