Использование имени процедуры в качестве параметра другой процедуры - C (СИ) (71691)
Формулировка задачи:
Составить программу по заданному условию. Первая часть условия является заданием на разработку процедур для любой функции f1, f2. Условие второй части задания предполагает обязательное использование разработанной процедуры. В качестве исходного данного в большинстве заданий используется квадратная матрица А.
Для двух массивов В и С одинаковой длины составить процедуру, формирующую массив Т, по длине совпадающий с исходными, каждый элемент которого Тк равен сумме Вi и Сi в случае, если f2(Ci)>f1(Bi)>0. Если массив Т по длине получается меньше исходных, то он дополняется нулями.
Используя в качестве f1 синус, а в качестве f2 косинус, сформировать матрицу Е из А по правилу: первая строка матрицы Е формируется с помощью процедуры из двух первых столбцов матрицы А, вторая строка – из следующей пары столбцов и т.д.
Решение задачи: «Использование имени процедуры в качестве параметра другой процедуры»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> void foo (B, C, T, len, f1, f2) int * B, * C, * T; int (*f1) (int), (*f2) (int); const size_t i len; { uint64_t i = 0, j = 0; memset(T, 0, len * sizeof(int)); for (; i < len; i++) { register int t = f1(B[i]); if (t > 0 && f2(C[i]) > t) T[j++] = C[i] + B[i]; } }
Объяснение кода листинга программы
В данном коде:
- Объявлены функции
foo
,f1
иf2
. - В функции
foo
используются параметрыB
,C
,T
,len
,f1
иf2
. - В функции
foo
определены две переменные типаuint64_t
-i
иj
, которые используются для итерации по массивуT
. - В функции
foo
происходит инициализация массиваT
нулями при помощи функцииmemset
. - В функции
foo
происходит цикл по массивуB
, в котором вызывается функцияf1
для каждого элемента массиваB
. - Результат работы функции
f1
сохраняется в переменнойt
. - Если
t
больше нуля и результат работы функцииf2
для соответствующего элемента массиваC
большеt
, то значение этого элемента массиваC
добавляется к значению соответствующего элемента массиваB
и записывается в массивT
. - После каждой итерации значение переменной
j
увеличивается на единицу. - В конце цикла значение переменной
i
сравнивается сlen
, и если они не равны, то происходит выход из цикла. - Значение переменной
j
выравнивается сlen
при помощи операции остатка от деления. - Результатом работы функции
foo
является массивT
, содержащий результаты сложения элементов массивовB
иC
с учетом условий, заданных функциямиf1
иf2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д