Программа, которая удаляет элементы из целочисленного массива - C (СИ)
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, написать программу, которая удаляет все элементы, большие 5 из целочисленного массива, и при этом подсчитывает их количество. Заранее благодарен.
Решение задачи: «Программа, которая удаляет элементы из целочисленного массива»
textual
Листинг программы
#include <stdio.h> int large5(int value) { return (5 < value); } size_t rem(int arr[], size_t size, int (*func)(int)) { size_t cnt = 0, i, j; for (i = 0, j = 0; i < size; ++i) { if (func(arr[i])) { cnt++; } else { arr[j++] = arr[i]; } } return cnt; } int main() { int arr[] = {10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2, 1, 10}; size_t size = sizeof(arr) / sizeof(*arr); size_t i = rem(arr, size, large5); size -= i; printf("remove = %u\n", i); for (i = 0; i < size; ++i) { printf("%u ", arr[i]); } printf("\n"); return 0; }
Объяснение кода листинга программы
- Создается функция
large5
, которая принимает целочисленный аргумент и возвращает булево значение, используя оператор сравнения<
. - Создается функция
rem
, которая принимает целочисленный массив, его размер и функцию обратного вызова, которая принимает целочисленный аргумент и возвращает булево значение. Функция перемещает элементы массива, используя указанную функцию обратного вызова, и возвращает количество удаленных элементов. - В функции
main
определяется целочисленный массивarr
с 19 элементами. - Размер массива определяется как результат деления размера массива на размер одного элемента, а затем вычитается единица.
- Функция
rem
вызывается для массиваarr
с указанной функцией обратного вызоваlarge5
, и результат сохраняется в переменнойi
. - Размер массива уменьшается на количество удаленных элементов.
- Выводится количество удаленных элементов.
- В цикле выводятся оставшиеся элементы массива.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д