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

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

Войти
Регистрация
Восстановить пароль
 
 
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
#1

Циклы: вычисление синуса - C++

26.07.2014, 21:51. Просмотров 1268. Ответов 19
Метки нет (Все метки)

Приступил к циклам.
Задание такое:
Как известно, функция sin(x) может может быть вычислена в виде ряда
sin(x)=http://www.cyberforum.ru/cgi-bin/latex.cgi?x-x^3/3!+x^5/5!-...=\sum_{n=0}^{\propto }(-1)^n*(x^(2n+1))/(2n+1)!
На практике при вычислении значения функции sin(x) соответствующий ряд ограничивают, т.е. рассматривают приближенное выражение sin(x)= http://www.cyberforum.ru/cgi-bin/latex.cgi?x-x^3/3!+x^5/5!-x^7/7!+...+ (-1)^N*x^2N+1/(2N+1)!=\sum_{n=0}^{N}(-1)^n*x^2n+1/(2n+1)!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
using namespace std;
const int N=100;
int main()
{
    double x,q,s=0;
    int n;
    cout<<"Enter x=";
    cin>>x;
    q=x;
    //Âû÷èñëåГ*ГЁГҐ Г±ГЁГ*ГіГ±Г*
    for (n=1;n<=N;n++)
    {
    s+=q;
    q*=(-1)*x*x/(2*n)/(2*n+1);
    }
    cout<<"sin("<<x<<") = "<<s<<endl;
    system("PAUSE");
    return 0;
}
Не понял тот момент как происходят действия в теле цикла. Обязательна ли последовательность действий?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.07.2014, 21:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Циклы: вычисление синуса (C++):

Задание на вычисление синуса - C++
В этой задачке нужно вычислить синус вводимого угла без использования библиотеки &lt;cmath&gt; Я сколько не пытался не получается вот...

Вычисление гиперболического синуса - C++
Помогите пожалуйста, абсолютно не могу понять..

Неправильное вычисление синуса угла - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;math.h&gt; using namespace std; void main() { ...

вычисление погрешности - циклы. - C++
Задание во вложении. мой код приложен. не правильно работает ряд, точнее его накопление, на сколько я понимаю - поправте что ни так.. ...

Циклы: вычисление роста населения - C++
Здравствуйте! Подскажите пожалуйста как решить данную проблему. Надо сделать так, чтобы каждый раз, когда население увеличивается...

Циклы. Вычисление суммы ряда - C++
Помогите, пожалуйста, найти ошибки. Условие: Вычислить и вывести на экран в виде таблицы значения функции, заданной с по-мощью ряда...

19
S_el
2113 / 1633 / 308
Регистрация: 15.12.2013
Сообщений: 6,576
26.07.2014, 21:57 #2
Senarist, посмотрите в готовых задачах,кто-то уже синус-разложение выкладывал.

Цитата Сообщение от Senarist Посмотреть сообщение
Обязательна ли последовательность действий?
О каких именно действиях речь?Есть конкретная формула,по ней и вычисляйте.
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
26.07.2014, 22:06  [ТС] #3
S_el Ок. Немного по другому тогда. Пусть N=1 а не 100. по условию цикл пройдет ток 1 раз. Не могли бы вы мне показать какие действия будут происходить в теле цикла?
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
26.07.2014, 22:16 #4
Цитата Сообщение от Senarist Посмотреть сообщение
C++
1
2
s+=q;
 q*=(-1)*x*x/(2*n)/(2*n+1);
Те же действия, но только один раз. Вообще имхо напрашивается поменять строки местами, а "s" илициализировать не нулем, а "x". Иначе получается несколько бредово: мы вычисляем еще один виток цикла, а результат используем только в следующей итерации. Проще говоря в текущем виде последняя итерация цикла бесполезна.
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
26.07.2014, 22:33  [ТС] #5
DarkMasterW вот это меня и вводит в заблуждение.
Допустим:
for(int i=1; i<=n; i++){
s+=i }
Здесь я вижу что идет суммирование натуральных чисел. Даже фигурные скобки можно упустить. А что происходит в той программе не понимаю.(
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
26.07.2014, 22:41 #6
Что происходит? Ну крутит он в цикле эти две строки. Вот и все что происходит. Или тебя интересует почему именно такая математика?
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
26.07.2014, 22:48  [ТС] #7
Если вот тут видно что for(int i=1; i<=n; i++){ s+=i } допустим n=3 то 1+2+3 а из того кода я просто не вижу что с чем. Надеюсь вы поняли что я не понял))
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
26.07.2014, 22:57 #8
не понял, если честно...
q*=(-1)*x*x/(2*n)/(2*n+1);
s+=q;
ну счтитайте у вас не просто +i, а просто чуть более сложная формула. Поменял местами специально - так нагляднее. Почему формула такая - я не знаю и знать не хочу(имхо бесполезная вещь, кроме каких-то узких направлений).
если будет:
C++
1
2
3
4
5
for (n=1;n<=N;n++)
{
q*=n*x*x;
s+=q;
}
то вам понятно, что происходит?
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
26.07.2014, 23:06  [ТС] #9
DarkMasterW вот так да. А в том коде, как написано в учебнике сделано для того чтобы избежать больших значений в частности http://www.cyberforum.ru/cgi-bin/latex.cgi?x^(2n+1) и http://www.cyberforum.ru/cgi-bin/latex.cgi?(2n+1)!
Для этого использовали http://www.cyberforum.ru/cgi-bin/latex.cgi?{q}_{n}={q}_{n-1}*(-1)*x^2/(2n)(2n+1)
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
26.07.2014, 23:15 #10
Примите как данность и не заморачивайтесь.Ну либо подробно разбирайте математические преобразования. Смысл в этом копаться какой? Я в школьные годы тоже докапывался для преподов с просьбами вывести формулу, а не предоставлять, как данность. Ну любопытно было. Практического смыла не было. Объяснить эту математику я вам не в состоянии - я всю ее забыл, как страшный сон и не жалею. Для практический целей дальше синусов уходить обычно не приходится, да и синусы редкость, а ряды... Ну хотите - учите, узнавайте все досканально, если желание есть - это в плюс пойдет.
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
26.07.2014, 23:20  [ТС] #11
DarkMasterW да по самим вычислениям вопросов нет, хотя на семестровую с рядами и разложениями в ряд много времени потратил)) Меня интересует сам код. Даже если поменять эти две строчки в теле цикла местами то результаты разные.
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
26.07.2014, 23:34 #12
естественно разные.
Давайте по-дубовому

C++
1
2
3
4
5
6
int q;
for (n=1;n<=N;n++)
{
s+=q;
q*=*x*n;
}
на данном примере понятно, почему результат будет другой, если перевернуть строки? У нас результат содержится в s, но вычисления s содержатся после присвоения результату. Это глупость. Чтобы эту глупость убрать - я писал выше, что нужно сделать.

Вы можете конретизировать, что именно вам не понятно? Тут 2 строчки математики и все...
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
26.07.2014, 23:40  [ТС] #13
DarkMasterW это я понял. Я поэтому и не понял как вычисляется результат. Ведь исходя из моего первого представленного кода все так как и у вас.
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
26.07.2014, 23:55 #14
результат не вычисляется в пределах одного цикла. Точнее он вычисляется, но не присваивается. Он просто выкидывается.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
const int N=100;
int main()
{
    double x,q,s=0;
    int n;
    cout<<"Enter x=";
    cin>>x;
    q=x;
    s=q; // Добавлено
    //Вычисление синуса
    for (n=1;n<=N;n++)
    {
    q*=(-1)*x*x/(2*n)/(2*n+1);
    s+=q;
    }
    cout<<"sin("<<x<<") = "<<s<<endl;
    system("PAUSE");
    return 0;
}
вот так попробуйте. Может заодно и понятнее станет. По большому счету я просто вынес:
s+=q;
из первого цикла наружу до начала for. А дальше уже можно спокойно проводит вычисления и сразу присваивать результат.

Добавлено через 4 минуты
Результат должен быть идентичен вашему варианту кода, но только при условии, если в вашем коде будет выполнено на 1 итерацию больше.
0
Senarist
50 / 54 / 15
Регистрация: 14.03.2014
Сообщений: 637
27.07.2014, 00:03  [ТС] #15
Вот теперь понятно, только из каких соображений добавлено это:
C++
1
s=q;
0
27.07.2014, 00:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2014, 00:03
Привет! Вот еще темы с ответами:

Вложенные циклы. Вычисление двойной суммы. - C++
#include&lt;stdlib.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; long factor(int k) {long res; if((k==1)||(k==0)) res=1; else...

Вложенные циклы (вычисление суммы ряда) - C++
Ребят выручайте пожалуйста, завтра уже должна это буду сдать, а ничего путнего не получается по этой теме :wall: Вычислить и вывести...

Вычисление суммы квадратов четных и кубов нечетных чисел (циклы) - C++
7. С помощью цикла «пока» или цикла «до» написать программу вычисления суммы S квадратов четных и кубов нечетных чисел от 1 до N. Проверку...

Циклы с параметром. Вычисление суммы квадратов четных и кубов нечетных чисел от 1 до N - C++
Написать программу вычисления суммы S квадратов четных и кубов нечетных чисел от 1 до N. Проверку числа на четность осуществить с помощью...


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

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

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