Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2012, 18:37   #1
prettynetty
Пользователь
 
Регистрация: 03.03.2012
Сообщений: 11
По умолчанию передача функции в качестве параметров функций, С++

Вычислить выражение
интеграл.JPG
Интегралы вычислять с точностью = 0.00001.
Проблема с функцией f2, остальное все вычисляет.
Код:
#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);
}

Последний раз редактировалось Stilet; 17.03.2012 в 19:56.
prettynetty вне форума Ответить с цитированием
Старый 17.03.2012, 19:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Видимо проблема в том что в f2() попадает параметр, который не может быть вычислен логарифмом. Советую поставить туда проверку
Код:
if(x<=1) return 0;
Или типа такой.

P.S. Кстати некультурно не описывать текст ошибки. Как будто кость собакам кинул - грызите мол.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.03.2012, 20:11   #3
prettynetty
Пользователь
 
Регистрация: 03.03.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Видимо проблема в том что в f2() попадает параметр, который не может быть вычислен логарифмом. Советую поставить туда проверку
Код:
if(x<=1) return 0;
Или типа такой.

P.S. Кстати некультурно не описывать текст ошибки. Как будто кость собакам кинул - грызите мол.
ошибка логическая, поэтому текста ошибки и нету

исправила. теперь все работает. спасибо!
prettynetty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметров функции Кипящий чайник Общие вопросы C/C++ 12 11.08.2010 19:45
Как можно передать переменную типа struct в качестве входных параметров функции kitty19 Помощь студентам 1 15.12.2009 17:43
использование функций в качестве параметров других функций mono Помощь студентам 0 20.04.2009 18:25
Функции. Передача массива в качестве параметра функции. Wia Помощь студентам 2 17.03.2009 14:57
передача объектов как параметров функций в Dll Umen Общие вопросы Delphi 9 12.11.2006 19:31