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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
#1

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

21.08.2012, 19:24. Просмотров 1736. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление произведения (C++):

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

Вычисление произведения сумм - C++
t=\prod_{a=2}^{5}\sum_{b=1}^{5}{b}^{3}a Можете подсказать, правильно ли я код написал? #include &lt;iostream&gt; #include &lt;math.h&gt; ...

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

Вычисление конечного произведения - C++
Для заданного натурального k и действительного x подсчитать следующее выражение: P=\prod_{n=2}^{k}\left( 1+\frac{(-1)^n...

Вычисление конечного произведения - C++
Всем Доброго времени суток! Имеется задача: Вычислить произведение \sum_{n=1}^{k} (1+\frac{x^n}{2n!}) Я сделал данную программу, заведя...

Вычисление произведения ряда - C++
Подскажите пожалуйста способ для подсчёта произведения ряда S = \prod_{k = 0}^{\propto }\left(1 - \frac{4x^2}{\left(2k + 1 \right)^2 \pi...

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

Не по теме:

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

0
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Эксперт С++
4228 / 2202 / 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;
}
Зачем косинус в ряд раскладывать? А если и раскладывать, то не одним же коэффициентом обходиться.
2
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
22.08.2012, 17:25 #6
Да, используется функция cos из библиотеки <math.h>. При n>=10 точность уже достаточно большая, поэтому вы это не замечаете (переменные же не резиновые), все у вас правильно. для сравнения попробуйте небольшие n (2, 3,...)
1
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Эксперт С++
4228 / 2202 / 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;
}
1
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Эксперт С++
4228 / 2202 / 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}
степень вычисляется итеративно, используя информацию предыдущего шага.
1
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
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
Привет! Вот еще темы с ответами:

Вычисление обратной величины произведения в С++ - C++
Помогите чайнику Даны натуральное число n, действительные числа a1.....an. Вычислить обратную величину произведения тех членов...

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

Вычисление произведения нечетных чисел от 1 до 10. - C++
Написать программу для вычисления произведения нечетных чисел от 1 до 10 и вывести на экран. Заранее благодарен тому, кто поможет...

Вычисление произведения отрицательных элементов - C++
Напишите фрагменты программ для решения следующих задач: 1)вычисление произведения отрицательных элементов в каждом столбце двумерного...


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

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

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