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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
yaStudent
2 / 2 / 0
Регистрация: 31.05.2014
Сообщений: 35
#1

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

04.06.2014, 11:01. Просмотров 472. Ответов 9
Метки нет (Все метки)

Исправить и объяснить

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

Первая задача, выводит неверный результат:
Кликните здесь для просмотра всего текста
Циклом с параметром должна выполняться формула:
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;
}

Необходимо подробно объяснить работу обоих программ, вот замечание:
При описании решения задачи следует отдельно выделить постановку задачи с указанием входных и выходных данных и метод решения задачи
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2014, 11:01     Арифметические операции, сумма ряда
Посмотрите здесь:

Быстрые арифметические операции - C++
Здравствуйте. Я знаю, что в си++ есть понятие быстрых арифметических операций (не могу вспомнить термин). Т.е. не нужно писать i = i +1,...

Арифметические операции в консольном приложении - C++
program Project5; {$APPTYPE CONSOLE} uses SysUtils; Label 1; Var a,b,c,E,Fa,Fb,Fc:real; Lich:Integer;

Арифметические операции. Дополнительный код - C++
суть проблеммы в следующем. лаба. Операции с числами в доп. коде (доп. код - то каким способом хранятся целые числа на...

Арифметические операции с элементами файлов - C++
Для двух файлов А и В, которые включают по 17 элементов A={ai }, B={bi} i=1,17 необходимо выполнить следующие действия с элементами ai и ...

Арифметические операции с двоичными числами - C++
Вопрос такой. Вот задание: Двоичные числа (разбор строки, формирование строки, операции сложения, вычитания, разные варианты вывода...

Арифметические операции с элементами массива - C++
Объявить целочисленный массив L . Используя цикл for (i = ... .. ..) {...} ввести значения элементов массива с клавиатуры. Объявить массив...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
238 / 221 / 76
Регистрация: 21.02.2013
Сообщений: 515
Завершенные тесты: 1
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
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
238 / 221 / 76
Регистрация: 21.02.2013
Сообщений: 515
Завершенные тесты: 1
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
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
1823 / 1241 / 288
Регистрация: 05.06.2014
Сообщений: 3,550
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++
Была поставлена задача: class Complex Смешанная арифметика ( перегрузка операторов) Как я понял я должен перевести выражение из...

Реализовать 4 функции на простейшие арифметические операции (+,-, *, /) - C++
Начал изучать указатели. Вошёл туго. Очень хочу разобраться самостоятельно, но задачи сдавать тоже нужно. Прошу помощи в решении задачи. ...

Арифметические операции над элементами массива - C++
Дан массив. Все его элементы: уменьшить на 30, умножить на последний элемент, увеличить на число B.

Арифметические операции, найти ошибку в коде - C++
Где ошыбка? #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int main() { double mult = 1; int n = 1; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru