Похожие презентации:
Параметр функции – указатель на функцию
1.
Лекция «Параметр функции –указатель на функцию»
Читает старший преподаватель
Филимонова Ольга Александровна
2.
Написать функцию, вычисляющуюопределенный интеграл некой
подынтегральной функции
Алгоритм реализуется одним из
численных методов решения:
Метод левых прямоугольников
Метод правых прямоугольников
Метод трапеций
Метод Симпсона и пр.
3.
Нижняя граница интегрирования (double a)Верхняя граница интегрирования (double b)
Количество разбиения интервала интегрирования
(количество прямоугольников) (int n)
Подынтегральная функция ( ??? )
Проблема: можно ли передать в функцию
Другую функцию?
4.
Необходимо ответить на вопросы:Как объявить соответствующий параметр
функции?
Как внутри функции вызвать Другую
функцию?
Какой аргумент передать при вызове
функции?
5.
Функция (как и массив) передается по адресу,следовательно параметр функции –
Указатель на Другую функцию
6.
Рассмотрим несколько вариантов объявлений:void (*F1) (void);
int (*F2) (int, float);
double (*F3) (double);
Объявлены переменные:
F1- указатель на функцию типа void без параметров
F2 – указатель на функцию целого типа с параметрами int,
float
F3 – указатель на функцию типа double c параметром double
7.
Из примеров видно, что при объявлении указателяна функцию важны характеристики функции:
Тип функции
Количество параметров функции
Типы параметров функции
8.
Пусть объявлен параметр функции:double (*F3) (double)
Для вызова этой функции необходимо:
Объявить переменную под результат;
Знать аргумент.
Например:
double Result, Arg=3.14;
Result=F3(Arg);
При вызове используем указатель как имя функции
9.
Пусть объявлена функция с параметром:double Func (double (*F3) (double) );
Имя конкретной функции с точно такими же
характеристиками, как у указателя, является ее адресом.
Например:
double Result;
Result=Func(sin); // передаем функцию
// double sin(double)
При вызове используем имя конкретной функции как ее
адрес
10.
Написать программу с функцией,вычисляющей определенный интеграл
методом левых прямоугольников.
11.
- ----double Integral(double (*F)(double), double a, double b, int n){
int i;
double h=(b-a)/n, result=0;
for(i=0; i<n; i++)
result+=F(a+i*h);
return h*result;
}
int main(void)
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
double a, b, res;
int n ;
cout<< "\nВведите a, b, n: ";
cin>>a>>b>>n;
res=Integral(sin, a, b, n);
cout<< "\nИнтеграл равен "<<res<<endl;
return 0;
}
12.
Если необходимой подынтегральной функциинет, напишите ее сами, и ее имя передайте при
вызове.
Например:
double MyFunc(double x)
{
return x*x+1;
}
Вызов:
res=Integral(MyFunc, a, b, n);
13.
Среди стандартных функций есть функции спараметром – указателем на Другую функцию.
Например - функция быстрой сортировки:
Функция qsort() объявляется в stdlib.h так:
void qsort(void*p, int N, int width,
int (*fcmp)(const void*, const void*));
14.
Если значение аргумента при вызовефункции часто используется одно и то же,
то его можно назначить значением
параметра по умолчанию.
15.
При объявлении функции пишем:void Func(int a, int b=0);
При определении функции пишем:
void Func(int a, int b)
{
…
}
Варианты вызова: Func(10, 20); Func(15);
Важно! Параметры со значением по умолчанию
располагаем в конце списка параметров.
16.
Например, известная стандартная функцияимеет характеристики:
…getline(char*str, int n, char lim=‘\n’);
Часто вызывается:
char str[80];
cin.getline(str, 80);
Но можно и так:
cin.getline(str, 80, ‘!’);