Найти максимум произвольной функции одной переменной - 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; }
Объяснение кода листинга программы
- В функции
GetMax
ищется максимум произвольной функцииfunc
для массиваarr
длинойsize
. - Переменная
maxIndex
инициализируется значением 0, а переменнаяmaxValue
— значениемfunc(arr[maxIndex])
. - В цикле перебираются все элементы массива, начиная со второго.
- Для каждого элемента вычисляется значение
currentValue
с помощью функцииfunc
. - Если
currentValue
больше текущего максимального значенияmaxValue
, то обновляются значенияmaxIndex
иmaxValue
. - Результат функции
GetMax
— максимальное значение функцииfunc
и индекс этого значения в массивеarr
. - В функции
main
определён массивarr
и его размерsize
. - Вызывается функция
GetMax
с различными функциямиfunc
и выводится результат на экран. - Функция
Sqr
возвращает квадрат числа. - Функция
Abs
возвращает абсолютное значение числа. - Функция
OneDivided
возвращает число, полученное делением 1 на число. - Значение 13 не используется в коде.
- Значение 14 не используется в коде.
- Значение 15 не используется в коде.
- Значение 16 не используется в коде.
- Значение 17 не используется в коде.
- Значение 18 не используется в коде.
- Значение 19 не используется в коде.
- Значение 20 не используется в коде.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д