Передача Функции В Качестве Параметров Функций

  • Автор темы prettynetty
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

prettynetty

Гость
#1
Вычислить выражение
. интеграл.JPG
Интегралы вычислять с точностью = 0.00001.
Проблема с функцией f2, остальное все вычисляет.
<!--shcode--><pre><code class='"[i'>[/i]"]#include<windows.h>
#include<math.h>
#include<iostream.h>
float f1(float);
float f2(float);
float f3(float);
float integral(float(*f)(float),float a,float b,float e);
main()
{
SetConsoleOutputCP(1251);
float I=0;
I+=integral(f1,0,0.4,0.00001); //находим интегралы для каждой функции и суммируем их
cout<<"Значение выражения1 равно "<<I;
cout<<endl;
I+=integral(f2,2,2.5,0.00001);
cout<<"Значение выражения2 равно "<<I;
cout<<endl;
I+=integral(f3,0,0.785,0.00001);
cout<<"Значение выражения3 равно "<<I;
cout<<endl;
return 0;
}
float f1(float x)
{
float y;
y=(pow(x,2)-1)/pow(10,2*x);
return y;
}
float f2(float x)
{
float y;
y=1./(x*pow(log(x),2));
return y;
}
float f3(float x)
{
float y;
y=pow(tan(x/2+3.14/4),2);
return y;
}
float integral(float(*f)(float x),float a,float b,float e) //функция для нахождения определенного интеграла методом прямоугольников(первый параметр - указатель на функцию, второй-начало отрезка, третий-конец отрезка, четвертый-точность)
{
float zn=0,zn1=0,h,x;
int n=4,it=0; // n-кол-во разбиений
h=(b-a)/n;
x=h/2;
while(it<n)
{
zn+=h*f(x);
x+=h;
it++;
}
do
{
it=0;
n*=2;
h=(b-a)/n;
x=h/2;
zn1=0;
while(it<n)
{
zn1+=h*f(x);
x+=h;
it++;
}
if(fabs(zn-zn1)<=e)
return zn1;
else zn=zn1;
}
while(1);
}[/CODE]
 
Статус
Закрыто для дальнейших ответов.