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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
21.08.2012, 19:24     Вычисление произведения #1
Доброго время суток. Написать программу вычисления произведения:
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;
}
Но он видимо не работает???? Если я ошибаюсь пожалуйста меня поправьте. Как правильно???? Заранее огромное спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
21.08.2012, 23:09
  #2

Не по теме:

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

isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
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}
Че то я ни чего не понимаю????
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 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;
}
Зачем косинус в ряд раскладывать? А если и раскладывать, то не одним же коэффициентом обходиться.
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
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;
}
Заранее огромное спасибо!!!!
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 17:25     Вычисление произведения #6
Да, используется функция cos из библиотеки <math.h>. При n>=10 точность уже достаточно большая, поэтому вы это не замечаете (переменные же не резиновые), все у вас правильно. для сравнения попробуйте небольшие n (2, 3,...)
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
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 уже считает не правильно(внизу на картинке)???? Не знаю почему????
Заранее огромное спасибо.
Миниатюры
Вычисление произведения  
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 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;
}
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
22.08.2012, 22:13  [ТС]     Вычисление произведения #9
Спасибо огромное за ответ, но не могли бы вы мне пояснить как вы получили из http://www.cyberforum.ru/cgi-bin/latex.cgi?({\frac{1}{2}})^{n}
C++
1
a /= 4.0
???? куда девалась степень n???? Заранее огромное спасибо.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 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}
степень вычисляется итеративно, используя информацию предыдущего шага.
isaak
101 / 38 / 9
Регистрация: 17.10.2010
Сообщений: 634
22.08.2012, 22:22  [ТС]     Вычисление произведения #11
Спасибо за ответ, не заметил, ступил, все элементарно
Thinker
22.08.2012, 22:23
  #12

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 10:29     Вычисление произведения
Еще ссылки по теме:

C++ Вычисление произведения сумм
Вычисление произведения сумм C++
C++ Вычисление произведения

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Вычисление произведения  
Yandex
Объявления
24.08.2012, 10:29     Вычисление произведения
Ответ Создать тему
Опции темы

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