2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
1

Передача функции в качестве параметра

14.12.2017, 13:52. Показов 743. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <math.h>
using namespace std;
 
double f(double x) {
    return (2*x*x)-(exp(x));
 
 double Find(double x0, double h, double eps1, double eps2, int maxstep, f)
    {
    double a, b, c, fa, fb, fc, fo, o, fmin, min, fmax, max;
    int k;
    a = x0;
    fa = f(a);
    b = x0+h;
    fb = f(b);
    if(fa <= fb)
    {
        c = x0-h;
        fc = f(c);}
    else{
        c = x0+2*h;
        fc = f(c);}
    for(k = 0; k < maxstep; k++ )
    {
 
 fmin = fa;
 min = a;
 if (fb < min) {
        fmin = fb;
        min = b;
    }
    if (fc < min) {
        fmin = fc;
        min = c;
    }
 
    o = 0.5 *((((b*b) - (c*c))*fa + ((c*c)-(a*a))*fb + ((a*a)-(b*b))*fc) / ((((b-c)*fa) + ((c-a)*fb) + ((a-b)*fc))));
    fo = f(o);
if ((fabs((o-min)/o) < eps1) &&
         (abs((fo-fmin)/fo) < eps2)) break;
 
fmax = fa;
max = a;
if (fb > fmax) {
        fmax = fb;
        max = b;
    }
    if (fc > max) {
        fc = max;
        max = c;
    }
 
    if (fo < fmin){
        max = o;
        fmax = fo;
    }
    else{
        max = 2*min-o;
        fmax = f(max);
    }
    }
    return o;
    }
 
    int main()
    {
double x;
x = Find(10, 0.1, 0.00001, 0.00001, 100, f);
 
    cout << x << endl;
    cout << f(x) << endl;
    system("pause");
    return 0;
}
Как передать f(double x) в качестве параметра для main и для find
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2017, 13:52
Ответы с готовыми решениями:

Передача функции в качестве параметра
Как передать функцию с параметрами в transform? Т.е., например, мне надо из каждого числа вектора...

Передача CString в качестве параметра функции
Добрый всем вечер! Мучает один вопрос, на который не могу найти ответ. Как наилучшим образом...

Передача лямбда-функции в качестве параметра
Коллеги, доброго всем времени суток. Помогите, пожалуйста, с такой проблемой. Передаю функцию в...

Функции, передача массива в качестве параметра
Приветствую) Собственно, есть простенькое задание с двумерными массивами, оно выполнено: ...

10
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
14.12.2017, 13:56 2
C++
1
double Find(double x0, double h, double eps1, double eps2, int maxstep, double (*f)(double))
0
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
14.12.2017, 14:01  [ТС] 3
nmcf,
error C2440: <function-style-cast>: невозможно преобразовать 'double (double)' в 'double'
error C2144: синтаксическая ошибка: перед "double" требуется ")"
error C2059: синтаксическая ошибка: )

строка 68
0
зомбяк
1562 / 1211 / 344
Регистрация: 14.05.2017
Сообщений: 3,925
14.12.2017, 14:15 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 double Find(double x0, double h, double eps1, double eps2, int maxstep, double (*f)(double))
    {
    double a, b, c, fa, fb, fc, fo, o, fmin, min, fmax, max;
    int k;
    a = x0;
    fa = (*f)(a);
    b = x0+h;
    fb = (*f)(b);
    if(fa <= fb)
    {
        c = x0-h;
        fc = (*f)(c);}
    else{
        c = x0+2*h;
        fc = (*f)(c);}
    for(k = 0; k < maxstep; k++ )
    {
 
 fmin = fa;
 min = a;
 if (fb < min) {
        fmin = fb;
        min = b;
    }
    if (fc < min) {
        fmin = fc;
        min = c;
    }
 
    o = 0.5 *((((b*b) - (c*c))*fa + ((c*c)-(a*a))*fb + ((a*a)-(b*b))*fc) / ((((b-c)*fa) + ((c-a)*fb) + ((a-b)*fc))));
    fo = (*f)(o);
if ((fabs((o-min)/o) < eps1) &&
         (abs((fo-fmin)/fo) < eps2)) break;
 
fmax = fa;
max = a;
if (fb > fmax) {
        fmax = fb;
        max = b;
    }
    if (fc > max) {
        fc = max;
        max = c;
    }
 
    if (fo < fmin){
        max = o;
        fmax = fo;
    }
    else{
        max = 2*min-o;
        fmax = (*f)(max);
    }
    }
    return o;
    }
Добавлено через 2 минуты
double f(double x) {
return (2*x*x)-(exp(x));
пропущена закрывающая скобка
0
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
14.12.2017, 14:27  [ТС] 5
TRam_, скобку я закрыл, ошибки остались и после замены f на (*f)

Добавлено через 6 минут
Подумал, а зачем вообще ее передавать так, если просто можно вызывать fa = f(a); удалил с параметров, все вроде норм
0
зомбяк
1562 / 1211 / 344
Регистрация: 14.05.2017
Сообщений: 3,925
14.12.2017, 14:30 6
Витек1221, конечно можно. Передавать нужно только в том случае, если вместо double f(double x) нужно передавать ещё какие-то функции.

Цитата Сообщение от Витек1221 Посмотреть сообщение
ошибки остались
мог бы и написать, что за ошибки.
0
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
14.12.2017, 14:35  [ТС] 7
TRam_, теже ошибки что и выше я описал
error C2440: <function-style-cast>: невозможно преобразовать 'double (double)' в 'double'
error C2144: синтаксическая ошибка: перед "double" требуется ")"
error C2059: синтаксическая ошибка: )
0
зомбяк
1562 / 1211 / 344
Регистрация: 14.05.2017
Сообщений: 3,925
14.12.2017, 14:38 8
Цитата Сообщение от Витек1221 Посмотреть сообщение
невозможно преобразовать 'double (double)' в 'double'
а строку кода там не показывает? Или тоже 68ая?
0
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
14.12.2017, 14:41  [ТС] 9
TRam_, да, там где в мейне вызывается x = Find()
0
зомбяк
1562 / 1211 / 344
Регистрация: 14.05.2017
Сообщений: 3,925
14.12.2017, 14:49 10
Первую строку, как было в постах #2 и #4, изменил?
0
2 / 2 / 1
Регистрация: 20.12.2016
Сообщений: 121
14.12.2017, 14:55  [ТС] 11
да"!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2017, 14:55
Помогаю со студенческими работами здесь

Передача временного массива в качестве параметра функции
Здравствуйте, можно ли как то описать параметр функции, что бы передавать в нее не существующий, а...

Передача функции в качестве параметра в другую функцию
Задание стоит следующее: Написать программу, содержащую две функции. Первая функция, вычисляющая...

Передача функции с двумерным массивов в качестве параметра
Всем доброго времени суток. У меня проблема следующего плана. Есть некая функция void...

Передача двумерного массива указателей на char в качестве параметра функции
Есть массив char *result2; Нужно передать его в функцию void defDouble(???) в качестве одного из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru