Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
// Тема: передача имени функции в качестве параметра
// Программа нахождения определенного интеграла
// функции f(x) на отрезке [a, b] с точностью eps методом
// КРИВОЛИНЕЙНЫХ трапеций (метод СРЕДНИХ прямоугольников).
// Рекурсия. Два варианта функций.
#include <iostream.h>
#include <math.h>
#include <conio.h>
typedef double(*tfun)(double); //определение типа функции
double integral(double a, double b, double h, double eps, tfun fun, double s);
double fun1(double x);
double fun2(double x);
int main()
{int var;
double shag, rez, s = 0;
tfun fun;
double a, b, eps;
clrscr();
for(;;)
{
//Выбор действия
cout << "\n Возможный вид действия:\n";
cout << " 1 - нахождение определенного интеграла функции sin(x)\n";
cout << " 2 - нахождение определенного интеграла функции -x^2 + 8\n";
cout << " 3 - завершение задачи\n";
cout << " Введите вид действия ->";
cin >> var;
switch(var)
{case 1: fun = fun1;
break;
case 2: fun = fun2;
break;
default:return 0;
}
//Ввод исходных данных
cout << " Введите границы интервала a и b, ";
cout << " начальный шаг и точность вычисления\n";
cin >> a >> b >> shag >> eps;
rez = integral(a, b, shag, eps, fun, s);
//Вывод результата
cout.precision(4);
cout << " Результат =" << rez << endl;
}
}
//нахождение определенного интеграла методом криволинейных трапеций
double integral(double a, double b, double h, double eps, tfun fun, double s1)
{double x, s = 0;
for(x = a + h / 2; x < b; x += h)
s += fun(x);
s *= h;
if (fabs(s - s1) > eps)
{h /= 2;
s = integral(a, b, h, eps, fun, s);
}
return s;
}
//описание вида функции №1
double fun1(double x)
{return (sin(x));
}
//описание вида функции №2
double fun2(double x)
{return (- x * x + 8);
}
Дата публикования: 2015-09-18; Прочитано: 169 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!