Циклически сдвинуть строки матрицы на 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);
}

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

  1. Объявлены переменные:
    • ROWS (6) - количество строк в матрице
    • COLUMNS (9) - количество столбцов в матрице
    • ROLLOUTS (2) - количество циклов сдвига
  2. Выделена память под матрицу и временную переменную tmp:
    • int ** matrix - указатель на указатель целых чисел, будет содержать адреса строк матрицы
    • int * tmp - указатель на целое число, будет использоваться как временная переменная
  3. Проверка выделения памяти под матрицу, если память не удалось выделить, то выводится сообщение об ошибке и программа завершается.
  4. В каждой строке матрицы выделена память под столбцы и заполнены значениями от (i+1)10 до (i+1)10+9.
  5. Выводится исходная матрица.
  6. В цикле ROLLOUTS происходит сдвиг строк матрицы вверх на 2 позиции.
  7. Выводится измененная матрица.
  8. Освобождается память, выделенная под матрицу и временную переменную tmp.
  9. Программа завершается.

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


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

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

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