Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
BoBaH26
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
#1

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

08.04.2012, 20:31. Просмотров 429. Ответов 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.
Приходится долго ждать. Неужели надо брать именно столько членов или все-таки где-то есть ошибка?
http://www.cyberforum.ru/cpp-beginners/thread1822645.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2012, 20:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить количество членов в произведении в зависимости от погрешности (C++):

Рекурсия: количество возможных расстановок скобок в произведении n чисел
Написать на языке С рекурсивную функцию вычисляющую количество полных...

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

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

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

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

9
BoBaH26
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 21:30  [ТС] #2
В чем проблема не подскажете?

Добавлено через 38 минут
Извините за настойчивость, но надо срочно!
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,193
Завершенные тесты: 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 / 5
Регистрация: 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 / 37
Регистрация: 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 / 5
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 22:46  [ТС] #6
Цитата Сообщение от Nekto Посмотреть сообщение
1) (корень из 2)/2 равносильно 1/(корень из двух).
2) Между предыдущим значением и текущим.
Я не совсем понял, почему мы проверяем разницу между соседними множителями? Нам ведь надо сравнивать с 1/(корень из двух)...
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 22:49 #7
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Я не совсем понял, почему мы проверяем разницу между соседними множителями? Нам ведь надо сравнивать с 1/(корень из двух)...
Потому что каждый последующий член становится всё ближе к 1 и разница между соседними значениями становится всё меньше. А если б тебе не сказали, что там должно быть 1/(корень из двух)?
0
BoBaH26
30 / 30 / 5
Регистрация: 02.12.2010
Сообщений: 255
08.04.2012, 23:00  [ТС] #8
Цитата Сообщение от Nekto Посмотреть сообщение
Потому что каждый последующий член становится всё ближе к 1 и разница между соседними значениями становится всё меньше. А если б тебе не сказали, что там должно быть 1/(корень из двух)?
Т.е. фактически, мы не сравниваем его с значением в правой части, а накапливаем счетчик до тех пор, пока число не станет изменяться всего на 0,000001 и меньше?
0
Nekto
342 / 287 / 37
Регистрация: 23.03.2012
Сообщений: 838
08.04.2012, 23:03 #9
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Т.е. фактически, мы не сравниваем его с значением в правой части, а накапливаем счетчик до тех пор, пока число не станет изменяться всего на 0,000001 и меньше?
Да. Потому что с каждым членом разница будет еще меньше.
0
BoBaH26
30 / 30 / 5
Регистрация: 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
08.04.2012, 23:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2012, 23:15
Привет! Вот еще темы с решениями:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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