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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 02:15   #1
Kotik Wasil
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 11
Вопрос Ряды (язык Pelles C)

Вычислить сумму ряда (приближенное значение функции arctg)с точностью eps.
(Сумма ряда, где i принимает значения от 0 до N (-1)^i*(x^(2i+1)/(2i+1))
Значения x и eps вводятся с клавиатуры. Полученный результат и значение библиотечной функции arctg вывести на экран.
NOY
Kotik Wasil вне форума Ответить с цитированием
Старый 30.11.2010, 16:01   #2
Grimer
Новичок
Джуниор
 
Регистрация: 25.11.2010
Сообщений: 2
По умолчанию вот что у меня получилось, требуется критика

Код:
// Headers

#include <iostream.h>
#include <math.h>

/*
* Вычислить сумму ряда (приближенное значение функции arctg)с точностью eps.
* (Сумма ряда, где i принимает значения от 0 до N (-1)^i*(x^(2i+1)/(2i+1))
* Значения x и eps вводятся с клавиатуры. Полученный результат и значение библиотечной функции arctg вывести на экран.
*/
int _tmain(int argc, _TCHAR* argv[])
{
	// русские буковки у меня в консоль
	// не выводятся
	cout << "Input precision (decimal digits): ";
	int eps = 0;
	cin >> eps;
	if ((eps < 0) || (eps > 10))
	{
		eps = 10;
	}
	double deps = 1.0;
	double mult = 1;
	while (eps-- > 0)
	{
		deps = deps / 10.0;
		mult = mult * 10;
	}

	cout << "Input x (-1; 1): ";
	double x_1;
	cin >> x_1;
	if (fabs(x_1) > 1)
	{
		cout << "Incorrect input, defaulted to 0";
		x_1 = 0;
	}
	double x_2 = x_1 * x_1;

	double atn = 0.0;
	double elem = 0.0;
	int i = 0;
	double arg = x_1;
	while (1)
	{
		if (i > 0) arg = arg * x_2;
		elem = ((i % 2 ? -1.0 : 1.0) * arg) / double(2 * i + 1);
		atn = atn + elem;
		if (fabs(elem) < deps) break;
		i++;
	}


	atn = atn * mult;
	atn = atn > 0 ? ceil(atn) : floor(atn);
	atn = atn / mult;
	double crt_atn = atan(x_1) * mult;
	crt_atn = crt_atn > 0 ? ceil(crt_atn) : floor(crt_atn);
	crt_atn = crt_atn / mult;

	// не знаю как заставить cout выводить больше
	// десятичных символов...
	cout << "Value of my atn: " << atn << '\n';
	cout << "actual value of atn: " << crt_atn << '\n';

           cout << "Press any key to continue...";
 	// не знаю, как правильно сделать, чтобы приложение ожидало
	// ввода
	cin.get();
	cin.get();
	return 0;
}
Grimer вне форума Ответить с цитированием
Старый 07.12.2010, 21:02   #3
Kotik Wasil
Пользователь
 
Регистрация: 28.11.2010
Сообщений: 11
Сообщение

Ну ты, Grimer, дал.
ты очень умный) вот я ничего не понял из того, что ты написал XD.
я ещё на первом курсе и таких умных буковок ещё не видел. прокоментировать не смогу.
вот что у меня вышло:
п.с. Grimer, всёравно спасибо)


#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
double so, x, eps, i;
printf("vvedite eps, x: ");
scanf("%lf %lf", &eps, &x); i=0;
so= ((pow (-1, i))*(pow(x, 2*i+1))/(2*i+1)); // высчитываем начальную сумму(с i=0)

while (((pow (-1, i))*(pow(x, 2*i+1))/(2*i+1)) - // считаем разнизу между предыдущим
((pow (-1, (i+1)))*(pow(x, 2*(i+1)+1))/(2*(i+1)+1)) > eps) // и текущим вычислением
{
i=i+1;
so=so + ((pow (-1, i))*(pow(x, 2*i+1))/(2*i+1)); // высчитываем общую сумму
}

printf("%lf\n" ,so);
return 0;
}
NOY
Kotik Wasil вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык Pelles C Массивы Kotik Wasil Помощь студентам 0 28.11.2010 21:37
задачи на Pelles C Ядревская Анна Помощь студентам 0 09.10.2010 15:25
Pelles C: операции над двоичными числами в файле, удаление строки из массива TripleX Помощь студентам 12 13.06.2010 14:54