Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/10: Рейтинг темы: голосов - 10, средняя оценка - 5.00
isaak
112 / 49 / 19
Регистрация: 17.10.2010
Сообщений: 721
1

Вычисление произведения

21.08.2012, 19:24. Просмотров 1895. Ответов 12
Метки нет (Все метки)

Доброго время суток. Написать программу вычисления произведения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\prod_{1}^{\propto}\cos(\frac{\pi }{{2}^{(n+1)}}) = \frac{2}{\pi }
Верхняя граница произведения вводится с клавиатуры. Для решения я использовал разложение cos(x) в ряд:
http://www.cyberforum.ru/cgi-bin/latex.cgi?cos(x)= \sum_{0}^{\propto}\frac{{(-1)}^{n}*{x}^{2n}}{(2n)!}
Взял отношение данного слагаемого к предыдущему:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n}}{{a}_{n-1}}=\frac{\frac{{(-1)}^{n}*({\frac{\pi }{{2}^{(n+1)}}})^{2n}}{(2n)!}}{\frac{{(-1)}^{(n-1)}*({\frac{\pi }{{2}^{(n+1)}})^{(2n-2)}}}{(2n-2)!}}=\frac{{2}^{(n+1)}}{(2n-1)*n*\pi } Если я ошибаюсь пожалуйста меня поправьте. Как правильно????
Вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int N;
int n;
const double Pi = 3.1415;
double s = 1;
cout << "Enter N = ";
cin >> N;
for (n = 1; n <<= N; n++)
s *= double(((pow(2.0,(n+1))/(2*n-1)*n*Pi)));
cout <<"Result is " << s << endl;
    system("pause");
    return 0;
}
Но он видимо не работает???? Если я ошибаюсь пожалуйста меня поправьте. Как правильно???? Заранее огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 19:24
Ответы с готовыми решениями:

Вычисление произведения
Здравствуйте. Мне проблема в том, что я не знаю как написать код по данным...

Вычисление произведения сумм
t=\prod_{a=1}^{5}\sum_{b=1}^{10}cos\,ab Помогите пожалуйста я не очень знаю...

Вычисление конечного произведения
Всем Доброго времени суток! Имеется задача: Вычислить произведение...

Вычисление конечного произведения
Для заданного натурального k и действительного x подсчитать следующее...

Вычисление произведения сумм
t=\prod_{a=2}^{5}\sum_{b=1}^{5}{b}^{3}a Можете подсказать, правильно ли я...

12
-=ЮрА=-
21.08.2012, 23:09
  #2

Не по теме:

Цитата Сообщение от isaak Посмотреть сообщение
Для решения я использовал разложение cos(x) в ряд:
- isaak, никакого разложения в ряд!Используй формулы тригонометрии для частного двух косинусов, но чувствую там общий сомножитель выйдет дай бог, поэтому эту задачу рекомендую решать без итератора. В ближайшее время помогу;)

0
isaak
112 / 49 / 19
Регистрация: 17.10.2010
Сообщений: 721
22.08.2012, 13:26  [ТС] 3
-=ЮрА=- а какую использовать формулы тригонометрии для частного двух косинусов????

http://www.cyberforum.ru/cgi-bin/latex.cgi?\cos \varphi =\frac{a}{\sqrt{{a}^{2}+{b}^{2}}}
или
http://www.cyberforum.ru/cgi-bin/latex.cgi?cos2\varphi ={(\cos {\varphi} ) }^{2}-{(\sin {\varphi })}^{2}= 2* {(\cos \varphi )}^{2}-1=1-2*{(\sin \varphi )}^{2}
Че то я ни чего не понимаю????
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 15:39 4
Почему бы просто так и не вычислить?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<math.h>
int main()
{
   double prod = 1, a;
   int i, n = 10;
   a = 3.1415 / 2.0;
   for(i = 0; i < n; i++)
   {
      a /= 2.0;
      prod *= cos(a);
   }
   printf("prod = %f\n", prod);
   return 0;
}
Зачем косинус в ряд раскладывать? А если и раскладывать, то не одним же коэффициентом обходиться.
2
isaak
112 / 49 / 19
Регистрация: 17.10.2010
Сообщений: 721
22.08.2012, 17:14  [ТС] 5
Thinker спасибо огромное за ответ, но мне не совсем понятно, здесь, что используется встроенная функция cos(a)???? А как сделать, чтобы n можно было бы вводить с клавиатуры???? Я вводил 10, 100, 400.У меня почему то при вводе разных значений n результат один и тот же????
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
    setlocale( LC_ALL,"Russian" );
   double prod = 1, a = 3.1415 / 2.0;
   int i, n;
   cout<<" Введите n:  ";
   cin>>n;
   for(i = 0; i < n; i++)
   {
      a /= 2.0;
      prod *= cos(a);
   }
   cout<<"Произведение равно: "<<prod;
   system("pause");
   return 0;
}
Заранее огромное спасибо!!!!
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 17:25 6
Да, используется функция cos из библиотеки <math.h>. При n>=10 точность уже достаточно большая, поэтому вы это не замечаете (переменные же не резиновые), все у вас правильно. для сравнения попробуйте небольшие n (2, 3,...)
1
isaak
112 / 49 / 19
Регистрация: 17.10.2010
Сообщений: 721
22.08.2012, 20:02  [ТС] 7
Еще одна задача на вычисление произведения. Можно не буду создавать отдельную тему? Вычислить произведение:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\prod_{0}^{\propto}(1+({\frac{1}{2}})^{2n})=2
Верхняя граница произведения вводится с клавиатуры.
Вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian" );
   double p = 1;
   int N;
   int n;
   cout<<" Введите N:  ";
   cin>>N;
   for (n = 0; n <= N; n++)
   {
      
      p *= (1 +  pow((0.5), (2*n)));
 
   }
   
   cout<<"Произведение равно: "<<p;
   system("pause");
   return 0;
}
но при N = 3 уже считает не правильно(внизу на картинке)???? Не знаю почему????
Заранее огромное спасибо.
0
Миниатюры
Вычисление произведения  
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 20:28 8
C
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
   double prod = 1, a = 1;
   int i, n = 10;
   for(i = 0; i <= n; i++)
   {
      prod *= (1.0 + a);
      a /= 4.0;
   }
   printf("prod = %f\n", prod);
   return 0;
}
1
isaak
112 / 49 / 19
Регистрация: 17.10.2010
Сообщений: 721
22.08.2012, 22:13  [ТС] 9
Спасибо огромное за ответ, но не могли бы вы мне пояснить как вы получили из http://www.cyberforum.ru/cgi-bin/latex.cgi?({\frac{1}{2}})^{n}
C++
1
a /= 4.0
???? куда девалась степень n???? Заранее огромное спасибо.
0
Thinker
Эксперт С++
4233 / 2207 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 22:15 10
http://www.cyberforum.ru/cgi-bin/latex.cgi?\left(\frac{1}{2}\right)^{2n}=\left(\frac{1}{4}\right)^{n}
степень вычисляется итеративно, используя информацию предыдущего шага.
1
isaak
112 / 49 / 19
Регистрация: 17.10.2010
Сообщений: 721
22.08.2012, 22:22  [ТС] 11
Спасибо за ответ, не заметил, ступил, все элементарно
0
Thinker
22.08.2012, 22:23
  #12

Не по теме:

наконец-то смеетесь:)

0
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 10:29 13
isaak, не иди по ложному следу!
Алгоритм как и везде лучше отстраивать от ошибки вычислений, а не числа элементов разложения. Задавать число членов ряда - концептуально неверно, т.к. задаваясь этим числом мы никогда не сможем наперёд сказать какую точность обеспечим. Ниже код, основной момент с остановкой итераций я пояснил(почему так - потому что an возрастает и в таких случаях нужно использовать разницу смежных членов разложения)
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
#include <cmath>
#include <iostream>
using namespace std;
 
double getMult(double err);
 
int main()
{
    cout<<"Enter error of calculation : ";
    double err;cin>>err;
    cout<<"2/PI (calc) : "<<getMult(err)<<endl;
    cout<<"2/PI (math) : "<<1/asin(1.0)<<endl;
    return 0;
}
 
double getMult(double err)
{
    double PI = 2*asin(1.0);
    double n  = 1;
    double an = cos(PI/pow(2.0,(n + 1)));
    double mult = 1;
    //Условие окнчания итераций не |an| <= err
    //а вот такое |a(n + 1) - an| < err 
    while(err < fabs(cos(PI/pow(2.0,(n + 2))) - an))
    {
        mult *= an;
        n = n + 1;
        an = cos(PI/pow(2.0,(n + 1)));
    }   
    return mult;
}
1
Миниатюры
Вычисление произведения  
24.08.2012, 10:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 10:29

Вычисление n сомножителей произведения (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)
дано натуральное n. составить программу для вычисления n сомножителей...

Вычисление произведения ряда
Подскажите пожалуйста способ для подсчёта произведения ряда S = \prod_{k =...

Обобщенное вычисление скалярного произведения
Здравствуйте! С помощью шаблонов (их рекурсивных вызовов) должен был посчитать...


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

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

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