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

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

Войти
Регистрация
Восстановить пароль
 
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
#1

Определить количество членов в произведении в зависимости от погрешности - C++

08.04.2012, 20:31. Просмотров 397. Ответов 9
Метки нет (Все метки)

Здравствуйте! У меня такой вопрос. Есть задача:
Определить количество членов в произведении в зависимости от погрешности
Необходимо найти кол-во членов произведения, чтобы равенство выполнялось с погрешностью до 6 знаков.
Вот мой код:
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 <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
 
 
int main()
{
    double const_t=int(sqrt(double(2))/2*1000000);
    float P=1;
    int k=1;
    cout<<"const_t = "<<const_t;
    while (int(P*1000000)!=const_t)
    {
        P=P*(1+pow(float(-1),k)/(2*k+1));
        cout<<"\n"<<P;
        k++;
    }
    cout<<"\n"<<int(P*1000000);
    cout<<"\nKol-vo: "<<k;
    _getch();
    return 0;
}
Он работает, но в результате выдает, что кол-во членов будет равно 188 307.
Приходится долго ждать. Неужели надо брать именно столько членов или все-таки где-то есть ошибка?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 20:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить количество членов в произведении в зависимости от погрешности (C++):

Определить количество членов Ak последовательности a1,a2,..an - C++
Даны натуральные числа Ai={a1,a2,...an} Определить количество членов Ak последовательности a1,a2,..an , являющихся 1) нечетными числами;...

Определить количество и сумму членов последовательности - C++
Даны натуральное n и целые числа a(1), a(2),...,a(n). Определить количество и сумму членов последовательности a(i), которые делятся на 5 и...

Определить количество членов последовательности, являющихся нечётными. - C++
Дано целое число n, и действительные числа а1…аn. Определить количество членов последовательности, являющихся нечётными.

Определить количество членов последовательности целых чисел - C++
Программа получает на вход последовательность целых неотрицательных чисел, каждое число записано в отдельной строке. Последовательность...

Определить количество членов последовательности удовлетворяющих заданному условию - C++
Даны натуральные числа n, a1,...,an. Определить количество членов ak последователь-ности a1,...,an, удовлетворяющих условию

Определить количество членов последовательности являющихся чётными числами - C++
даны натуральные числа n a1...an определить количество членов последовательности являющихся четными числами это на С++

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 21:30  [ТС] #2
В чем проблема не подскажете?

Добавлено через 38 минут
Извините за настойчивость, но надо срочно!
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
08.04.2012, 21:45 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
  int main()
{
    double P=1,Pold=0,Ak=-1.;
    int k=1;
     while (fabs(P-Pold)>1e-6)
    {
        Pold=P;
        P*=(1+Ak/(2.0*k+1.0));
        Ak=-Ak;
        k++;
    }
    cout<<"Proizv="<<P<<endl;
    cout<<"must be="<<1./sqrt(2.0)<<endl;
    cout<<"\nKol-vo: "<<k;
    _getch();
    return 0;
}
1
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 22:22  [ТС] #4
zss, не могли бы Вы объяснить, как она работает в вашем случае? А то не пойму никак некоторые моменты. Например, что значит "1./sqrt(2.0)", у меня ведь (корень из 2)/2. И условие в цикле несовсем понятно. А само число (результат) меньше моего на ~30 000

Добавлено через 10 минут
Я так понял, что мы выполняем действия в цикле до тех пор, пока разница между соседними множителями не будет меньше 0,000001?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 22:26 #5
Цитата Сообщение от BoBaH26 Посмотреть сообщение
zss, не могли бы Вы объяснить, как она работает в вашем случае? А то не пойму никак некоторые моменты. Например, что значит "1./sqrt(2.0)", у меня ведь (корень из 2)/2. И условие в цикле несовсем понятно. А само число (результат) меньше моего на ~30 000

Добавлено через 10 минут
Я так понял, что мы выполняем действия в цикле до тех пор, пока разница между соседними множителями не будет меньше 0,000001?
1) (корень из 2)/2 равносильно 1/(корень из двух).
2) Между предыдущим значением и текущим.
0
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 22:46  [ТС] #6
Цитата Сообщение от Nekto Посмотреть сообщение
1) (корень из 2)/2 равносильно 1/(корень из двух).
2) Между предыдущим значением и текущим.
Я не совсем понял, почему мы проверяем разницу между соседними множителями? Нам ведь надо сравнивать с 1/(корень из двух)...
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 22:49 #7
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Я не совсем понял, почему мы проверяем разницу между соседними множителями? Нам ведь надо сравнивать с 1/(корень из двух)...
Потому что каждый последующий член становится всё ближе к 1 и разница между соседними значениями становится всё меньше. А если б тебе не сказали, что там должно быть 1/(корень из двух)?
0
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 23:00  [ТС] #8
Цитата Сообщение от Nekto Посмотреть сообщение
Потому что каждый последующий член становится всё ближе к 1 и разница между соседними значениями становится всё меньше. А если б тебе не сказали, что там должно быть 1/(корень из двух)?
Т.е. фактически, мы не сравниваем его с значением в правой части, а накапливаем счетчик до тех пор, пока число не станет изменяться всего на 0,000001 и меньше?
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 23:03 #9
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Т.е. фактически, мы не сравниваем его с значением в правой части, а накапливаем счетчик до тех пор, пока число не станет изменяться всего на 0,000001 и меньше?
Да. Потому что с каждым членом разница будет еще меньше.
0
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 23:15  [ТС] #10
Тогда вот такой пример:
Определить количество членов в произведении в зависимости от погрешности
Здесь, если поступать аналогично, только используя формулу: P*=(1-1/pow(float(k),2)), можно увидеть, что примерно на 240 члене изменение происходит меньше, чем на 0,00001, следовательно, цикл прерывается. В итоге Р=0,50222.... НО! Изменение происходит, медленно, но происходит. Если сделать простой цикл с параметром, то видно, что при значении счетчика в 30 000 и более изменение незначительное, но число приближается к 0,50000. Вот именно это и надо подсчитать, т.е. значение счетчика, когда число станет ~0.5. А иначе неточное значение получается...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2012, 23:15
Привет! Вот еще темы с ответами:

Определить количество членов последовательности, являющихся квадратами четных чисел - C++
Обьясните пожалуста как решить такую задачу: Даны целые положительные числа N, a1, ..., aN. Используя только элементарные...

Определить количество членов последовательности а1, ..., an, имеющих нечетные порядковые номера - C++
Определить количество членов последовательности а1, ..., an, имеющих нечетные порядковые номера, при этом будучи кратными 3 и не кратными...

Определить количество нечетных членов последовательности, имеющих четные номера - C++
Даны натуральные числа n, а1,......,аn. Определить количество членов ак последовательности а1,......,аn : имеющих четные порядковые номера...

Определить, максимальное количество подряд идущих отрицательных членов последовательности. - C++
Вводится натуральное число N, а затем последовательность N чисел. Определить, максимальное количество подряд идущих отрицательных членов...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.04.2012, 23:15
Ответ Создать тему
Опции темы

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