алгоритм — Функции как входы в переполнении стека

Я пишу функцию для Метод Ньютона в C ++.
Я хочу иметь возможность назначить функцию, которая будет использоваться в алгоритме, но я хочу, чтобы это входные данные.

Например:

double newton(f,df,tolerance,initial_guess,max_iterations)

где е а также Д.Ф. являются функцией и ее производное соответственно.

Но как мне это сделать?

1

Решение

Вы можете сделать это с помощью шаблонов:

#include <math.h>
#include <stdio.h>

template<class F>
void foo(F f, double x) {
printf("f(0) = %f\n", f(x));
}

int main() {
foo(sinf, 0);
foo(cosf, 0);
}

выход:

f(0) = 0.000000
f(0) = 1.000000
1

Другие решения

Вы бы объявили указатель на функцию в качестве входных данных: вот базовый пример:

void printNumber (int input) {
cout << "number entered: " << input << endl;
}

void test (void (*func)(int), int input) {
func(input);
}

int main (void) {
test (printNumber, 5);
return 0;
}

Первый параметр в тесте говорит: возьмите функцию с именем func, которая имеет int в качестве входных данных и возвращает void. Вы бы сделали то же самое с вашей функцией и ее производной.

0

В качестве альтернативы, вы можете написать так в C ++ 11.

(Изменено из кода @ Anycom, ^ _ ^)

#include <math.h>
#include <stdio.h>
#include <functional>void foo(std::function<double(double)> fun, double x) {
printf("f(0) = %f\n", fun(x));
}

int main() {
foo(sinf, 0);
foo(cosf, 0);
}
0
По вопросам рекламы [email protected]