Вычисление Суммы Ряда С Заданной Точностью

Тема в разделе "C/C++/C#", создана пользователем Rendall, 8 сен 2012.

Статус темы:
Закрыта.
  1. Rendall

    Rendall Гость

    есть задача
    "Даны действительные x,e(x!=0, e>0) и целые k,a,n числа. Вычислить с
    точностью e сумму и указать количество учтенных слагаемых. Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем e , - это и все последующие слагаемые можно уже не учитывать. Проверить правильность вычислений на тестовых примерах, используя возможности отладчика, проследить изменение значений слагаемых суммы ряда, выполнив отладку цикла."

    есть формула суммы ряда Ряд.PNG

    есть ПОЧТИ правильный код

    Код (C++):
    // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
    //

    #include "stdafx.h"
    #include <iostream>
    #include <cmath>
    #include <clocale>
    using namespace std;


    int _tmain(int argc, _TCHAR* argv[])
    {
    setlocale(0,"Rus");
    double x, e;
    cout<<"Введите значение аргумента x = ";
    cin>>x;
    cout<<"Введите значение точности вычисляемой суммы (e>0) e = ";
    cin>>e;
    //в переменной summa накапливаем сумму ряда
    double summa = 0;
    //точность E должна быть больше нуля
    if (e>0)
    {
    //вычисляем первое слагаемое ряда
    //pow(x, y) - функция возведения в степень, x - основание степени, y -показатель степени
    int k = 1;
    double summand = pow(x, k*2);
    //вычисление суммы ряда
    while (summand > e && k <= INT_MAX)
    {
    cout<<"k = "<<k<<"\t"<<summand<<"\n";
    summa += summand;
    k++;
    summand *= x;
    summand /= 2*k; //<<ТУТ ОШИБКА
    }
    cout<<"Сумма ряда = "<<summa<<"\n";
    cout<<"Количество учтенных слагаемых = "<<k-1<<"\n";
    }
    else
    cout<<"Ошибка ввода. Точность больше нуля!\n";
    system("pause");
    return 0;
    }
    и есть конечно же проблема, а именно, в цикле числитель (summand) должен делится на 2*k!(факториал), а получается что-то совсем не то, поскольку при проверке 3й и последующие члены ряда определяются неверно. пожалуйста поправьте код и, если не затруднит, напишите еще 1 вариант вычисления этой суммы ряда. заранее спасибо
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    не только там ошибка(их больше двух даже)

    Так как делитель 2 находится в каждом элементе ряда его можно вынести за знак суммы
    факториал получается просто:
    Код (C++):
    k=1;
    {
    текущий элем. *= (...)/k;
    k++;
    }
    //
     
  3. Rendall

    Rendall Гость

    спасибо Whatka.

    UPD. изменил код, вроде работает, проверьте пожалуста нет ли ошибок ;)

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Code</div></div><div class="sp-body"><div class="sp-content">
    Код (C++):
    // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
    //

    #include "stdafx.h"
    #include <iostream>
    #include <cmath>
    #include <clocale>
    using namespace std;


    int _tmain(int argc, _TCHAR* argv[])
    {
    setlocale(0,"Rus");
    double x, e;
    cout<<"Введите значение аргумента x = ";
    cin>>x;
    cout<<"Введите значение точности вычисляемой суммы (e>0) e = ";
    cin>>e;
    double summa = 0; //в переменной summa накапливаем сумму ряда
    if (e>0) //точность E должна быть больше нуля
    {
    //вычисляем первое слагаемое ряда
    int k = 1;
    double k_element = pow(x, 2*k);
    //вычисление суммы ряда
    while (k_element > e && k <= INT_MAX)
    {
    cout<<"k = "<<k<<"\t"<<k_element<<"\n";
    k_element *= x;
    k_element /= k;
    summa += k_element/2;
    k++;
    }
    cout<<"Сумма ряда = "<<summa<<"\n";
    cout<<"Количество учтенных слагаемых = "<<k-1<<"\n";
    }
    else  
    cout<<"Ошибка ввода. Точность больше нуля!\n";
    system("pause");
    return 0;
    }
     
  4. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    у вас сумма от k=0;
    0!=1 => первый элемент = ((x)^0)/(2*1)=0.5
    то есть
    Код (C++):
    double summa = 0.5;
    double k_element=1;
    int k = 1;
    while (k_element > e && k <= INT_MAX)
    {
    k_element *=(x*x)/k;
    summa += k_element;
    k++;
    }
    summa /=2;
    //
    p.s
    за кота + ;)
     
  5. Rendall

    Rendall Гость

    огромное спасибо, вы мне очень помогли.
    P.S я люблю катофф ;)
     
Загрузка...
Похожие Темы - Вычисление Суммы Ряда
  1. Tipo4ek
    Ответов:
    1
    Просмотров:
    1.051
  2. Extrem
    Ответов:
    4
    Просмотров:
    1.271
  3. ballack
    Ответов:
    0
    Просмотров:
    1.106
  4. Gelergo
    Ответов:
    1
    Просмотров:
    1.760
  5. VladSh
    Ответов:
    27
    Просмотров:
    8.757
Статус темы:
Закрыта.

Поделиться этой страницей