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

Вычислить сумму ряда - C++

Восстановить пароль Регистрация
 
Svender
1 / 1 / 0
Регистрация: 06.05.2011
Сообщений: 12
23.12.2011, 10:52     Вычислить сумму ряда #1
Столкнулся с некоторыми задачками, хотелось бы разобраться:

Вычислить сумму ряда с позиции M до позиции N. Каждый i-ый член ряда определяется соотношением:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{2^{i-1}}{i!}.
Результат вывести на экран.

Реализация задач на Си. Заранее спасибо.

 Комментарий модератора 
  • Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.
  • На каждый вопрос создавайте по одной теме - это помогает избежать путаницы в ответах и облегчает поиск.
  • Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.
  • Используйте редактор формул
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2011, 10:52     Вычислить сумму ряда
Посмотрите здесь:

Вычислить сумму ряда C++
C++ Вычислить сумму ряда
C++ Вычислить сумму ряда
Вычислить сумму ряда y=x-(x)^3)/3!+(x)^5)/5!-(x)^7)/7! C++
C++ Вычислить сумму ряда
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
23.12.2011, 12:46     Вычислить сумму ряда #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
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
long fact(long n)
{
    long ret = n;
    if(0 < (n = n - 1))
        ret *= fact(n);
    return ret;
}
 
double calc_element(long i)
{
    double elem = pow(2, i - 1);
    elem /= 1.0*fact(i);
    return elem;
}
 
 
int main()
{
    long i,M,N;
    printf("Enter M = ");scanf("%u",&M);
    printf("Enter N = ");scanf("%u",&N);
    double elem = calc_element(M);
    printf("elem[%d]= %lf\n",M,elem);
    double summ = elem;
    for(i = M + 1; i <= N; i++)
    {
        elem *= 1.0/(i + 1);
        summ += elem;
    }
    printf("summ = %lf\n",summ);
    printf("Press any key to continue\n");
    getch();
    return 0;
}
Миниатюры
Вычислить сумму ряда   Вычислить сумму ряда  
-=ЮрА=-
Заблокирован
Автор FAQ
23.12.2011, 12:58     Вычислить сумму ряда #3
Остановлюсь на этом
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
elem *= 1.0/(i + 1);
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{i + 1} = \frac{{2}^{(i + 1) - 1}}{(i + 1)!} = \frac{{2}^{i}}{(i + 1)*i!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{i} = \frac{{2}^{i - 1}}{i!}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{i + 1}}{{a}_{i}} = \frac{\frac{{2}^{i}}{(i + 1)*i!}}{\frac{{2}^{i - 1}}{i!}} = \frac{{2}^{i - (i - 1)}}{(i + 1)} = \frac{2}{i + 1}

Добавлено через 55 секунд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
elem *= 1.0/(i + 1);
- я в уме делил надо elem *= 2.0/(i + 1)
Svender
1 / 1 / 0
Регистрация: 06.05.2011
Сообщений: 12
14.01.2012, 19:17  [ТС]     Вычислить сумму ряда #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
C
1
2
3
4
5
6
7
long fact(long n)
{
    long ret = n;
    if(0 < (n = n - 1))
        ret *= fact(n);
    return ret;
}
Юра, а для чего этот блок?
Aed Ginvaell
 Аватар для Aed Ginvaell
1 / 1 / 0
Регистрация: 14.01.2012
Сообщений: 36
14.01.2012, 19:25     Вычислить сумму ряда #5
Цитата Сообщение от Svender Посмотреть сообщение
Юра, а для чего этот блок?
Это - рекурсия. заменяет цикл
-=ЮрА=-
Заблокирован
Автор FAQ
14.01.2012, 19:26     Вычислить сумму ряда #6
Функия fact возвращает факториал числа переданного ей в качестве входного парметра
Svender
1 / 1 / 0
Регистрация: 06.05.2011
Сообщений: 12
14.01.2012, 19:40  [ТС]     Вычислить сумму ряда #7
Ясно, спасибо. Но компилятор выдаёт сбой построения. Ипользую визуал студио 2010 ultimate.
-=ЮрА=-
Заблокирован
Автор FAQ
14.01.2012, 22:11     Вычислить сумму ряда #8
Цитата Сообщение от Svender Посмотреть сообщение
Ясно, спасибо. Но компилятор выдаёт сбой построения. Ипользую визуал студио 2010 ultimate.
- приложите скрин ошибки (10-ка очень геморна,и часто "ноет" на совсем обычные вещи)

Добавлено через 1 минуту
Как вариант вместо такого конца main
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
getch();
* * * * return 0;
}
- запишите такой

C
1
2
3
_getch();
* * * * return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
14.01.2012, 22:19     Вычислить сумму ряда #9
Хотя...2008-ая студия указала сюда(для pow нужно явное указание типа аргумента, в ранних версиях студии такой беды не было)
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
double elem = pow(2, i - 1);
- чтож запишите эту строку вот так
C
1
double elem = pow(2.0, i - 1);
Впрочем вот весь код со скрином Debug
Код здесь
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
long fact(long n)
{
    long ret = n;
    if(0 < (n = n - 1))
        ret *= fact(n);
    return ret;
}
 
double calc_element(long i)
{
    double elem = pow(2.0, i - 1);
    elem /= 1.0*fact(i);
    return elem;
}
 
 
int main()
{
    long i,M,N;
    printf("Enter M = ");scanf("%u",&M);
    printf("Enter N = ");scanf("%u",&N);
    double elem = calc_element(M);
    printf("elem[%d]= %lf\n",M,elem);
    double summ = elem;
    for(i = M + 1; i <= N; i++)
    {
        elem *= 1.0/(i + 1);
        summ += elem;
    }
    printf("summ = %lf\n",summ);
    printf("Press any key to continue\n");
    _getch();
    return 0;
}
Миниатюры
Вычислить сумму ряда  
Svender
1 / 1 / 0
Регистрация: 06.05.2011
Сообщений: 12
16.01.2012, 12:07  [ТС]     Вычислить сумму ряда #10
как пишется программа без циклов:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
long fact(long n)
{
        long ret = n;
        if(0 < (n = n - 1))
                ret *= fact(n);
        return ret;
}
 
double calc_element(long i)
{
        double elem = pow(2, i - 1);
        elem /= 1.0*fact(i);
        return elem;
}
 Комментарий модератора 
Используйте теги форматирования кода!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2012, 20:47     Вычислить сумму ряда
Еще ссылки по теме:

Вычислить сумму ряда C++
Вычислить сумму ряда C++
C++ Вычислить сумму ряда

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
16.01.2012, 20:47     Вычислить сумму ряда #11
Цитата Сообщение от Svender Посмотреть сообщение
как пишется программа без циклов:
- м.б имелось ввиду как сделать с циклами и без рекурсии(в коде который вы выделили никаких циклов нет - это тела функций пользователя)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int main()
{
    long i,M,N;
    printf("Enter M = ");scanf("%u",&M);
    printf("Enter N = ");scanf("%u",&N);
    double summ = 0;
    double elem = 1;
    for(i = 1; i < N; i++)
    {
        elem *= 2.0/(i + 1);
        if(M - 1 <= i)
            summ += elem;
    }
    printf("summ = %lf\n",summ);
    printf("Press any key to continue\n");
    _getch();
    return 0;
}
На скринах отработка алгоритма и проверка его работы в MathCAD
Миниатюры
Вычислить сумму ряда   Вычислить сумму ряда  
Yandex
Объявления
16.01.2012, 20:47     Вычислить сумму ряда
Ответ Создать тему
Опции темы

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