С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 11
1

Вычислить произведение ряда

12.09.2017, 23:11. Показов 646. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите,пожалуйста,найти ошибку в коде(Я новичек в этом,не пойму,что не так..
Задание:
Посчитать формулу(прикрепляю к посту),для заданного натурального числа n и действительного числа a.

Беда в том,что при вводе чисел по больше, например a=5 и n=8,программа начинает выдавать отрицательные числа((
Вот мой код:
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 <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
 
int main() {
    double a, rez;
    int n, i, sum;
    cout << "Enter a" << endl;
    cin >> a;
    cout << "Enter n" << endl;
    cin >> n;
 
    rez = a * (pow((a + 1), 2));
 
    for (i = 1; i <= n; i++) {
        sum = rez*(pow((a + n - 1), n));
    }
 
    cout << "Rez =" << sum << endl;
    system("pause");
    return 0;
}
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
12.09.2017, 23:11
Ответы с готовыми решениями:

Вычислить произведение ряда
вычислить и вывести на экран, x и k ввести с клавиатуры p=\prod_{i=1}^{k}\frac{sin(ix)}{2i-1}

Вычислить произведение ряда
Доброго дня всем. Написал код для задачи,но после всех просчётов программа выдает очень маленькое...

Вычислить произведение ряда
Помогите решить задание для C++ Дано действительное число число а, натуральное число n. Вычислить...

Вычислить произведение ряда
Дано натуральное число n. Вычислить (1+1/1^2)*(1+1/2^2)…(1+1/n^2) #include &lt;iostream&gt; using...

9
Заблокирован
12.09.2017, 23:36 2
C++
1
2
3
4
double a=5, mul=1;
int n=8;
for (int i = 1; i <= n; i++) mul*=pow(a+i-1,i);
cout << "Rez =" << mul << endl;
вроде так
0
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 11
13.09.2017, 12:25  [ТС] 3
MansMI, Такой вариант тоже рассматривался,но в таком случае если вводите те же a=5 и n=8,в ответе почему-то 1.25123e+035..а по-идее должно быть большое же число,никак не 1 целая или я ошибаюсь?(
0
Заблокирован
13.09.2017, 12:36 4
Цитата Сообщение от Alexa888 Посмотреть сообщение
1.25123e+035
недостаточно большое?

Добавлено через 3 минуты
стр.4 printf("Rez =%lf\n",mul);
0
0 / 0 / 0
Регистрация: 12.09.2017
Сообщений: 11
13.09.2017, 12:47  [ТС] 5
MansMI,
Цитата Сообщение от MansMI Посмотреть сообщение
printf("Rez =%lf\n",mul);
А это что за выражение?Это же вроде даже не С++..
По-идее,перед точкой же должно быть больше,а не 1
0
Заблокирован
13.09.2017, 12:49 6
Alexa888, это "выражение" после cout << "Rez =" << mul << endl; поставить
Цитата Сообщение от Alexa888 Посмотреть сообщение
По-идее,
0
4019 / 2565 / 430
Регистрация: 09.09.2017
Сообщений: 11,443
13.09.2017, 12:52 7
Это использование библиотеки stdio.h, которая поддерживается С и С++.
Вывод строки
Rez = <число><перевод строки>
, где <число> - long float (он же double)
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
13.09.2017, 12:55 8
Alexa888, 1.25123e+035 = https://www.cyberforum.ru/cgi-bin/latex.cgi?1.25123*{10}^{35}
0
1 / 1 / 0
Регистрация: 15.05.2017
Сообщений: 3
13.09.2017, 13:00 9
можно воспользоваться рекурсией)))
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
using namespace std;
double Func (double arg1,int arg2){
    if (arg2==0) return 1;
    return (pow((arg1+arg2-1),arg2)*Func(arg1,arg2-1));
}
int main() {
double a;
int n;
    cout << "Enter a" << endl;
    cin >> a;
    cout << "Enter n" << endl;
    cin >> n;
    printf ("%0.2f\n", Func(a,n));
    system("pause");
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
13.09.2017, 14:35 10
Alexa888, для того, чтобы обратиться к форумчанину, достаточно щёлкнуть по его нику слева от сообщения. Либо вручную обрамить его ник тегами [nick][/nick]

Добавлено через 1 минуту
Цитата Сообщение от Alexa888 Посмотреть сообщение
a=5 и n=8,программа начинает выдавать отрицательные числа
Можете использовать типы uint64_t, а при вызове pow вызывать static_cast<longdouble>. Ограничение всё равно останется, но числа станут чуть больше.

Добавлено через 17 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
#include <cstdint>
using namespace std;
 
int main()
{
    int a, n;
    uint64_t r = 1;
    cout << "Enter a" << endl;
    cin >> a;
    cout << "Enter n" << endl;
    cin >> n;
 
    for (int i = 1; i <= n; i++)
        r *= static_cast<uint64_t>(pow(static_cast<long double>(a + i - 1), i));
 
    cout << "Rez = " << r << endl;
}
Надо понимать, что результат работы по вашей формуле очень большой.
Максимально, что могут хранить встроенные типы - это значение при a = 5, n = 6, то есть
https://www.cyberforum.ru/cgi-bin/latex.cgi?5 * {(5 + 1)}^{2} * {(5 + 2)}^{3} * {(5 + 3)}^{4} * {(5 + 4)}^{5} * {(5 + 5)}^{6} = 5 * {6}^{2} * {7}^{3} * {8}^{4} * {9}^{5} * {10}^{6} = 5 * 36 * 343 * 4096 * 59049 * 1000000 = 14932726824960000000
Что лишь слегка недотягивает до 18446744073709551615 (максимальное число, которое можно хранить в стандартных типах).
0
13.09.2017, 14:35
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
13.09.2017, 14:35
Помогаю со студенческими работами здесь

Вычислить произведение ряда
х ввести с клавиатуры,k определить из условия ak=b, где a и b относится к целым четным числам (a&lt;b)...

Вычислить произведение ряда
Господа,нужна помощь. Кому не лень,не трудно,помогите чем могите. Собственно вот: Блок А 1. В...

Вычислить произведение ряда
Дано натуральне число n. Обчислити P=(1+1/1)(1+1/2)^2 ...(1+1/n)^n , не використовуючи бібліотечних...

Вычислить произведение ряда
Вычислить сумму S = R+R+...+R . R=1.01; R=o.75; R=0.25i + 2sinR - 0.35cosR . ...

Вычислить произведение ряда
Вычислить произведение ряда P=(1+3)*(5+7)*...*((2n-1)+(2n+1)) для введенного с клавиатуры n...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru