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

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

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

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

13.05.2012, 13:35. Просмотров 1505. Ответов 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить сумму бесконечного ряда с помощью функций! (C++):

Вычислить значения функции ch x (гиперболический косинус) с помощью бесконечного ряда Тейлора - C++
не могу решить никак 10. Написать программу вычисления значения функции ch x (гиперболический косинус) с помощью бесконечного ряда...

Вычислить сумму бесконечного сходящегося ряда - C++
Вычислить сумму бесконечного сходящегося ряда. Суммирование прекратить при появлении в сумме слагаемых, имеющих абсолютную величину,...

Вычислить сумму бесконечного сходящегося ряда. - C++
Есть такая вот задача.. Вычислить сумму бесконечного сходящегося ряда. Суммирование прекратить при появлении в сумме слагаемых,...

Вычислить сумму бесконечного сходящегося ряда - C++
Вычислить сумму бесконечного сходящегося ряда. Суммирование прекратить при появлении в сумме слагаемых, имеющих абсолютную величину,...

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

Вычислить сумму бесконечного ряда, используя подпрограммы - C++
Вычислить сумму бесконечного ряда, используя подпрограммы. Вычисление общего члену оформить в виде функции, вычисления факториала оформить...

9
Суслик
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();
}
2
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
13.05.2012, 14:51  [ТС] #3
Спасибо большое, только я немного не понимаю, как просчитывается очередное слагаемое....((((
0
grizlik78
13.05.2012, 14:55
  #4

Не по теме:

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

0
Суслик
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) и тыды. посчитай сам ручками.
1
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
13.05.2012, 14:59  [ТС] #6
А куда же девался ФАКТОРИАЛ?
0
Суслик
4 / 4 / 1
Регистрация: 13.05.2012
Сообщений: 10
13.05.2012, 14:59 #7
Цитата Сообщение от grizlik78 Посмотреть сообщение

Не по теме:


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

В данном случае на мой взгляд она оптимальна.
1
grizlik78
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
13.05.2012, 15:00 #8
Цитата Сообщение от Суслик Посмотреть сообщение
В данном случае на мой взгляд она оптимальна.
Рекурсия или рекуррента?
0
sniperni
1 / 1 / 1
Регистрация: 28.11.2011
Сообщений: 49
13.05.2012, 15:02  [ТС] #9
ааа.... всё, понял!!!! ОГРОМНОЕ СПАСИБО ТЕБЕ!!!
0
Суслик
4 / 4 / 1
Регистрация: 13.05.2012
Сообщений: 10
13.05.2012, 15:07 #10
Цитата Сообщение от grizlik78 Посмотреть сообщение
Рекурсия или рекуррента?
Извини меня, перепутала слова. Рекурсия здесь действительно не используется (функция сама себя не вызывает). Но используется рекуррентная формула вычисления каждого последующего слагаемого (через предыдущее).
0
13.05.2012, 15:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2012, 15:07
Привет! Вот еще темы с ответами:

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

Вычислить с точностью (эпсилант) сумму бесконечного ряда. - C++
1)используя смешанный способ вычисления члена ряда, 2)используя рекуррентную формулу для вычисления члена ряда.

Вычислить сумму бесконечного ряда с заданной точность для значения x - C++
Вычислить суму бесконечного ряда с заданной точностью ε &lt; 1 для –1 &lt; x &lt; 1 Программа должна содержать простое меню, которое...

Вычислить сумму членов бесконечного ряда с заданной степенью точности > 0 и заданного значения х - C++
с Latex не стал мучится - приложил изображением.


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

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

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