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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 16:44   #1
droed.nk
 
Регистрация: 24.10.2011
Сообщений: 3
По умолчанию Сумма знакопеременного ряда

Доброго времени суток. Ситуация стандартнейшая, как описано в теме "насчет халявы"-горю, завтра сдавать. Дело в том, что пытаюсь сдать уже 4 раза, и постоянно отправляют переделывать.
Собственно задача

посчитать сумму этого ряда до определенной точности, точность и аргумент икс вводяться с клавиатуры. Полученое значение сравнить с точным, получаемым в первой функции. Условие для аргумента -1<X<1
сам код
Код:
//лабораторная работа номер 8, разделить обязанности основной функции на несколько подфункций.
#include <iostream>
#include <cmath>
using namespace std; 
//функция подсчета правильного значения
double TrueValue(double x)
{
	double k;
	k=log(x+sqrt(x*x+1));
	return k;
}
// функция ду вайл

double FuncDoWhile (double x, double e)
{
	double z=0,u=x;
	int n=1;
	do
	{
		z=z+u;
		n++;
		u=-u*x*x*(2*n-1)/(2*n)/(2*n+1);
	}
	while (fabs(u)>e);
	return z;
}
// функция вайл ду
double FuncWhileDo(double x, double e)
{
	double z=0,u=x;
	int n=1;
	while (fabs(u)>e)
	{
		z=z+u;
		n++;
		u=-u*x*x*(2*n-1)/(2*n)/(2*n+1);
	} 
	return z;
}
//основная функция
void main(double z)
{
	setlocale(LC_ALL,"russian");
	double x,e; int p;
	cout<<"введите точность e=";
	cin>>e;
	cout<<" введите аргумент x=";
	cin>>x;
	cout<<"Выберите действие:"<<endl;
	cout<<"Если хотите подсчитать сумму ряда с помощью цикла с постусловием, введите 1"<<endl;
	cout<<"Если хотите подсчитать сумму ряда с помощью цикла с предусловием, введите 2"<<endl;
	cin>>p;
	if (p==1) cout<<"Запускаем цикл с постуловием"<<endl<<"Сумма ряда с точностью "<<e<<" = "<<FuncDoWhile(x,e); 
	if (p==2) cout<<"Запускаем цикл с предусловием"<<endl<<"Сумма ряда с точностью "<<e<<" = "<<FuncWhileDo(x,e);

	cout<<endl<<"точное значение="<<TrueValue(x)<<endl;
}
Проблема. Когда ввожу точность 0.0001, то, в зависимости от икса, разница между точным и посчитаным значениями может очень различаться. Ткните меня носом в ошибку, пожалуйста.
droed.nk вне форума Ответить с цитированием
Старый 24.10.2011, 16:46   #2
droed.nk
 
Регистрация: 24.10.2011
Сообщений: 3
По умолчанию

http://imageshack.us/photo/my-images/9/34565.jpg/
вот условие, не прикрепилось к посту почему-то.
droed.nk вне форума Ответить с цитированием
Старый 24.10.2011, 19:09   #3
kypck
Пользователь
 
Регистрация: 23.10.2011
Сообщений: 35
По умолчанию

почему main - void?? и зачем в скобках (double z)

замените на int main()

Перепроверьте эту строчку: "u=-u*x*x*(2*n-1)/(2*n)/(2*n+1);"

Почему она мне не нравится?
kypck вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма ряда Veina Помощь студентам 0 06.04.2011 19:48
сумма ряда [Te[M]ka] Паскаль, Turbo Pascal, PascalABC.NET 5 22.01.2011 17:50
Сумма ряда JustImba Общие вопросы C/C++ 4 26.12.2010 14:29
Найти сумму знакопеременного ряда vbchristy46 Помощь студентам 2 15.06.2010 11:46
сумма ряда klykovka Помощь студентам 16 22.04.2010 18:45