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

Возвращает один и тот же результат. Найти произведение ряда

21.03.2015, 02:56. Показов 1585. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно подсчитать:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\prod_{k=1}^{n} \frac{{(1-x)}^{k+1}+1}{{((k-1)!+1)}^{2}}

Написал программу, но проблема в том, что она выводит один и тот же результат.
Для удобства сделал отдельную функцию подсчёта факториала.

В причина ошибки? Укажите, пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
 
long double f(int n)
{ if(n<0) return 0;
  if (n==0) return 1;
  else return n*f(n-1);}
 
void main()
{ int x,k=0,n;
  float r;
  cout<<"Enter upper border: ";
  cin>>n;
  cout<<"Enter X: ";
  cin>>x;
  while(1<=k && k<=n) {r*=(pow((1-x),k+1)+1)/((pow(f(k-1),2)+1));}
  cout<<"Result: "<<setprecision(4)<<r;
  getch();
  }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2015, 02:56
Ответы с готовыми решениями:

функция mysql_query возвращает один и тот же результат (false) и тогда, когда запрос на удаление выполняется и
Подскажите,пожалуйста,почему функция mysql_query возвращает один и тот же результат (false) и тогда когда запрос на удаление выполняется,и...

Найти вероятность того, что два бросания трех игральных костей дадут один и тот же результат
Найти вероятность того, что два бросания трех игральных костей дадут один и тот же результат, если кости а) отличимы друг от друга; б) не...

Разные значения один и тот же результат
Ввожу разные переменные а результат выдает один и тот же. В чем может причина может я что не так делаю #include &lt;stdio.h&gt; ...

13
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
21.03.2015, 08:52
Лучший ответ Сообщение было отмечено Magestian как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
r=1.0;  // !!!!!!!!!!!!!!!!!!!!!!!
double pk=(1.0-x)*(1.-x);
double kfact=1.0;
int k=1;
do
{
    ak=(pk+1.0)/( (kfact+1.0)*(kfact+1.0) );
    r+=ak;
 
    pk*=(1.0-x);
    kfact*=k;
    k++;
}while(k<=n);
0
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
22.03.2015, 02:45  [ТС]
Можете объяснить, пожалуйста, это для факториала? Если да, то почему такой странный подсчёт?
Если нет, то я не пойму, куда это?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.03.2015, 06:19
Цитата Сообщение от Magestian Посмотреть сообщение
int k=0;
...
* while(1<=k && k<=n) {r*=(pow((1-x),k+1)+1)/((pow(f(k-1),2)+1));}
Цикл while не выполнится ни разу.

Добавлено через 2 минуты
+ ошибки в вычислениях знаменателя (хотя пока это значения не имеет)

Добавлено через 5 минут
Цитата Сообщение от Magestian Посмотреть сообщение
почему такой странный подсчёт
Это вычисление очередного члена на основании того, что осталось от вычисления предыдущего.
А вычисление факториала с помощью рекурсии - вообще глупость, а в задачах подобного типа - глупость квадратная (если не экспоненциальная). Подумайте сами. Вот вы вычисляете 10! и начинаете все умножать 1*2*3*... Зачем?! Ведь 9! только что было вычислено! И 10! = 10*9!
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
22.03.2015, 06:26
Цитата Сообщение от zss Посмотреть сообщение
r+=ak;
Ну раз уж r заединичили, то и плюс зазвездить надо бы. А так да, ваш кот так и просится быть обернутым в хвостовую рекурсию без цикла.
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
22.03.2015, 09:39
_Ivana, В данном случае основная причина ошибки в исходном коде была в том,
что переменной r не было присвоено начальное значение.
Вот я ее и оставил без переименования, чтобы ТК заметил эту ошибку.
0
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
22.03.2015, 12:17  [ТС]
Секундочку, начинаю соображать.

Добавлено через 26 минут
Ан нет, запутался только.
Понял принцип вычисления факториала. Понял про то, что цикл не выполнялся у меня из-за дефиниции.
Вот так верно будет?
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
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
 
/*long double f(int n)
{ if(n<0) return 0;
  if (n==0) return 1;
  else return n*f(n-1);}*/
 
 
 
void main()
{ int x,n;
  float r,ak;
 
  cout<<"Enter upper border: ";
  cin>>n;
  cout<<"Enter X: ";
  cin>>x;
  r=1.0;
  double pk=(1.0-x)*(1.0-x);
  double kfact=1.0;
  int k=1;
  while (k<=n)
{
  ak=(pk+1.0)/((kfact+1.0)*(kfact+1.0));
  r*=ak;
 
  pk*=(1.0-x);
  kfact*=k;
  k++;
}
  cout<<"Result: "<<setprecision(4)<<r;
  getch();
  }
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.03.2015, 13:49
Magestian, Как будто (на взгляд) все правильно. Только я бы тебе советовал для r, ak использовать double вместо float.
Вообще, float без веских причин употреблять не стоит.
1
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
22.03.2015, 16:37  [ТС]
Задал значения 3 и 3, подсчитал вручную и прогнал в программе - сошлось.
По поводу типов - спасибо за совет.
0
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
25.03.2015, 23:55  [ТС]
Есть ещё вопрос:
Как это выражение записать без отдельных функций, без разделения на части?
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
26.03.2015, 19:16
Что-то я не вижу никаких отдельных функций
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void main()
{
  cout<<"Enter upper border: ";
  int n;cin>>n;
  cout<<"Enter X: ";
  int x;cin>>x;
  double r=1.0;  // !!!!!!!!!!!!!!!!!!!!!!!
  double pk=(1.0-x)*(1.-x);
  double kfact=1.0;
  int k=1;
  do
  {
    ak=(pk+1.0)/( (kfact+1.0)*(kfact+1.0) );
    r+=ak;
 
    pk*=(1.0-x);
    kfact*=k;
    k++;
  }while(k<=n);
  cout<<"Result: "<<setprecision(4)<<r;
  getch();
}
0
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
26.03.2015, 20:17  [ТС]
Я имел ввиду не делить пример на части, а как-то сразу считать целиком.(без переменных pk, ak и т.д.)
Про функции, я имел ввиду функцию факториала.

Добавлено через 18 минут
zss, Считается правильно конечно же. Но как это сделать без дополнительных переменных?(указал выше)
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
26.03.2015, 20:20
Без дополнительных переменных получится то, что Вы написали в самом начале.
На них экономить нельзя.
Посмотрите, как делать вычисления разложением в ряд:
Вычисление функций разложением в ряд Тейлора
0
1 / 1 / 0
Регистрация: 25.09.2014
Сообщений: 125
26.03.2015, 20:21  [ТС]
Хорошо. Но я попробую.
Всё-таки с дополнительными переменными надёжнее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2015, 20:21
Помогаю со студенческими работами здесь

Функции выдают один и тот-же результат
Пробовал по разному - самый больший результат , 200, а должно быть 255. Вообще не понимаю как это ещё и работает. Такое ощущение-что всё...

Код выдает один и тот же результат постоянно
Условие - определить, лежит ли окружность (x0,y0,r0) внутри другой окружности(x1,y1,r1)? #include &quot;stdafx.h&quot; #include...

Один и тот же файл иконки - разный результат
Вообще непонятная система. Изначально хотел задать этот вопрос в разделе программирования, но понял, что это и без программирования...

Код выдает один и тот же результат постоянно
Нужно решить задачу: День авиации отмечается 12 апреля. Приходится ли в заданном году этот праздник на день недели n? g - год dn -...

Один и тот же результат при использовании Calendar и GregorianCalendar
Всем привет, Сейчас читаю книгу, там в примерах доступ к методам класса GregorianCalendar описан таким образом: GregorianCalendar...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru