В матрице А размера m*n сдвинуть строки вверх на одну и поставить первую строку на место последней - C (СИ)
Формулировка задачи:
Написать и протестировать функцию для решения следующей задачи.
В матрице А размера m*n сдвинуть строки вверх на одну и поставить первую строку на место последней.
Решение задачи: «В матрице А размера m*n сдвинуть строки вверх на одну и поставить первую строку на место последней»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#define ROWS 5
#define COLUMNS 4
int main(void) {
int matr[ROWS][COLUMNS] = {
{ 1, 1, 1, 1 },
{ 2, 2, 2, 2 },
{ 3, 3, 3, 3 },
{ 4, 4, 4, 4 },
{ 5, 5, 5, 5 }
}, tmp[COLUMNS], i, j;
printf("Before:\n");
for ( i = 0; i < ROWS; ++i ) {
for ( j = 0; j < COLUMNS; ++j )
printf("%d ", matr[i][j]);
printf("\n");
}
memcpy(tmp, matr[0], COLUMNS * sizeof(int));
for ( i = 1; i < ROWS; ++i )
memcpy(matr[i-1], matr[i], COLUMNS * sizeof(int));
memcpy(matr[ROWS-1], tmp, COLUMNS * sizeof(int));
printf("After:\n");
for ( i = 0; i < ROWS; ++i ) {
for ( j = 0; j < COLUMNS; ++j )
printf("%d ", matr[i][j]);
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые библиотеки для работы с файлами и строками
- Определяются размеры матрицы (количество строк и столбцов)
- Создается матрица типа int с размерами ROWS на COLUMNS и заполняется тестовыми значениями от 1 до 5
- Выводится исходная матрица на экран
- Создается временный массив tmp размером COLUMNS, в который копируются значения из первой строки матрицы
- С помощью цикла и функции memcpy из библиотеки C, значения каждой строки матрицы, начиная со второй, заменяются значениями следующей строки
- В последнюю строку матрицы копируются значения из временного массива tmp
- Выводится измененная матрица на экран
- Программа возвращает 0, заканчивая свое выполнение