Работа №5
Вариант 1: Отображение
В большинстве современных языков программирования есть очень удобная функция (метод) map, с помощью которой можно выполнить отображение некоторого массива в другой массив по некоторому алгоритму.
Алгоритм при этом задаётся функцией, которая и выполняет необходимое преобразование для каждого элемента массива. Вот пример её работы на языке JavaScript:

Комментарий к коду: есть исходный массив с именем "а" и значениями [1, 2, 3, 4, 5]. Нам необходимо каждый его элемент возвести в квадрат и вывести результат на экран, а затем каждый элемент исходного нетронутого массива "а" удвоить и так же вывести. Для того чтобы выполнить задуманное – мы вызываем функцию (метод) map и передаём ей аргумент – нашу собственную функцию (в данном случае без имени), которая и делает необходимые преобразования с каждым элементом массива и формирует из результатов новый массив (вот одна из них: function(x) {return x * x}).
Напишите аналог функции map на языке С. Функция должна принимать одномерный массив какого-то типа (выберите его сами), число элементов этого массива и указатель на функцию, которую необходимо применить к каждому из элементов. Функция должна возвращать указатель на НОВЫЙ массив такого же типа, как и исходный, значениями элементов которого будут значения, которые возвратит функция, которой переданы в качестве аргументов элементы исходного массива.
Программа должна содержать объявление исходного массива, требуемую функцию, вывод исходного массива на экран, а также вывод на экран результатов работы функции map для каких-либо двух функций по вашему желанию (например, для функции возведения в квадрат и для функции нахождения модуля числа).
Вот пример результатов компиляции и запуска программы для предложенных функций:

Вариант 2: Фильтр
В большинстве современных языков программирования есть очень удобная функция (метод) filter, с помощью которой можно выполнить фильтрацию (отбор нужных) элементов некоторого массива некоторому алгоритму. Алгоритм при этом задаётся функцией, которая и выполняет необходимую проверку каждого элемента массива чтобы понять, сохранять его в результирующем массиве или нет. Вот пример её работы на языке JavaScript:

Комментарий к коду: есть исходный массив с именем "а" и значениями [1, 2, 3, 4, 5]. Мы фильтруем его элементы двумя способами – оставляем чётные элементы и оставляем нечётные. Для этого мы вызываем функцию (метод) filter и передаём ей аргумент – нашу собственную функцию (в данном случае также без имени), которая для каждого элемента возвращает истину или ложь. Если функция возвращает истину – переданный ей аргумент (переданной ей значение) надо переместить в результирующий массив (не отфильтровывать этот элемент). Если функция для некоторого элемента возвращает ложь, то элемент надо отфильтровать (не помещать его в результирующий массив). Вот функция на языке JavaScript, которая принимает 1 аргумент и возвращает истину в том случае, если остаток от деления аргумента на 2 равен 0:
function(x) {
return x % 2 === 0;
}
Напишите аналог функции filter на языке С. Функция должна принимать одномерный массив какого-то типа (выберите его сами), число элементов этого массива и указатель на функцию, которую необходимо применить к каждому из элементов, чтобы понять, оставлять этот элемент в массиве в результате фильтрации или нет. Функция должна возвращать указатель на НОВЫЙ массив такого же типа, как и исходный, в который будут скопированы те элементы исходного массива, для которых фильтрующая функция, переданная в качестве аргумента, вернула значение "истина".
Программа должна содержать объявление исходного массива, требуемую функцию, вывод исходного массива на экран, а также вывод на экран результатов работы функции filter для каких-либо двух функций по вашему желанию.
Время на выполнение – 1 неделя