Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Указатели на функции. Программа поиска максимума произвольной функции.

Читайте также:
  1. II. РАБОЧАЯ УЧЕБНАЯ ПРОГРАММА ДИСЦИПЛИНЫ
  2. III. Учебная программа
  3. III.3.3. Программа проведения ГЭО
  4. XI. ПРОГРАММА СОРЕВНОВАНИЙ
  5. Агрегатные функции.
  6. Академическая программа.
  7. Альвеоциты I типа. Особенности строения, функции. Особенности энергетического обмена. Механизм секреции воды.

В языке Си функция не является переменной, но можно определить указатель на функцию и работать с ним как с обычной переменной: присваивать, размещать в массиве, передавать в качестве параметра функции, возвращать как результат из функции. Например, объявление double (*f) (double x, double y); определяет f как указатель на функцию, имеющую два аргумента типа double и возвращающую значение типа double. Здесь скобки вокруг имени указателя (*f) важны, запись double *f (double x, double y); определяет f как функцию, с двумя аргументами типа double, которая возвращает указатель на double.

Рассмотрим задачу нахождения максимального значения функции y = f (x) на отрезке [ a, b ]. Применим метод перебора для решения этой задачи. Выберем на отрезке [ a, b ] n точек, расположенных на одинаковом расстоянии
друг от друга. Их координаты можно вычислить по формуле .
В каждой из этих точек вычислим значение функции и выберем среди этих значений максимальное.
Большая часть работы описанного алгоритма поиска максимума не зависит от вида функции, максимум которой нужно найти, поэтому хотелось бы написать программу, пригодную для поиска максимума любой функции. Это можно сделать, если алгоритм поиска максимума реализовать в виде функции, в качестве аргумента которой будет передаваться указатель на функцию для вычисления f (x).
/* maxfun: возвращает максимальное значение функции, значения которой вычисляются с помощью функции, заданной указателем f*/
double maxfun(double (*f)(double), double a, double b, int n)
/* f – указатель на функцию с одним аргументом типа double и возвращающую значение типа double;
a, b – границы отрезка определения функции; n – число точек на отрезке, в которых вычисляется функция. */
{ double dx, fx, max;
dx = (b - a)/(n - 1); //Расстояние между узлами
max = f(a); //Предполагаем, что максимум на левой границе
while((a+=dx) <= b){
fx = f(a); //Значение функции в текущей точке
if(fx > max)
max = fx; }
return max;
}
#include <math.h>
#include <stdio.h>
double erf(double); //Прототип некоторой функции
void main()
{//Исследуем библиотечную функцию синус
cout << "\nmax sin(x) при 0 < x < Pi = " << maxfun(sin, 0, M_PI, 50);
//Исследуем функцию norm
cout << "\nmax norm(x) при -2 < x < 2 = " << maxfun(norm, -2, 2, 50);
}
double norm(double x)
{ return exp(-x*x)/sqrt(2 * M_PI);}

 


Дата добавления: 2015-07-08; просмотров: 438 | Нарушение авторских прав


Читайте в этой же книге: Целые типы в языке Си и операции над ними. Представление целых констант в различных системах счисления. | Операторы присваивания. Приоритет и порядок выполнения операторов. Привести примеры. | Цикл do…while. Программа вычисления квадратного корня. | Функции. Формальные параметры и фактические аргументы. Способ передачи аргументов в функции. Привести пример. | Массивы как аргументы функций. Функция сортировки массива методом пузырька. | Символы и символьные константы. Представления символов. Ввод и вывод символов. Привести примеры. | Привести пример программы по обработке строк. | Препроцессор. Директивы препроцессора. | Макросы. Макросы с параметрами. | Указатели и адреса. Привести пример программы, использующей указатели. |
<== предыдущая страница | следующая страница ==>
Указатели и массивы. Адресная арифметика.| А) в разделении труда между специалистами, способными более эффективно выполнить работу

mybiblioteka.su - 2015-2024 год. (0.007 сек.)