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

Найти сумму ряда с точностью - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
06.09.2011, 21:53     Найти сумму ряда с точностью #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
#include <iostream>
#include <conio.h>  
#include <cmath>
 
using namespace std;
 
int main()
{
setlocale (LC_ALL,"Russian");
cout << "Найти сумму ряда с точностью Е=10-4, Г®общий член которого = n!/(2n)!" << endl;
double z;
double a = 1;
double n = 1;
double S = 0;
double y = 1;
double const e = 0.0001;
while (a >= e)
{
        y = y * n;
        z = z*(n+n);
        S = S + y / z;
        a = y / z;
        n++;
        cout << a << endl;
}
 
cout << "Сумма S = ";
cout << S << endl;
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2011, 21:53     Найти сумму ряда с точностью
Посмотрите здесь:

Найти сумму ряда с точностью e C++
Найти сумму ряда с точностью е C++
C++ Найти сумму ряда с точностью
Найти сумму ряда с точностью C++
C++ Найти сумму ряда с заданной точностью, если дан общий член ряда
Найти сумму ряда с точностью е C++
C++ Найти сумму ряда с точностью до члена ряда
Найти сумму ряда с точностью до члена ряда C++
C++ Найти сумму ряда с точностью
Найти сумму ряда с точностью E C++
Найти сумму ряда с точностью Е=10-4 C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
06.09.2011, 23:55     Найти сумму ряда с точностью #2
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
#include <iostream>
#include <cmath>
#include <cstdio>
 
#define e 10e-4
 
int main()
{
    double a = 1;
    double n = 1;
    double S = 0;
 
    setlocale (LC_ALL,"Russian");
    std::cout << "Найти сумму ряда с точностью Е=10-4, ообщий член которого = n!/(2n)!" << std::endl;
 
    while (a >= e)
    {
        S += a *= n / (2 * n + 1);
        n++;
        std::cout << a << std::endl;
    }
 
    std::cout << std::endl << "Сумма S = ";
    std::cout << S << std::endl;
    std::getchar();
 
    return 0;
}
Yurii_74
paladin
 Аватар для Yurii_74
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
07.09.2011, 08:18     Найти сумму ряда с точностью #3
Подсказка (возможно не к этому примеру, но к сходящимся рядам в общем): double не резиновый, при сложении очень малых значений с очень большими (относительно, естественно) малое просто не входит в значимые разряды и отсекается. Складывать надо очень аккуратно по кускам (проверка S главного cо следующим членом ряда, если сильно разнятся, то завести 2ую сумму и в ней складывать до тех пор, пока не получится сумма, сравнимая с Sглавным, 2ая тоже может иметь такое неприятное явление, и, возможно надо заводить 3ю и т. д.).
Также почему условие while (a >= e)? Достаточно-ли только его?
z вычисляется верно? (при n=2 z д.б. 4! = 4*3*2*1 = 24, у нас z(1) = ??? непонятно чему, инициализации нет, ну пусть z начальное было б 1, тогда z(1)=2(верно), z(2)=2*(2+2) = 8 < 24 (неверно)).

Добавлено через 10 минут
Итого: попробуйте сначала z = z*(2n*(2n-1)), и инициализируйте его.

Не по теме:

И после этого ещё говорят, что прогерам не нужно знание математики и внутреннего представления типов данных. Мдя...

LeX
154 / 154 / 39
Регистрация: 30.06.2010
Сообщений: 628
07.09.2011, 09:35     Найти сумму ряда с точностью #4
согласен с Yurii_74

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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"Russian");
    cout << "Найти сумму ряда с точностью Е=10-4, ообщий член которого = n!/(2n)!" << endl;
    double n = 1;
    double S = 0;
    double y = 1;
    double const e = 0.0001;
    while (y >= e)
    {
        y=y*n/(2*n*(2*n-1));
        S=S+y;
        n++;
        cout << y << endl;
    }
    cout << "Сумма S = ";
    cout << S << endl;
    _getch();
    return 0;
}
Ruslanishe, проще, не так ли? зачем себе жизнь усложнять лишними операциями и переменными?
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
07.09.2011, 15:41  [ТС]     Найти сумму ряда с точностью #5
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Подсказка (возможно не к этому примеру, но к сходящимся рядам в общем): double не резиновый, при сложении очень малых значений с очень большими (относительно, естественно) малое просто не входит в значимые разряды и отсекается. Складывать надо очень аккуратно по кускам (проверка S главного cо следующим членом ряда, если сильно разнятся, то завести 2ую сумму и в ней складывать до тех пор, пока не получится сумма, сравнимая с Sглавным, 2ая тоже может иметь такое неприятное явление, и, возможно надо заводить 3ю и т. д.).
Также почему условие while (a >= e)? Достаточно-ли только его?
z вычисляется верно? (при n=2 z д.б. 4! = 4*3*2*1 = 24, у нас z(1) = ??? непонятно чему, инициализации нет, ну пусть z начальное было б 1, тогда z(1)=2(верно), z(2)=2*(2+2) = 8 < 24 (неверно)).

Добавлено через 10 минут
Итого: попробуйте сначала z = z*(2n*(2n-1)), и инициализируйте его.

Не по теме:

И после этого ещё говорят, что прогерам не нужно знание математики и внутреннего представления типов данных. Мдя...


Я не скажу, что незнаю совсем математику , но соображаю! ту проверку z я написал от безысходности)) сам тоже пытался вывести, но не получилось!я так и написал перед кодом что неправильно работает! Спасибо большое!

Добавлено через 1 минуту
Цитата Сообщение от LeX BB Посмотреть сообщение
согласен с Yurii_74

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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"Russian");
    cout << "Найти сумму ряда с точностью Е=10-4, ообщий член которого = n!/(2n)!" << endl;
    double n = 1;
    double S = 0;
    double y = 1;
    double const e = 0.0001;
    while (y >= e)
    {
        y=y*n/(2*n*(2*n-1));
        S=S+y;
        n++;
        cout << y << endl;
    }
    cout << "Сумма S = ";
    cout << S << endl;
    _getch();
    return 0;
}
Ruslanishe, проще, не так ли? зачем себе жизнь усложнять лишними операциями и переменными?
Переменные писал только для того, чтобы не запутаться!
Yandex
Объявления
07.09.2011, 15:41     Найти сумму ряда с точностью
Ответ Создать тему
Опции темы

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