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

Вычислить сумму ряда

01.12.2021, 14:41. Показов 2479. Ответов 22
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно
Разработать программу, которая по заданному числу n>0, вычисляет значение
числового ряда, согласно варианту. Вывести промежуточные расчеты в виде
таблицы, содержащей n строк (в каждой отдельной строке текущий числитель и
знаменатель, текущее значение дроби и суммы). Также необходимо найти
наименьшее и наибольшее значение слагаемого. Выводить значения с точностью 5
знаков после запятой.
Пример консоли вывода программы


Из того,что я никак не могу устранить
1)Ошибка в самом вычислении,формула вроде как правильная,однако первое значение уже выдаёт ошибку и вместо одного выдаёт 8
2)иногда столбцы съезжают,но это уже не столь критично
3)Почему-то при введении количества столбцов n программа выводит в консоль на 1 столбец больше и никто из тех кого я спрашивал не знает как это решить
Сам код:
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
#include <iostream>
#include <math.h>
#include <conio.h>
#include <iomanip>
using namespace std;
 
int main()
{
setlocale(LC_ALL, "rus");
int x;
int k;
float max, min, n, s, sl ;
cout << "N=";
cin >> n;
cout << "K=" << "1" << endl;
cout << "Числитель" << "\t\t" << "Знаменатель" << "\t\t" << "Слагаемое" << "\t\t" << "Сумма" << endl;
s = 0;
max = 0;
k = 2;
min = FLT_MAX; /// <float.h>
for (int i = 1; i < n; i++) {
if (k % 2 != 0) {
s += (1 / pow(k * x - i, 2));
}
else if (k % 2 == 0) {
s += (1 / (pow(k*x + i, 2)));
}
cout << right << setw(6) << "1" << " \t\t" << s << endl;
}
 
 
cout << "max=" << max << endl;
cout << "min=" << min << endl;
 
system("pause");
return 0;
}


Заранее благодарю за любую помощь в данном вопросе
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2021, 14:41
Ответы с готовыми решениями:

Вычислить значение выражения включающего сумму ряда и произведение ряда
Всем привет, я только начинающий в С++. Можете помочь с лабороторной? Сигма для меня это что-то из рода фантастики, поэтому от помощи...

Сумма ряда/Вычислить приближенное значение элементарных функций как сумму ряда
Для начала, здравствуйте. У меня возникла проблема в понимании смысла задачи. А задача вот: Вычислить приближенное значение...

Вычислить выражение включающее сумму ряда и произведение ряда
Всем привет! Есть условие такое: И есть код: #include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main() { ...

22
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 14:47  [ТС]
Формула

https://www.cyberforum.ru/cgi-bin/latex.cgi?S=\frac{1}{\left(2x-1 \right)^2}+\frac{1}{\left(3x+2 \right)^2}+\frac{1}{\left(4x-3 \right)^2}+\dots
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.12.2021, 15:11
k не увеличиваешь, условие обратное. Да и вообще можно только i использовать.
0
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 15:12  [ТС]
Окей,если с k что-то не так,однако даже первое значение выходит с ошибкой (
как лучше это реализовать?
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.12.2021, 15:13
Условие обратное: минус при чётном k.
0
Заблокирован
01.12.2021, 15:24
Лучший ответ Сообщение было отмечено LanStudent как решение

Решение

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
#include <iostream>
#include <iomanip>
using namespace std;
 
int
main ()
{
  double Sum = 0, partial_sum = 0, part_denom;
  double x = 0.2;
  // cin >> x;
  int n = 5;
 
  // cin >> n
  cout.setf (ios::fixed);
  cout.precision (5);
  for (int i = 1, j = 2; i <= n; ++i, ++j)
    {
      part_denom = (j * x + (i % 2 ? -i : i));
      partial_sum = 1.0 / (part_denom * part_denom);
      Sum += partial_sum;
      cout << i << " : " << setw (10) << partial_sum << setw (10) << Sum <<
    endl;
    }
  cout << endl << "Summ : " << Sum;
  return 0;
}
2
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 15:51  [ТС]
Можете,пожалуйста,помочь сделать так,чтобы ваш код так выводило,ибо пишет,что cout не является однозначным при попытке добавить рамки,как в примере на фото
Миниатюры
Вычислить сумму ряда  
0
Заблокирован
01.12.2021, 15:59
А самим никак ?
Формула есть, каркас есть.
Добавить пару переменных и вывести их , такая непосильная задача ???

Цитата Сообщение от LanStudent Посмотреть сообщение
Можете,пожалуйста,помочь сделать так,чтобы ваш код так выводило
Не могу,
или не хочу.
И то и другое.
1
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 16:27  [ТС]
Есть пара вопросов
1)cout.setf (ios::fixed); за что отвечает
2)part_denom это знаменатель , а partial_sum это же слагаемое,так ведь?
0
Заблокирован
01.12.2021, 16:29
Цитата Сообщение от LanStudent Посмотреть сообщение
1)cout.setf (ios::fixed); Что делает
устанавливает формат вывода дробных чисел для всех последующих выводов.

Цитата Сообщение от LanStudent Посмотреть сообщение
2)part_denom это знаменатель , а partial_sum это же слагаемое,так ведь?
нет
знаменатель - part_denom * part_denom ;
слагаемое - partial_sum ;
Тут я немного неудачно выбрал название для partial_sum ...
1
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 16:43  [ТС]
А как можно реализовать то,что если выходит целое число ( например 1),то 5 нулей не ставилось следом?
Сам код
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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    double Sum = 0, partial_sum = 0, part_denom;
    float max, min;
    double x = 1;
    int n = 5;
 
    //cout << "Введите n=" ;
    //cin >> n;
    cout << "K=" << "1" << endl;
    cout << "Числитель" << "\t\t" << "Знаменатель" << "\t\t" << "Слагаемое" << "\t\t" << "Сумма" << endl;
    cout.setf(ios::fixed);
    cout.precision(5);
    max = 0;
    min = FLT_MAX; /// <float.h>
    for (int i = 1, j = 2; i <= n; ++i, ++j)
    {
        part_denom = (j * x + (i % 2 ? -i : i));
        partial_sum = 1.0 / (part_denom * part_denom);
        Sum += partial_sum;
        if (max < partial_sum)
        {
            max = partial_sum;
        }
        if (min > partial_sum)
        {
            min = partial_sum;
        }
        cout << right << setw(6) << "1" << "     \t\t" << part_denom * part_denom << "     \t\t" << partial_sum << "     \t\t" << Sum << endl;
 
    }
    cout << "max=" << max << endl;
    cout << "min=" << min << endl;
    return 0;
}
Миниатюры
Вычислить сумму ряда  
0
Заблокирован
01.12.2021, 17:02
Цитата Сообщение от LanStudent Посмотреть сообщение
А как можно реализовать то,что если выходит целое число ( например 1),то 5 нулей не ставилось следом?
у вас же в задании написано с такой точность (5) после запятой выводить, так что нули тоже нужны.
А при каком x таки данные на скриншоте ?
1
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 17:08  [ТС]
при x=1
просто в примере там 1 целые числа без дополнительных нулей, однако числа с остатком сохраняют знаки после запятой,воот
0
Заблокирован
01.12.2021, 17:30
LanStudent, не понял суть вопроса про 5 нулей. Эти нули показывают точность числа. Они нужны.
Можно убрать, но по заданию - этого не требуется.
1
0 / 0 / 0
Регистрация: 10.11.2021
Сообщений: 81
01.12.2021, 17:35  [ТС]
В задании написано одно,а на деле потребовали другое..
Вот и спрашиваю у вас,как можно изменить код,дабы нулы в целых числах не появлялись,а в дробных всё также выводился остаток с точность 5 зн
0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
01.12.2021, 18:17
Лучший ответ Сообщение было отмечено LanStudent как решение

Решение

LanStudent,

https://www.cyberforum.ru/cgi-bin/latex.cgi?s=\sum_{k=1}^{n}\frac{1}{((k+1)x+(-1)^kk)^2}

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
#include <iostream>
#include <iomanip>
int main()
{
    double x;
    std::cout << "x = "; std::cin >> x;
    int n;
    std::cout << "n = "; std::cin >> n;
 
    double num = 1.0, den = (2 * x - 1) * (2 * x - 1); // числитель и знаменатель
    double psum = num / den, sum = psum;               // значение дроби и суммы
    double psumMax = psum, psumMin = psum;             // наименьшее и наибольшее значение слагаемого
    int sign = 1;
 
    std::cout << "Числитель" << std::setw(15) << "Знаменатель" << std::setw(15) << "Слагаемое" << std::setw(15) << "Сумма" << std::endl;
    std::cout << std::fixed << std::setprecision(5);
    std::cout << num << std::setw(15) << den << std::setw(15) << psum << std::setw(15) << sum << std::endl;
    for (int i = 2; i <= n; i++)
    {
        sign = -sign;     // Знак
        double t = (i + 1) * x - sign * i;
        den = t * t;      // знаменатель
        psum = num / den; // значение слагаемого
        sum += psum;      // значение суммы
        std::cout << num << std::setw(15) << den << std::setw(15) << psum << std::setw(15) << sum << std::endl;
        if (psumMax < psum) psumMax = psum;
        if (psumMin > psum) psumMin = psum;
    }
    std::cout << "Max = " << psumMax << std::endl;
    std::cout << "Min = " << psumMin << std::endl;
    return 0;
}
Тест работы:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x = 1
n = 10
Числитель    Знаменатель      Слагаемое          Сумма
1.00000        1.00000        1.00000        1.00000
1.00000       25.00000        0.04000        1.04000
1.00000        1.00000        1.00000        2.04000
1.00000       81.00000        0.01235        2.05235
1.00000        1.00000        1.00000        3.05235
1.00000      169.00000        0.00592        3.05826
1.00000        1.00000        1.00000        4.05826
1.00000      289.00000        0.00346        4.06172
1.00000        1.00000        1.00000        5.06172
1.00000      441.00000        0.00227        5.06399
Max = 1.00000
Min = 0.00227
1
Заблокирован
01.12.2021, 18:28
Цитата Сообщение от LanStudent Посмотреть сообщение
В задании написано одно,а на деле потребовали другое..
Вот и спрашиваю у вас,как можно изменить код,дабы нулы в целых числах не появлялись,а в дробных всё также выводился остаток с точность 5 зн
Ну вот такой криворукожопный способ придумал :
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
void print_double(double d){
    uint64_t val = d * 1e5;
    if ( fabs( double(val / 1e5) - d ) < 1e-6)
        cout << defaultfloat << d;
    else
        cout << fixed << setprecision(5) << d;
}
int main ()
{
  double Sum = 0, partial_sum = 0, part_denom;
  double x = 1;
  // cin >> x;
  int n = 5;
 
  // cin >> n
  //cout.setf (ios::fixed);
  //cout.precision (5);
  for (int i = 1, j = 2; i <= n; ++i, ++j)
    {
      part_denom = (j * x + (i % 2 ? -i : i));
      partial_sum = 1.0 / (part_denom * part_denom);
      Sum += partial_sum;
      cout << i << " : " << setw (10);
      print_double(partial_sum);
      cout << setw (10);
      print_double(Sum);
      cout << endl;
      // cout << i << " : " << setw (10) <<  ((fabs(int(partial_sum) - partial_sum) < 1e-5) ? defaultfloat : fixed) << partial_sum << setw (10) << Sum << endl;
    }
  cout << endl;
    cout.setf (ios::fixed);
    cout.precision (5);
    Sum = 0;
   for (int i = 1, j = 2; i <= n; ++i, ++j)
    {
      part_denom = (j * x + (i % 2 ? -i : i));
      partial_sum = 1.0 / (part_denom * part_denom);
      Sum += partial_sum;
      cout << i << " : " << setw (10) << partial_sum << setw (10) << Sum << endl;
    }
  return 0;
}

Фиксированная точность вывода :
Code
1
2
3
4
5
1 :    1.00000   1.00000
2 :    0.04000   1.04000
3 :    1.00000   2.04000
4 :    0.01235   2.05235
5 :    1.00000   3.05235
Без незначущих нулей :
Code
1
2
3
4
5
1 :          1         1
2 :       0.04      1.04
3 :          1      2.04
4 :    0.01235   2.05235
5 :          1   3.05235
Так ?

Добавлено через 48 секунд
Volga_, к чему это ? мой код плохо работает ? Или вы сделали вывод как хочет автор темы ?
Ну пусть будет )
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5208 / 2925 / 1509
Регистрация: 14.12.2018
Сообщений: 5,266
Записей в блоге: 1
01.12.2021, 18:31
SmallEvil, я не посмотрел ваш код, я только предлагал ТСу вариант как я понимаю
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
01.12.2021, 18:31
LanStudent, в этой задаче нужно учесть значения, при которых сумма не вычисляется (попытка деления на ноль например при x=0.5 x=-0.(6) x=0.75 и т.д.)
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
#include <iomanip>
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    int n;
    double x, ai, u, sign=-1., denom, min=0., max=0., S=0.;
    cout << "x="; cin >> x;
    cout << "n="; cin >> n;
    
    cout << "numerator denominator    term     sum\n";
    for (int i = 1; i <= n; i++) 
    {      
        u=(i+1)*x+sign*i;
        if(fabs(u)<1.e-9) {cout << "Further calculation imposible\n";break;}
        else 
        {
            denom=u*u;
            ai=1./denom;
            S+=ai;
        } 
        if(i==1 || ai<min) min=ai;
        if(i==1 || ai>max) max=ai;        
        cout << setprecision(5) << fixed << 1. 
        << setw(12) << denom << setw(12) << ai << setw(12) << S << "\n";     
        sign=-sign;
    }
    
    cout << "min=" << min << "\nmax=" << max << "\n";
 
system("pause");
return 0;
}
2
Заблокирован
01.12.2021, 18:39
Цитата Сообщение от Yetty Посмотреть сообщение
в этой задаче нужно учесть значения, при которых сумма не вычисляется (попытка деления на ноль например при x=0.5 x=-0.(6) x=0.75 и т.д.)
Я это видел, и да - нужно
Но раз кому то нужно, пусть и делает.
Если я каждый раз буду делать защиту от "дурака", представьте какие будут раздутые коды.
Но я как минимум должен был про это упомянуть. Спасибо за заметку.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2021, 18:39
Помогаю со студенческими работами здесь

Вычислить выражение включающее сумму ряда и произведение ряда
Помогите пожалуйста решить задачу

Вычислить сумму ряда. Где-то напутал знаки или формула ряда не правильная. Посмотрите свежим взглядом.
Привет! Пишу простую контрольную, не могу понять, то ли я где-то со знаками туплю, то ли формула не корректна. Задание: Мое...

Вычислить сумму членов ряда с точностью до члена ряда, меньшего Е. Код есть, но ошибку не могу найти
Задание: Вычислить сумму членов ряда с точностью до члена ряда, меньшего Е. Формула: S= 1/(1*3) + 1/(2*4) + 1/(3*5) +... И он выводится...

Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до n
18 задача 1 лаба После удара о поверхность Земли мяч движется вертикально вверх со скорость 15 м\с. Найдите координату мяча над...

Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до N
Вычислить сумму четных и сумму нечетных чисел натурального ряда от 1 до N. Не могу найти где ошибка ? #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru