Удалить из матрицы строки, в которых элементы не образуют монотонную последовательность - C (СИ)
Формулировка задачи:
Решение задачи: «Удалить из матрицы строки, в которых элементы не образуют монотонную последовательность»
#include <stdio.h> #include <stdbool.h> #define M 6 #define N 4 static bool NonDescendingRatio(const int item, const int nextItem) { return (item <= nextItem); } static bool NonAcsendingRatio(const int item, const int nextItem) { return (item >= nextItem); } static bool IsRowMonotonic(const int* const row, const int n, bool (*ratio)(const int, const int)) { bool isMonotonic = true; int i = 0;; while ((i < n - 1) && isMonotonic) { isMonotonic = ratio(row[i], row[i + 1]); i++; } return isMonotonic; } static void DeleteRow(int (*matrix)[N], const int index, const int m, const int n) { for (int i = index; i < m - 1; i++) { for (int j = 0; j < n; j++) matrix[i][j] = matrix[i + 1][j]; } } static void TransformMatrix(int (*matrix)[N], int* const rowCountPtr, const int colCount) { int m = *rowCountPtr; int n = colCount; int i = 0; while (i < m) { if (!IsRowMonotonic(matrix[i], n, NonAcsendingRatio) && !IsRowMonotonic(matrix[i], n, NonDescendingRatio)) { DeleteRow(matrix, i, m, n); m--; } i++; } *rowCountPtr = m; } int main(void) { int m = M; int n = N; int a[M][N] = { {1, 2, 3, 4}, // + {3, 2, 6, 1}, // - {4, 4, 4, 4}, // + {9, 8, 7, 6}, // + {9, 6, 7, 4}, // - {1, 1, 2, 2} // + }; printf("Before:\n"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) printf("%d ", a[i][j]); printf("\n"); } TransformMatrix(a, &m, n); printf("After:\n"); for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) printf("%d ", a[i][j]); printf("\n"); } return 0; }
Объяснение кода листинга программы
В этом коде реализована функция, которая удаляет строки из матрицы, в которых элементы не образуют монотонную последовательность. Сначала определены две функции-оболочки для проверки монотонности возрастающей и убывающей последовательностей. Затем определена функция для проверки монотонности строки матрицы. Функция удаления строки определена внутри функции проверки, и она вызывается, если строка не является монотонной. В функции main определена матрица, и перед выполнением кода выводится её исходное состояние. Затем вызывается функция TransformMatrix, которая проверяет каждую строку матрицы на монотонность и, если строка не является монотонной, удаляет её. После выполнения функции выводится измененное состояние матрицы. Код удаляет строки с элементами, не образующими монотонную последовательность, и выводит измененное состояние матрицы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д