Разобрать код задач по ряду Тейлора

308
20 ноября 2017, 20:24

Доброго времени суток, есть проблема с 2мя задачами по cpp. Ежели кто осилит - гляньте и дайте вердикт, правильно или нет (по возможности с пояснением как нужно сделать правильно)

**Задача № 1)**Дано действительные числа x, ε (x!=0, ε>0). Вычислить приближенное значение бесконечной суммы. Вычисление сделать с заданной точностью ε (пока абсолютная величина текущего члена ряда не станет меньше ε). Формула прилагается

 main()
{
        float k=0, x, u=(x*x)/2, r, s=u, es=1e-3;
        while (fabs(u)>=es)
        {
                r=(pow(-1, k+1)*pow(x,k+2))/(k+1);
                u*=r;
                s+=u;
                k++;
        }
        cout<<"Sum = "<<s;
        getch();
}

Задача №2)

Дано действительные числа x, ε (ε>0). Вычислить с заданной точностью ε приближенное значение бесконечной суммы и сравнить его с точным.

Формула (в ней вроде должна быть моргалка знаков начиная с первого или второго) и точное значение (справа):

main()
{
        int n=0, u=1;
        float eps=1e-3, s=u, s1, x;
        while (abs(u)>=eps)
        {
                n++;
                u=pow(-1,n)*n;
                s+=u;
        }
               s1=1/(1-x);
               if (fabs(s-s1)<=eps) cout<<"To4noe zna4enie";
               else cout<<"Neto4noe zna4enie";
        getch();
}
Answer 1

Лень разбирать ваш код так поздно, так что вот мои варианты:

1

const double eps = 1e-8;
double series(double x, double epsilon)
{
    double term = x*x/2.0, sum = term;
    for(int k = 0; fabs(term) > epsilon; ++k)
    {
        sum += (term *= -x*(k+1)/double((k+2)*(k+3)));
    }
    return sum;
}
int main(int argc, const char * argv[])
{
    for(double x = -1.0; x <= 1.0; x += 0.1)
    {
        cout << fixed << setprecision(2) << setw(5) << x
             << setprecision(10) << setw(15) << series(x,eps) << endl;
    }
}

2

const double eps = 1e-8;
double series(double x, double epsilon)
{
    double term = 1.0, sum = term;
    while(fabs(term) > epsilon)
    {
        sum += term *= x;
    }
    return sum;
}
int main(int argc, const char * argv[])
{
    for(double x = -0.9; x <= 0.9; x += 0.1)
    {
        cout << fixed << setprecision(2) << setw(5) << x
            << setprecision(10) << setw(15) << series(x,eps)
            << setw(15) << (1.0/(1-x)) << endl;
    }
}

Если вы изучали в школе геометрическую прогрессию, то должны бы понимать, что во втором случае никакой "моргалки знаков" нет...

READ ALSO
Данные из файлов [требует правки]

Данные из файлов [требует правки]

Как в с++ манипулировать данными из текстового файла, которые находятся на одной или нескольких строках?

283
Poco С++ Как отправить файл на сервер

Poco С++ Как отправить файл на сервер

Poco разбираюсь с этой библиотекой, появилась задача отправить файл на сервер в интернете, кто то знает как это сделатьни как не получатся найти...

217
Помогите пожалуйста переделать код с Pascal на С/С++ [требует правки]

Помогите пожалуйста переделать код с Pascal на С/С++ [требует правки]

По возможности избегать стандартных ф-ций (strlen), и типа данных string, строка обрабатывается как массив символов

221
считывание массива из потока

считывание массива из потока

Нужно перегрузить оператор считывания из потока для шаблонного классаВ шаблонном классе Set есть поле - массив элементов другого шаблонного...

254