Консультация № 169645
20.06.2009, 12:09
0.00 руб.
0 2 2
Срочно нужно.....сижу на экзамене. Помгите пожалуйста. Вычислите 1-1/2+1/3-1/4.... с точностью е ( 0<е<1 вводится с клавиатуры)

Обсуждение

Неизвестный
20.06.2009, 12:44
общий
это ответ
Здравствуйте, Попов Антон Андреевич.
Код:

#include <iostream>
#include <iomanip>
#include <locale>
#include <limits>

using namespace std;

template<class T>
T input(const char* const msg)
{
while(true)
{
T res;
cout<<msg;
cin>>res;
if(cin.fail())
{
cout<<"Ошибка ввода"<<endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
}
else
{
cin.ignore(numeric_limits<streamsize>::max(),'\n');
return res;
}
}
}

// Минимально допустимая точность
const double MinEps=1.0/numeric_limits<unsigned __int64>::max();

int main()
{
setlocale(LC_ALL,"russian");
double E;
while(true)
{
E=input<double>("Введите точность E:");
E=abs(E);
if(E>MinEps)break;
cout<<"Слишком маленькая точность для расчета"<<endl;
}
unsigned __int64 counter=1.0/E; // Количество элементов
int sign=counter&1?1:-1;
double sum=0;
cout<<"Суммируется элементов: "<<counter<<endl;
while(counter)
{
sum+=static_cast<double>(sign)/counter;
--counter;
sign*=-1;
}
cout<<"Сумма:"<<sum<<endl;
system("PAUSE");
return 0;
}
Неизвестный
20.06.2009, 12:48
общий
это ответ
Здравствуйте, Попов Антон Андреевич.
Ну чтож, теперь хоть трояк думаю получите ;)

Приложение:
#include <math.h>


int _tmain(int argc, char ** argv)
{
float tolerance=0;
double Sum=0;
printf("Please input tolerance\n");
if(scanf("%f",&tolerance)==1)
{
if(tolerance>=1||tolerance<=0)
{
ptintf("Wrong tolerance");
}
else
{
int Count=1;
double CurrDataMember=1e10;
while(abs(CurrDataMember)>tolerance)
{
CurrDataMember=(1.0/Count);
if((Count&0x1)==0)
{
CurrDataMember=-CurrDataMember;
}
Sum+=CurrDataMember;
Count++;
}
printf("Sum = %f", Sum);
}
}
else printf("ErrorInput");

getchar();
getchar();
return 0;
}
Форма ответа