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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
#1

Факториалы... - C++

22.12.2010, 12:59. Просмотров 1610. Ответов 28
Метки нет (Все метки)

Приветствую. Если напишу, что нужна помощь в решении задачи - сурово вас обману. Помощь не нужна - нужно решение. Язык - Си, среда Dev-C++

Написать функцию для вычисления значения
Название: LySmkmlb.png
Просмотров: 72

Размер: 3.1 Кб

Вычислить с ее помощью значения S(n) для n от 12 до 24 с шагом 4

Добавлено через 21 час 8 минут
Благодаря NNN777 есть такой вариант, но ответ выврдится совсем невнятно

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
#include <iostream>
#include <cmath>
#include <conio.h>
 
long int factorial (long int numb);
 
using namespace std;
 
int main()
{
        int i;
        long int z, k;
        long double S;
        
        for (i=12; i<=24; i+=4)
        {
                z=factorial (2*i);
                k=factorial (24+i);
                S=double(z)/double(k);
                cout<<"S(n)= "<<S<<" "; 
        }
        cout<<endl;
        getch();
        return 0;
}
long int factorial (long int numb)
{
        if (numb<=1)
                return 1;
        else
                return numb * factorial(numb-1);
}
Факториалы...

 Комментарий модератора 
Прикрепляйте картинки к сообщениям.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2010, 12:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Факториалы... (C++):

Факториалы - C++
http://acm.timus.ru/problem.aspx?space=1&amp;num=1083 помогите решить эту задачу у меня мысль есть, но похоже неправильная. ...

Факториалы! - C++
В лабе нужно вычислить выражение, в котором находятся числа с факториалами в таком порядке: 1!+2!+...+К!, я не знаю как это описать в...

Большие факториалы - C++
Помогите написать программу,котороя щитает большые фактуриалы(100!,200! и тд)

Факториалы числа - C++
Дано число N. Рассчитать и вывести первые N факториалов. (1!, 2! ... N!) Задача-то лёгкая, но есть одна загвоздка: переменная цикла и...

Рекурсия: вывести факториалы от 1 до 10 - C++
Нужно рекурсивно вывести все факториалы от 1-го до 10

Обьясните, почему код так странно считает факториалы - C++
Добрый день, ув. форумчане. Есть код, считающий факториалы:#include &quot;stdio.h&quot; #include &quot;windows.h&quot; __int64 factorial(__int64 n) { ...

28
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 13:09 #2
Цитата Сообщение от dimaki Посмотреть сообщение
Благодаря NNN777 есть такой вариант, но ответ выврдится совсем невнятно
А ты представляешь, к примеру, сколько цифр будет в числе (24 + 24)! ?
Да и вообще эта программа делает не то, что должна делать
0
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
22.12.2010, 13:16  [ТС] #3
крайне много
ну а я что могу поделать? - такое задание.
есть другие варианты? - с радостью взгляну
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
22.12.2010, 14:16 #4
-----
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 14:24 #5
Легко видеть, что http://www.cyberforum.ru/cgi-bin/latex.cgi?(\forall i \in [1, n]) \, 2 \cdot i \leq  n + n, значит, (n + i)! будет всегда делиться на (2i)! без остатка. Этим мы и воспользуемся.
Проверяй:
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
#include <stdio.h>
#include <stdlib.h>
 
typedef unsigned long long  ullong_t;
typedef long double     ldouble_t;
 
ullong_t product(size_t, size_t);
ldouble_t S(size_t);
void tabulate(size_t, size_t, size_t);
 
int main()
{
    tabulate(12, 24, 4);
    exit(0);
}
 
ullong_t product(size_t a, size_t b)
{
    ullong_t result = 1;
    while(a <= b)
        result *= a++;
        
    return result;
}
 
ldouble_t S(size_t n)
{
    if(!n)
    {
        fprintf(stderr, "n must be a positive non-zero number\n");
        exit(1);
    }
    size_t i = 1;
    ldouble_t sum = 0;
    while(i <= n)
    {
        sum += 1. / (ldouble_t) product(2 * i + 1, n + i);
        ++i;
    }
    
    return sum;
}
 
void tabulate(size_t a, size_t b, size_t step)
{
    for( ; a <= b; a += step)
        printf("S[%u] = %Lf\n", a, S(a));
}
Вроде переполнения не должно быть.

igorrr37, во-первых, ты неправильно понял задание, во-вторых, 48 факториал уж точно ни в какую переменную не влезет
1
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
22.12.2010, 16:24  [ТС] #6
Спасибо за помощь.
Код я не понял абсолютно, ибо нуб.
Ответ стал выводиться более понятно, но от этого не менее неправильно)

Название: FTY4WiD1.png
Просмотров: 90

Размер: 721 байт
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:27 #7
Цитата Сообщение от dimaki Посмотреть сообщение
Ответ стал выводиться более понятно, но от этого не менее неправильно)
Хе, а у меня - правильно:
Bash
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
55
56
57
nameless@nameless-desktop:~/foo$ cat main.c
#include <stdio.h>
#include <stdlib.h>
 
typedef unsigned long long      ullong_t;
typedef long double             ldouble_t;
 
ullong_t product(size_t, size_t);
ldouble_t S(size_t);
void tabulate(size_t, size_t, size_t);
 
int main()
{
        tabulate(12, 24, 4);
        exit(0);
}
 
ullong_t product(size_t a, size_t b)
{
        ullong_t result = 1;
        while(a <= b)
                result *= a++;
                
        return result;
}
 
ldouble_t S(size_t n)
{
        if(!n)
        {
                fprintf(stderr, "n must be a positive non-zero number\n");
                exit(1);
        }
        size_t i = 1;
        ldouble_t sum = 0;
        while(i <= n)
        {
                sum += 1. / (ldouble_t) product(2 * i + 1, n + i);
                ++i;
        }
        
        return sum;
}
 
void tabulate(size_t a, size_t b, size_t step)
{
        for( ; a <= b; a += step)
                printf("S[%u] = %Lf\n", a, S(a));
}
nameless@nameless-desktop:~/foo$ make && ./foo
cc    -c -o main.o main.c
cc main.o -o foo
S[12] = 1.045777
S[16] = 1.033455
S[20] = 1.026374
S[24] = 1.021772
nameless@nameless-desktop:~/foo$
0
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
22.12.2010, 16:34  [ТС] #8
кстати,
Цитата Сообщение от Nameless One Посмотреть сообщение
значит, (n + i)! будет всегда делиться на (2i)! без остатка
а разве не наоборот должно быть (2i)!/(n+i)! ???
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:36 #9
Цитата Сообщение от dimaki Посмотреть сообщение
а разве не наоборот должно быть (2i)!/(n+i)! ???
А оно так и есть. То, что я написал:
значит, (n + i)! будет всегда делиться на (2i)! без остатка
используется только для того, чтобы можно было сократить дробь
0
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
22.12.2010, 16:40  [ТС] #10
сразу извиняюсь, если туплю, но по-моему (2i)!<(n+i)!
а значит S(n)<1, разве нет?
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:44 #11
По сути, исходная сумма:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i = 1}^{n} \frac{(2 \cdot i)!}{(n + i)!}
эквивалентна следующей:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{i = 1}^{n} \frac{1}{(2 \cdot i + 1) \cdot (2 \cdot i + 2) \cdot ... \cdot (n + i - 1) \cdot (n + i) }

Цитата Сообщение от dimaki Посмотреть сообщение
сразу извиняюсь, если туплю, но по-моему (2i)!<(n+i)!
(2i)! не меньше (n + i)!, а меньше либо равно.
А именно, когда i = n, (2i)!=(n+i)!

Таким образом, хотя бы одно слагаемое суммы равно единице, поэтому http://www.cyberforum.ru/cgi-bin/latex.cgi?(\forall n \geq 1) \, S(n) \geq 1
0
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
22.12.2010, 16:52  [ТС] #12
Цитата Сообщение от Nameless One Посмотреть сообщение
(2i)! не меньше (n + i)!, а меньше либо равно.
да, точно.
Но тогда при n=i=24, s(n)=1, так?
А у Вас S[24] = 1.021772.
ну, не понимаю я)
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
22.12.2010, 16:59 #13
Цитата Сообщение от dimaki Посмотреть сообщение
да, точно.
Но тогда при n=i=24, s(n)=1, так?
Нет:
http://www.cyberforum.ru/cgi-bin/latex.cgi?S(24) \, = \, \sum_{i = 1}^{24} \frac{(2 \cdot i)!}{(24 + i)!} \, = \frac{(2 \cdot 1)!}{(24 + 1)!} + \frac{(2 \cdot 2)!}{(24 + 2)!} + \frac{(2 \cdot 3)!}{(24 + 3)!} +... + \frac{(2 \cdot 23)!}{(24 + 23)!} + \frac{(2 \cdot 24)!}{(24 + 24)!},
где последнее слагаемое как раз-таки будет равно единице, следоваетельно, сумма будет больше единицы.

А вот S(1) = 1
0
dimaki
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17
22.12.2010, 17:04  [ТС] #14
каюсь
Совсем забыл, что мы ищем сумму
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
22.12.2010, 18:51 #15
вот на плюсах если интересно
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
#include <iostream>
#include <cmath>
#include <conio.h>
#include<iomanip>
 
double factorial (double numb);
 
using namespace std;
 
int main()
{
        int i;
        double z, k;
        long double S=0;
        
        for (i=12; i<=24; i+=4)
        {
                z=factorial (2*i);
                k=factorial (24+i);
                S+=(double)z/k;
                cout<<"\nS(n)= "<<setprecision(20)<<S<<" "; 
        }
        cout<<endl;
        getch();
        return 0;
}
double factorial (double numb)
{
        if (numb<=1)
                return 1;
        else
                return numb * factorial(numb-1);
}
1
22.12.2010, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2010, 18:51
Привет! Вот еще темы с ответами:

Факториалы. - PascalABC.NET
!- это факториал.

факториалы - QBasic
sh(x)= x+ (x^3/3!) + (x^5/5!) +(x^7/7!)+... +(X^(2n+1)/(2n+1)!)

Факториалы - QBasic
Скажите, можно ли решить эту задачу: 2/1!+3/2!+4/3!...+11/10! Другим методом, кроме как через подпрограмму-функцию. Например просто...

Факториалы !! - Pascal
Народ помогите мне записать факториалы а то не знаю как правильно y= cos x=1- x^3/2!+x^3/4!+x^6/6!+...; X^3-это х в степени не...


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

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

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