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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.05.2009, 08:33   #1
XSGRAFF
 
Регистрация: 29.12.2008
Сообщений: 8
По умолчанию Вычисление функции


Тип проекта - Win32 Project
Задание: Вычислить и вывести на экран в виде таблицы значения функции,заданной с помощью ряда Тейлора,на интервале от хнач до хкон с шагом dx с точностью e.Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента,значение функции и количество просуммированных членов ряда.

Мой вариант программы:

Код:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
int main()
{
double s,sp,x,xn,xk,xd,e;
int n;
cout<<"vvedi xn,xk,xd,e"<<endl;
cin >> xn>>xk>>xd>>e;
if (xn>=xk) cout<<"ochibka"<<endl;
else
{
cout<<" _______________________________________"<<endl;
cout<<"| n | n |   x    |   F  |        Arth(x)   |"<<endl;
cout<<"|---------------------------------------|"<<endl;
//x=xn;
int m=1; 
for (double x=xn; x<=xk; x+=xd)
{n=0;
sp=0;
	do 
	{
		s=1./(pow(x,(2*n+1))*(2*n+1));
		sp+=s;
	 	n++;
		
	}
	while (fabs(s)>e);
		cout<<"|"<<setw(3)<<m<<"|"<<setw(3)<<n<<setw(9)<<x<<"|"<<setw(12)<<sp<<"|"<<setw(12)<<tanh(x)<<endl;
		m++;
}
cout<<" ---------------------------------------"<<endl;
}
return 0;
}
При прогонке должны совпадать значения 3го и 4го столбца,но они не совпадают. Не могу найти ошибку. Прошу помочь найти ошибку и исправить ее. Заранее спасибо.
XSGRAFF вне форума
Старый 25.05.2009, 12:12   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Исходя из вышеприведенной формулы, вроде, должно выглядеть как-то так:
Код:
int m=1;
double tmp,a;
for (double x=xn; x<=xk; x+=xd)
{
n=1;
sp=0;
m = 1;
tmp = x;
s = 1/tmp;
while (fabs(s)>e)
	{
		sp+=s;
		m += 2;
		tmp *= (x*x);
	 n++;
	 s = 1/(m*tmp);
	}
-----------
А что это за формула? Гиперболический арктангенс? Так это не tanh, а atanh. Но только она работает с числами от -1 до 1.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 25.05.2009, 14:33   #3
XSGRAFF
 
Регистрация: 29.12.2008
Сообщений: 8
По умолчанию

Да - это гиперболический арктангенс
XSGRAFF вне форума
Старый 25.05.2009, 14:47   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот.
Код:
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <conio.h>

int main()
{
double s,sp,x,xn,xk,xd,e;
int n;
cout<<"vvedi xn,xk,xd,e"<<endl;
cin >> xn>>xk>>xd>>e;
if (xn>=xk) cout<<"ochibka"<<endl;
else
{
cout<<" _______________________________________"<<endl;
cout<<"| n | n |   x    |   F  |        Arth(x)   |"<<endl;
cout<<"|---------------------------------------|"<<endl;
//x=xn;
int m=1;
double tmp,a;
for (double x=xn; x<=xk; x+=xd)
{
n=1;
sp=0;
m = 1;
tmp = x;
s = 1/tmp;
while (fabs(s)>e)
	{
		sp+=s;
		m += 2;
		tmp *= (x*x);
	 n++;
	 s = 1/(m*tmp);
	}


	cout<<"|"<<setw(3)<<m<<"|"<<setw(3)<<n<<setw(9)<<x<<"|"<<setw(12)<<sp<<"|"<<setw(12)<<0.5*log((x+1)/(x-1))<<endl;
	m++;
}
cout<<" ---------------------------------------"<<endl;
}
getch();
return 0;
}
Функция atanh считает только при x от -1 до 1. Поэтому нужно использовать другую функцию для вычисления гиперболического арктангенса. Например, логарифм.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 25.05.2009, 22:56   #5
XSGRAFF
 
Регистрация: 29.12.2008
Сообщений: 8
По умолчанию

спасибо за помощь
XSGRAFF вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление значений функции KREGI Помощь студентам 22 09.03.2009 16:41
Вычисление функции с заданной точностью. Absent Помощь студентам 1 21.11.2008 13:30
Вычисление функции в бейсике Absent Помощь студентам 3 16.11.2008 13:17
Вычисление производной функции mde Помощь студентам 0 01.06.2008 12:52
Паскаль. Вычисление функции СТАС48 Помощь студентам 0 30.11.2007 07:44