Решение системы уравнений: написать функцию, которая как параметр будет использовать другую функцию - C (СИ)
Формулировка задачи:
Ребята помогите разобраться с указателем на функцию!
у меня решается система ДУ методом Рунге_кутта. я хочу написать функцию, которая как параметр будет использовать другую функцию. Пытаюсь организовать все это с помощью указателей - пока не получается.
Я понимаю, что функция Runge написано неправильно, потому что нельзя так писать параметры указателя.
Но как сделать правильно - не понимаю...
Объясните плиз
Листинг программы
- double Speed(double Vk, double t, double teta, double y, double Wx, int rejim)
- double func_x(double Vk, double t, double teta, double y, double Wx, int rejim)
- double func_y(double Vk, double t, double teta, double y, double Wx, int rejim)
- double Runge (double (*point)(double, double, double, double, double, int))
- {
- double k1, k2, k3, k4;
- double Vk1, Vk2,Vk3, t1, teta1;
- k1 = point(Vk,t,teta,y,Wx,rejim);
- Vk1=Vk+(h*0.5)*k1;
- k2 = point(Vk1, t+0.5*h, teta,y,Wx,rejim);
- Vk2=Vk+(h*0.5)*k2;
- k3 = point(Vk2, t+0.5*h, teta,y,Wx,rejim);
- Vk4 = Vk + h*k3;
- k4 = point(Vk3, t+h, teta,y,Wx,rejim);
- return (Vk + (h/6)*(k1+2*k2+2*k3+k4));
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- ...
- ...
- Vk[i+1] = Runge (Speed (Vk[i], t, teta[i], y[i], Wx, 1));
- Teta[i+1]=Runge(Ugol( (Vk[i], t, teta[i], y[i], Wx, 1));
- x[i+1]=Runge(func_x( (Vk[i], t, teta[i], y[i], Wx, 1));
- y[i+1]=Runge(func_y( (Vk[i], t, teta[i], y[i], Wx, 1));
- ...
- ...
- }
Решение задачи: «Решение системы уравнений: написать функцию, которая как параметр будет использовать другую функцию»
textual
Листинг программы
- #include <iostream>
- double sum ( double x, double y )
- {
- return x + y;
- }
- double dif ( double x, double y )
- {
- return x - y;
- }
- /*
- * Объявляем новый тип func - указатель на функцию с двумя аргументами
- * типа double, возвращающими значение типа double
- * Можно было бы обойтись без этого, определив прототип функции eval так:
- * double eval( double (*func) (double, double), double x, double y)
- */
- typedef double ( *func ) ( double, double );
- double eval ( func f, double x, double y )
- {
- return f ( x, y );
- }
- int main()
- {
- double x = 16.8, y = 2.345;
- std::cout << "x = " << x << ", y = " << y << std::endl;
- std::cout << "Evaluating the sum of x and y: " << eval ( sum, x, y ) << std::endl;
- std::cout << "Evaluating the difference between x and y: " << eval ( dif, x, y )
- << std::endl;
- return 0;
- }
Объяснение кода листинга программы
- Подключение заголовочного файла iostream для использования функций вывода
- Объявление двух функций: sum и dif, которые принимают два аргумента типа double и возвращают double
- Объявление нового типа данных func, который является указателем на функцию с двумя аргументами типа double, возвращающую значение типа double
- Объявление функции eval, которая принимает три аргумента: func (указатель на функцию), x (double), y (double) и возвращает double
- В функции main() объявляются три переменные: x (16.8), y (2.345), и указатель на функцию f, который будет использоваться в eval
- Вывод на консоль значений переменных x и y
- Вызов функции eval с аргументами sum, x, y, и вывод результата на консоль
- Вызов функции eval с аргументами dif, x, y, и вывод результата на консоль
- Возврат значения 0 из функции main(), что означает успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д