Форум программистов, компьютерный форум CyberForum.ru

Арифметические операции, сумма ряда - C++

Восстановить пароль Регистрация
 
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
04.06.2014, 11:01     Арифметические операции, сумма ряда #1
Исправить и объяснить

Прошу о помощи.

Первая задача, выводит неверный результат:
Кликните здесь для просмотра всего текста
Циклом с параметром должна выполняться формула:
1/(1+1/2)/(2+4/8)...(n+2^n/n+1)
n вводится с клавиатуры
надо получить конечный результат
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
int main()
{
  double n;
  cin>>n;
  double res=1.;
  double pow2=2.;
  for(int i=1;i<=n;i++)
  {
     res/=(i+pow2/(i+1));
     pow2*=2.;
  }
  cout<<res;
}
Вот замечание:
Решение не верно. Не верно записал формулы для вычисления. Такие задачи раскручивают с конца, с последней дроби: n+2^n/n+1
Для ее вычисления у вас все известно. А для вычисления самой верхней дроби известен только числитель. А ее знаменатель вычисляется через вложенную цепочку всех остальных дробей.


Вторая задача (с ней всё в порядке):
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int        a, d, m, n, f = 0;
 
    
cin >> d;
 
    for ( a = d, m = n = 1; a /= 10; m *= 10, n++ );
 
    a = d;
    n /= 2;
    while ( n-- ) {
        f |= ((d / m) % 10) ^ (a % 10);
        m /= 10;
        a /= 10;
    }
 
    cout << (!f ? "Yes" : "No") << endl;
 
    return 0;
}

Необходимо подробно объяснить работу обоих программ, вот замечание:
При описании решения задачи следует отдельно выделить постановку задачи с указанием входных и выходных данных и метод решения задачи
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ogniel
 Аватар для Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
04.06.2014, 13:34     Арифметические операции, сумма ряда #2
по первой задачке
как было сказано, такие формулы раскручивают с конца, => цикл тебе нужно задать в обратном порядке

C++
1
for (int i=n; i>=0; i--);
и в итоге, i[n-1] делим на i[n]

C++
1
res=(i+pow2/(i+1))/res;
не забыв перед циклом присвоить res=1;

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
double res=1.;
for (int i=n; i>=0; i--)
{
res=(i+pow2/(i+1))/res;
}
cout<<res;
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
04.06.2014, 13:45     Арифметические операции, сумма ряда #3
ну что бы такому условию соответствовало
Цитата Сообщение от yaStudent Посмотреть сообщение
(n+2^n/n+1)
, то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cmath> 
using namespace std;
 
int main()
{
  double n;
  cin>>n;
  double res=1.;
  for(int i=1;i<=n;i++)
  {
     res/=(i+pow(i, 2)/(i+1));// здесь pow(i, 2) - возносим в степень
    
  }
  cout<<res;
}
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
04.06.2014, 13:52  [ТС]     Арифметические операции, сумма ряда #4
цикл тебе нужно задать в обратном порядке
for (int i=n; i>=0; i--);
ну что бы такому условию соответствовало
for(int i=1;i<=n;i++)
Я запутался.
Ogniel
 Аватар для Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
04.06.2014, 14:56     Арифметические операции, сумма ряда #5
смотри. такие формулы строятся в обратном порядке - от n (которое ты вводишь сам) до 1 (которая статическая)
следовательно, тебе нужен цикл от n до 1 с интервалом 1. к примеру, если n=65, то массив значений i будет таким:
65, 64, 63, ... 2, 1, 0

ну и саму формулу считаем с конца (получается как бы к концу мы пошагово прибавляем начало) - res[65]/1, res[64]/res[65], res[63]/res[64]/res[65], ... , res[0]/...

так понятнее?)))
jurok_85
226 / 209 / 70
Регистрация: 21.02.2013
Сообщений: 494
04.06.2014, 15:13     Арифметические операции, сумма ряда #6
Ogniel, а разве вот эта формула 1/(1+1/2)/(2+4/8)...(n+2^n/n+1) не нарушится если в обратном порядке делать, ведь тогда получится 64/(64 + 2^64/65)/(63 + 2^63/64)...
совсем другой результат будет
Ogniel
 Аватар для Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
04.06.2014, 15:36     Арифметические операции, сумма ряда #7
кстати, да, ошибочку я допустил. но как известно a/b/c/d = a/(b*c*d)

C++
1
2
3
4
5
6
7
double res=1.;
for (int i=n; i>=0; i--)
{
res=(i+pow2/(i+1))*res;
}
res=1/res;
cout<<res;
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
05.06.2014, 09:02  [ТС]     Арифметические операции, сумма ряда #8
Осталось определиться с одним вопросом, в отношении первой задачи.
При описании решения задачи следует отдельно выделить постановку задачи с указанием входных и выходных данных и метод решения задачи
Добавлено через 12 часов 28 минут
Актуально.
Renji
1534 / 982 / 240
Регистрация: 05.06.2014
Сообщений: 2,958
05.06.2014, 10:53     Арифметические операции, сумма ряда #9
Цитата Сообщение от Ogniel Посмотреть сообщение
смотри. такие формулы строятся в обратном порядке - от n (которое ты вводишь сам) до 1 (которая статическая)
В обратном порядке записывается цепочка сложений, по причине того что числа имеют внутреннее представление вида мантисса*2^экспонента. Когда эти экспоненты различаются, младшие разряды мантиссы меньшего слагаемого отбрасываются. Чтобы отбрасывалось не слишком много, числа нужно складывать в порядке возрастания. Обсуждаемой цепочке делений на это глубоко пофиг, так как она работает по принципу "поделили мантиссы, вычли экспоненты друг из друга, нормализовали результат".

Другое дело что нужно сначала перемножить между собой все (n+2^n/n+1), а уж потом поделить единицу на результат. Во-первых, ошибок округления меньше, во-вторых, это банально быстрее (деление тормознутое).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2014, 16:33     Арифметические операции, сумма ряда
Еще ссылки по теме:

C++ Арифметические операции над элементами массива
C++ Реализовать 4 функции на простейшие арифметические операции (+,-, *, /)

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

Или воспользуйтесь поиском по форуму:
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
05.06.2014, 16:33  [ТС]     Арифметические операции, сумма ряда #10
Актуально...
Yandex
Объявления
05.06.2014, 16:33     Арифметические операции, сумма ряда
Ответ Создать тему
Опции темы

Текущее время: 05:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru