/*
найти сумму ряда (-1)^k/(2*k-1)^2, где k изменяется от 1 до бесконечности, с точностью,
которая вводится с консоли и обозначает количество цифр после десятичной точки.
*/
/*
codeby.net
Autor: DarkKnight125 (Denis Goncharov)
*/
#include <iostream>
#include <iomanip>
using namespace std;
//Введем функцию для определения значения последовательности k-ого члена
double Funct(unsigned long k)
{
return pow(-1.0,(double)k)/pow(2*k-1,2.0);
}
void main(void)
{
setlocale(LC_ALL,".1251"); //Установим локаль
double esp= 0.0; //Это значение нашей точности
int CountZero; //Кол-во знаков после запятой (которые вводит пользователь)
cout << "Введите точность вычисления (кол-во символов после запятой): ";
cin >> CountZero;
esp = pow(10.0, (double)-CountZero); //Вычислим значение точности
unsigned long Iteration = 0; //Итерация K-ый член последовательности
double Sum = 0.0; //Сумма членов
double El = 1.0; //Значение последовательности для текущего члена
while (abs(El) > esp) //Пока модуль El > точности
{
Iteration++; //Увеличик член последовательности
El = Funct(Iteration); //Получим значение для данного члена
Sum += El; //Добавим его к сумме
}
//Вывод информации
cout<<fixed;
cout << "Заданная точность : " << setprecision(CountZero) << esp << endl;
cout << "Кол-во итераций (членов послед.) : " << Iteration << endl;
cout << "Сумма последовательности :" <<setprecision(CountZero)<< Sum << endl;
}