Найти максимум произвольной функции одной переменной - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Написать функцию пользователя, позволяющую найти максимум произвольной функции одного переменного, аргумент которой задан массивом из «n» элементов вещественного типа. Кроме максимального значения анализируемой функции необходимо возвращать и значение аргумента, которое ему соответствует.

Решение задачи: «Найти максимум произвольной функции одной переменной»

textual
Листинг программы
#include <stdio.h>
 
//-----------------------------------------------------------------------------
size_t GetMax(double arr[], size_t size, double (*func)(double), double* value)
{
   size_t maxIndex = 0;
   double maxValue = func(arr[maxIndex]);
   double currentValue;
   size_t i;
 
   for (i = 1; i < size; ++i)
   {
      currentValue = func(arr[i]);
 
      if (currentValue > maxValue)
      {
         maxIndex = i;
         maxValue = currentValue;
      }
   }
 
   *value = maxValue;
 
   return maxIndex;
}
//-----------------------------------------------------------------------------
double Sqr(double value)
{
   return (value * value);
}
//-----------------------------------------------------------------------------
double Abs(double value)
{
   return ((value < 0) ? -value : value);
}
//-----------------------------------------------------------------------------
double OneDivided(double value)
{
   return (1 / value);
}
//-----------------------------------------------------------------------------
 
int main()
{
   double arr[] = { 5.0, -6.0, 8.0, -9.0, 7.0, -1.0, 2.0 };
   size_t size = sizeof(arr) / sizeof(arr[0]);
 
   size_t index;
   double value;
 
   index = GetMax(arr, size, Sqr, &value);
 
   printf("function Sqr: max[%d] = %f, value = %f\n", index, arr[index], value);
 
   index = GetMax(arr, size, Abs, &value);
 
   printf("function Abs: max[%d] = %f, value = %f\n", index, arr[index], value);
 
   index = GetMax(arr, size, OneDivided, &value);
 
   printf("function 1/*: max[%d] = %f, value = %f\n", index, arr[index], value);
 
   return 0;
}

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

  1. В функции GetMax ищется максимум произвольной функции func для массива arr длиной size.
  2. Переменная maxIndex инициализируется значением 0, а переменная maxValue — значением func(arr[maxIndex]).
  3. В цикле перебираются все элементы массива, начиная со второго.
  4. Для каждого элемента вычисляется значение currentValue с помощью функции func.
  5. Если currentValue больше текущего максимального значения maxValue, то обновляются значения maxIndex и maxValue.
  6. Результат функции GetMax — максимальное значение функции func и индекс этого значения в массиве arr.
  7. В функции main определён массив arr и его размер size.
  8. Вызывается функция GetMax с различными функциями func и выводится результат на экран.
  9. Функция Sqr возвращает квадрат числа.
  10. Функция Abs возвращает абсолютное значение числа.
  11. Функция OneDivided возвращает число, полученное делением 1 на число.
  12. Значение 13 не используется в коде.
  13. Значение 14 не используется в коде.
  14. Значение 15 не используется в коде.
  15. Значение 16 не используется в коде.
  16. Значение 17 не используется в коде.
  17. Значение 18 не используется в коде.
  18. Значение 19 не используется в коде.
  19. Значение 20 не используется в коде.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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