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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
#1

Вычислить сумму бесконечного ряда с помощью функций! - C++

13.05.2012, 13:35. Просмотров 1424. Ответов 9
Метки нет (Все метки)

Такая вот задача: Вычислить и напечатать сумму членов бесконечного ряда для заданного значения х с точностью до эпсилонт=0,00001:Вычисление слагаемого и суммы оформить в виде функций.Фото ряда находится во вложении!Вычислить сумму бесконечного ряда с помощью функций!
Вот я написал программу, но она, при задании значений x от 0 до 5 - выдает ответ (-1), а если задаю больше-программа зацикливается...Если я ставлю точку останова и просматриваю работу программы построчно, то в строке,которую я отметил в коде вылетает окошко с сообщением "Нет исходного кода для текущего места!"... Помогите, что тут не так, уже голову сломал(((((
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
using namespace std;
typedef unsigned int UI;
//описание фукций
UI factorial(UI n);
int slagaemoe(UI n,double x);
int SumObsch(double x);
//фукция подсчёта суммы ряда
int SumObsch(double x)
{
    double e=0.00001, slag=1;
    int Sum=1;
    UI n;
    for(n=1;fabs(slag)>e;n++)
    {
        slag=slagaemoe(n,x);
        Sum+=slag;
    }
    return Sum;
}
//функция вычисления очередного слагаемого
int slagaemoe(UI n,double x)
{
    double slagaem;
    if(n%2==0)
        slagaem=pow(x,(int)n)/factorial(n);
    else
        slagaem=(-1)*pow(x,(int)n)/factorial(n);
    return slagaem; //в этой строке вылетает окошко с сообщением!!!
}
//фукция подсчёта факториала числа
UI factorial(UI n)
{
    UI f=1,i;
    for(i=2;i<=n;i++)
        f*=i;
    return f;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double x;
    cout<<"Введите хначение х:";
    cin>>x;
    cout<<"Сумма ряда равна:"<<SumObsch(x);
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 13:35     Вычислить сумму бесконечного ряда с помощью функций!
Посмотрите здесь:
Вычислить значения функции ch x (гиперболический косинус) с помощью бесконечного ряда Тейлора C++
C++ Вычислить сумму бесконечного сходящегося ряда
Вычислить сумму бесконечного сходящегося ряда C++
C++ Вычислить сумму бесконечного сходящегося ряда
C++ Вычислить сумму бесконечного сходящегося ряда.
C++ Вычислить сумму бесконечного ряда с заданной точностью
C++ Вычислить сумму бесконечного ряда, используя подпрограммы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Суслик
4 / 4 / 1
Регистрация: 13.05.2012
Сообщений: 10
13.05.2012, 14:28     Вычислить сумму бесконечного ряда с помощью функций! #2
1. Каждое слагаемое это double, значит и сумма тоже double.
2. У тебя проблема с размером переменных. Ты каждый раз новое слагаемое считал как дробь, где знаменателем является факториал. А он растет так быстро, что очень скоро просто не влазит в int. Поэтому у тебя на 16 слагаемом все обрывалось. Все ряды считаются рекурсивно. Предыдущий элемент умножается на то, что изменяется.

выглядит это вот так теперь

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
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include "stdafx.h"
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#include <iostream>
#include <conio.h>
 
using namespace std;
typedef unsigned int UI;
//описание фукций
 
double slagaemoe(double slad_pred,int n, double x);
double SumObsch(double x);
//фукция подсчёта суммы ряда
double SumObsch(double x)
{
    double e=0.00001, slag=1,slad_next;
    double Sum=1;
    UI n;
    for(n=1;fabs(slag)>e;n++)
    {
        slag=slagaemoe(slag,n,x);
        Sum+=slag;
    }
    return Sum;
}
//функция вычисления очередного слагаемого
double slagaemoe(double slag_pred,int n, double x)
{
    return slag_pred*(-1)*x/n; 
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    double x;
    cout<<"Enter х:";
    cin>>x;
    cout<<"Сумма ряда равна:"<<SumObsch(x);
    getch();
}
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
13.05.2012, 14:51  [ТС]     Вычислить сумму бесконечного ряда с помощью функций! #3
Спасибо большое, только я немного не понимаю, как просчитывается очередное слагаемое....((((
grizlik78
13.05.2012, 14:55
  #4

Не по теме:

Цитата Сообщение от Суслик Посмотреть сообщение
Все ряды считаются рекурсивно. Предыдущий элемент умножается на то, что изменяется.
Это называется рекуррентно. Рекурсия здесь возможна, но не обязательна.

Суслик
4 / 4 / 1
Регистрация: 13.05.2012
Сообщений: 10
13.05.2012, 14:58     Вычислить сумму бесконечного ряда с помощью функций! #5
ну например. возьмем слагаемое x. Это дробь slag1=x/1!. Сравни со вторым слагаемым slag2=-х*х/2! =-x*x/(1!*2)=x/1! * (-x/2)=slag1* (-x/2). Аналогично получим, что slag3=slag2* (-x/3) и тыды. посчитай сам ручками.
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
13.05.2012, 14:59  [ТС]     Вычислить сумму бесконечного ряда с помощью функций! #6
А куда же девался ФАКТОРИАЛ?
Суслик
4 / 4 / 1
Регистрация: 13.05.2012
Сообщений: 10
13.05.2012, 14:59     Вычислить сумму бесконечного ряда с помощью функций! #7
Цитата Сообщение от grizlik78 Посмотреть сообщение

Не по теме:


Это называется рекуррентно. Рекурсия здесь возможна, но не обязательна.

В данном случае на мой взгляд она оптимальна.
grizlik78
Эксперт С++
1908 / 1440 / 110
Регистрация: 29.05.2011
Сообщений: 2,995
13.05.2012, 15:00     Вычислить сумму бесконечного ряда с помощью функций! #8
Цитата Сообщение от Суслик Посмотреть сообщение
В данном случае на мой взгляд она оптимальна.
Рекурсия или рекуррента?
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
13.05.2012, 15:02  [ТС]     Вычислить сумму бесконечного ряда с помощью функций! #9
ааа.... всё, понял!!!! ОГРОМНОЕ СПАСИБО ТЕБЕ!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2012, 15:07     Вычислить сумму бесконечного ряда с помощью функций!
Еще ссылки по теме:
Вычислить с точностью (эпсилант) сумму бесконечного ряда. C++
Вычислить сумму бесконечного ряда с заданной точность для значения x C++
C++ Вычислить сумму членов бесконечного ряда с заданной степенью точности > 0 и заданного значения х
C++ Вычислить сумму ряда с помощью циклов while, for, do.while
C++ Вычислить сумму ряда с помощью циклов while, do while, for

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

Или воспользуйтесь поиском по форуму:
Суслик
4 / 4 / 1
Регистрация: 13.05.2012
Сообщений: 10
13.05.2012, 15:07     Вычислить сумму бесконечного ряда с помощью функций! #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
Рекурсия или рекуррента?
Извини меня, перепутала слова. Рекурсия здесь действительно не используется (функция сама себя не вызывает). Но используется рекуррентная формула вычисления каждого последующего слагаемого (через предыдущее).
Yandex
Объявления
13.05.2012, 15:07     Вычислить сумму бесконечного ряда с помощью функций!
Ответ Создать тему
Опции темы

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