Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 2
Регистрация: 18.09.2010
Сообщений: 52

Сумма ряда с заданной точностью

11.10.2010, 17:54. Показов 2322. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, уже не знаю что и делать, неправильно решает программа...
Для х ( -25 < x < 25) составить функцию, которая вычисляет сумму ряда с заданной точностью 0<eps<=1 . Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше чем eps. Функция в качестве результата должна вернуть вычисленную сумму, количество учтенных слагаемых и последнее слагаемое, которое было включено в сумму.
В вызывающей функции main() организовать контроль ввода чисел x и eps.


https://www.cyberforum.ru/cgi-bin/latex.cgi?-\frac{x\left(4+x \right)}{2}-\frac{x\left(8+x \right)}{2 \cdot 4}+\frac{x\left(12+x \right)}{2\cdot 4\cdot 6}+\frac{x\left(16+x \right)}{2\cdot 4\cdot 6\cdot 8}-\frac{x\left(20+x \right)}{2\cdot 4\cdot 6\cdot 8\cdot 10}-\dots

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <math.h>
using namespace std;
double calculate_for(const double , const double , int& , double& );
double calculate_while(const double , const double , int& , double& );
double calculate_do_while(const double , const double , int& , double& );
bool repeat (void);
void main (void)
{
        double x, eps, result, summand;
        int numbers_of_summands;
 
        do
        {
            do
            {
                cout << "Input X (-25<X<25): ";
                cin >> x;
 
                if (x>25 || x<-25)
                    cout << "\n\nX must be (-25;25), try again...\n\n";
            }
            while(x>25 || x<-25);
 
            do
            {
                cout << "Input epselent (0<EPS<=1]: ";
                cin >> eps;
 
                if (eps<=0 || eps>1)
                    cout << "\n\nEpselent (0;1], try again...\n\n";
            }
            while(eps<=0 || eps>1);
 
            cout << "\n\nMenu" << "\nfor-press 1" << "\nwhile-press 2" << "\ndo_while-press 3" << "\nquit-press 0\n";
            int number;
            cin >> number;
            switch (number)
            {
                case 1: calculate_for(x, eps, numbers_of_summands, summand); break;
                case 2: calculate_while(x, eps, numbers_of_summands, summand); break;
                case 3: calculate_do_while(x, eps, numbers_of_summands, summand); break;
                case 0: exit(0);
            }
            if (number=1)
                result=calculate_for(x, eps, numbers_of_summands, summand);
            if (number=2)
                result=calculate_while(x, eps, numbers_of_summands, summand);
            if (number=3)
                result=calculate_do_while(x, eps, numbers_of_summands, summand);
            
            cout << "Result: " << result << "\nNumber of summands: " << numbers_of_summands << "\nLast summand: " << summand;
        }
        while(repeat());
}
 
bool repeat (void)
{
        char symbol;
 
        cout << "\n\nTry again? Yes/No: ";
        cin >> symbol;
 
        if ((char)tolower(symbol)=='y')
        return 1;
        else
        return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <math.h>
double calculate_for(const double x, const double eps, int& numbers_of_summands, double& summand)
{
    numbers_of_summands=1;
    double a=-4*x-x*x;
    double b=2;
    summand=-x*(4+x)/2;
    double result=summand;
    int i, p=1;
    for (i=2;fabs(summand)>=eps;i++)
    {
        a+=powf(-1, p)*2*i*x;
        b*=2*i;
        summand=a/b;
        if(i%2==0)
            p++;
                
        result+=summand;
        numbers_of_summands=i;
    }
    return result;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <math.h>
double calculate_while(const double x, const double eps, int& numbers_of_summands, double& summand)
{
    numbers_of_summands=1;
    double a=-4*x-x*x;
    double b=2;
    summand=a/b;
    double result=summand;
    int i=2, p=1;
    do
    {
        a+=powf(-1, p)*2*i*x;
        b*=2*i;
        summand=a/b;
        if(i%2==0)
            p++;
                
        result+=summand;
        numbers_of_summands=i;
        i++;
    }
    while (fabs(summand)>=eps);
    return result;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <math.h>
double calculate_do_while(const double x, const double eps, int& numbers_of_summands, double& summand)
{
    numbers_of_summands=1;
    double a=-4*x-x*x;
    double b=2;
    summand=a/b;
    double result=summand;
    int i=2, p=1;
    while (fabs(summand)>=eps)
    {
        a+=powf(-1, p)*2*i*x;
        b*=2*i;
        summand=a/b;
        if(i%2==0)
            p++;
                
        result+=summand;
        numbers_of_summands=i;
        i++;
    }
    return result;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2010, 17:54
Ответы с готовыми решениями:

Сумма ряда с точностью до члена ряда
Найти сумму ряда с точностью до члена ряда, меньшего ε(задается с клавиатуры) для заданного...

Сумма ряда с заданной точностью
Помогите пожалуйста написать программу Для х ( -25 &lt; x &lt; 25) составить функцию, которая вычисляет...

Сумма бесконечного ряда с заданной точностью
Написать программу вычисления суммы бесконечного ряда с точностью eps=0.001: ...

9
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
11.10.2010, 21:59
Ваш код не смотрел.
Проверяйте.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <math.h>
 
double series(double x, double epsilon, int *n, double *last);
 
int main()
{
    double x;
    double epsilon;
    double last;
    int n;
 
    while (1)
    {
        printf("Enter x (-25 < x < 25): ");
        scanf("%lf", &x);
 
        if (x < -25.0 || x > 25.0)
            printf("x must be in range of -25 to 25");
        else
            break;
    }
 
    while (1)
    {
        printf("Enter epsilon (0 < epsilon <= 1): ");
        scanf("%lf", &epsilon);
 
        if (epsilon <= 0.0 || epsilon > 1.0)
            printf("epsilon must be in range of 0 to 1");
        else
            break;
    }
 
    printf("Sum of series: %lf", series(x, epsilon, &n, &last));
    printf("\nNumber of terms: %d", n);
    printf("\nLast term: %lf", last);
 
    getch();
    return 0;
}
 
double series(double x, double epsilon, int *n, double *last)
{
    double sum;
    double an;
    int den;
    int k;
    int sign;
 
    sum = 0.0;
    k = 4;
    den = 1;
    sign = -1;
 
    do
    {
        an = sign * x * (k + x);
        an /= 2 * den;
        k += 4;
        den *= k / 4;
 
        if ((k / 4) % 2 == 0)
            sign *= -1;
 
        sum += an;
    }
    while (fabs(an) >= epsilon);
 
    *n = k / 4;
    *last = an;
 
    return sum;
}
0
0 / 0 / 2
Регистрация: 18.09.2010
Сообщений: 52
11.10.2010, 23:08  [ТС]
так тоже неправильно считает =(
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
11.10.2010, 23:31
А как должно быть? Приведите пример правильных входных и выходных данных.

Добавлено через 3 минуты
А, точняк. Ща поправим.

Добавлено через 11 минут
Проверьте так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
double series(double x, double epsilon, int *n, double *last);
 
int main()
{
    double x;
    double epsilon;
    double last;
    int n;
 
    while (1)
    {
        printf("Enter x (-25 < x < 25): ");
        scanf("%lf", &x);
 
        if (x < -25.0 || x > 25.0)
            printf("x must be in range of -25 to 25\n");
        else
            break;
    }
 
    while (1)
    {
        printf("Enter epsilon (0 < epsilon <= 1): ");
        scanf("%lf", &epsilon);
 
        if (epsilon <= 0.0 || epsilon > 1.0)
            printf("epsilon must be in range of 0 to 1\n");
        else
            break;
    }
 
    printf("Sum of series: %lf", series(x, epsilon, &n, &last));
    printf("\nNumber of terms: %d", n);
    printf("\nLast term: %lf", last);
 
    getch();
    return 0;
}
 
double series(double x, double epsilon, int *n, double *last)
{
    double sum;
    double an;
    int den;
    int k;
    int sign;
 
    sum = 0.0;
    an = 2.0;
    k = 4;
    den = 2;
    sign = -1;
 
    while (1)
    {
        an = sign * x * (k + x) / den;
        sum += an;
 
        if (fabs(an) < epsilon)
            break;
 
        k += 4;
        den *= k / 2;
 
        if ((k / 4) % 2 == 1)
            sign *= -1;
    }
 
    *n = k / 4;
    *last = an;
 
    return sum;
}
0
0 / 0 / 2
Регистрация: 18.09.2010
Сообщений: 52
12.10.2010, 08:37  [ТС]
результат неверный выводит
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.10.2010, 08:39
Дайте верные входные и выходные данные. А то у меня совсем нету желания считать на бумажке. Хотя то, что я посчитал ручками, совпадает с тем, что считает программа.
0
0 / 0 / 2
Регистрация: 18.09.2010
Сообщений: 52
12.10.2010, 08:58  [ТС]
попробуйте ввести x=2, eps=1
ответ должен быть -9.91, а показывает -7.91
А последнее слагаемое и количество правильно выводит.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.10.2010, 09:54
Ага. А теперь считаем на бумажке:
x = 2; eps = 1
t1 = -2 * (4 + 2) / 2 = -6; |t1| = 6 > 1;
t2 = -2 * (8 + 2) / (2 * 4) = -2.5; |t2| = 2.5 > 1;
t3 = 2 * (12 + 2) / (2 * 4 * 6) = 0.58(3); |t3| = 0.58(3) < 1 -> Конец
sum = -6 -2.5 + 0.58(3) = 7.91(6)
last = 0.58(3)
n = 3
1
0 / 0 / 2
Регистрация: 18.09.2010
Сообщений: 52
12.10.2010, 19:54  [ТС]
Ой, извините за мою невнимательность, я тока изменил немного вашу прогу, там где программа меняет знаки, иначе, как мне кажется, программа всего один раз поменяет знак
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
13.10.2010, 02:28
Ну так вы выведите каждое слагаемое и посмотрите, как она меняет знак... Знаки она меняет через каждые два слагаемых, как и надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.10.2010, 02:28
Помогаю со студенческими работами здесь

Сумма бесконечного ряда с заданной точностью
как реализовать сумму бесконечного ряда? посмотрел пару примеров не понял \sum_{n=0}^{\infty...

Сумма членов бесконечного ряда с заданной точностью
Пожалуйста, помогите исправить мой код! Задание: найти сумму членов бесконечного ряда с заданной...

Сумма бесконечного ряда с факториалом и с заданной точностью
Сначала надо найти сумму ряда чисел с заданной точностью 0.0001: 1 + x + \frac{{x}^{1}}{!1} +...

Сумма ряда с заданной точностью
Здравствуйте, пытаюсь вычислить сумму ряда с заданной точность с помощью данного алгоритма: ...

Сумма ряда с заданной точностью
Добрый день. Пытаюсь вычислить сумму данного ряда: В конечном счете должно получиться что-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru