Использование имени процедуры в качестве параметра другой процедуры - 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];
  }
}

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

В данном коде:

  1. Объявлены функции foo, f1 и f2.
  2. В функции foo используются параметры B, C, T, len, f1 и f2.
  3. В функции foo определены две переменные типа uint64_t - i и j, которые используются для итерации по массиву T.
  4. В функции foo происходит инициализация массива T нулями при помощи функции memset.
  5. В функции foo происходит цикл по массиву B, в котором вызывается функция f1 для каждого элемента массива B.
  6. Результат работы функции f1 сохраняется в переменной t.
  7. Если t больше нуля и результат работы функции f2 для соответствующего элемента массива C больше t, то значение этого элемента массива C добавляется к значению соответствующего элемента массива B и записывается в массив T.
  8. После каждой итерации значение переменной j увеличивается на единицу.
  9. В конце цикла значение переменной i сравнивается с len, и если они не равны, то происходит выход из цикла.
  10. Значение переменной j выравнивается с len при помощи операции остатка от деления.
  11. Результатом работы функции foo является массив T, содержащий результаты сложения элементов массивов B и C с учетом условий, заданных функциями f1 и f2.

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

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