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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.64
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
#1

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

22.09.2010, 18:15. Просмотров 3502. Ответов 36
Метки нет (Все метки)

Помогите написать программу:
Составить функцию, которая вычисляет сумму К слагаемых. В вызывающей функции main() организовать контроль ввода положительного целого K, большего 0. Через do... while или while или for
--------------
В знаменателе 2n-1, а что делать со степенью x и меняющимися знаками??
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2010, 18:15     Факториал
Посмотрите здесь:

факториал (2k+1)!с++ - C++
помогите пожалуйста посчитать факториал (2k+1)! и если возможно с построчными комментариями заранее спасибо!

факториал - C++
Я только начал изучать С++ и вот столкнулся с проблемой: дано положительное число A>=10.Найти такое число k, что (k-1)!<=A<=k! ...

Факториал с++ - C++
1. Ввести n элементов одномерного массива; 2. Вычислить указанное выражение; 3. Вывести на экран значение указанного выражения.

Факториал - C++
Задано целое положительное число n. Определить значение выражения: P=\frac{\sum_{i=0}^{n-1}i+1}{(2n)!} Вот код программы: ...

Факториал - C++
Пользователь вводит число и программа считает его факториал. Например 5! = 5*4*3*2*1 = 120. кто не помнит факториал считает так:...

С++ Факториал - C++
Надо написать программку на С++ которая вычисляет факториал числа n (факториал обозначается как n!). числа n в диапазоне от 1 до 12...

Факториал - C++
Как написать программу для вычисления n факториал

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.09.2010, 18:23     Факториал #2
А что с ней делать? вычислят! pow(x, n);
С меняющимися знаками так
pow(-1.0, i), где i начинается с 0 и каждую итерацию увеличивается.
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
22.09.2010, 18:44  [ТС]     Факториал #3
Да я понял, что вычислять, но там же не по порядку меняются степени. Как это организовать? pow(x,n) это и так понятно
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.09.2010, 18:47     Факториал #4
А вы приглядитесь.
0-я + 1-я
минус
4-я + 5-я
плюс
8-я + 9-я
минус
12-я + 13-я
....
Закономерность уловили?
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
22.09.2010, 21:20  [ТС]     Факториал #5
если честно, то нет, понял что на n+4 отличаются а как дальше не знаю ...
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.09.2010, 21:47     Факториал #6
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
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
int factorial(int);
double calculate(double, int);
 
int main()
{
    double K;
    double x;
    double result;
 
    do
    {
        printf("Input K: ");
        scanf("%lf", &K);
 
        if (K <= 0.0)
            printf("K must be greater than or equal to zero! Try...\n\n");
    }
    while (K <= 0.0);
 
    printf("Input x: ");
    scanf("%lf", &x);
 
    result = calculate(x, K);
 
    printf("Result of calculating: %lf", result);
 
    getch();
    return 0;
}
 
int factorial(int n)
{
    int i;
 
    for (i = n - 1; i > 1; i--)
        n *= i;
 
    return (n == 0) ? 1 : n;
}
 
double calculate(double x, int K)
{
    double sum = 0.0;
    int p, n;
    int i;
 
    for (i = -1, n = 0, p = 0; n < K; n++)
    {
        sum += pow(-1.0, p) * pow(x, ++i) / factorial(2 * n + 1);
 
        if (i % 2 != 0)
        {
            i += 2;
            p++;
        }
    }
 
    return sum;
}
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.09.2010, 23:08     Факториал #7
silent_1991, решение решением, но нехорошее, при n чуть больше десяти факториал начнет давать отрицательные значения
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.09.2010, 12:42     Факториал #8
Разумеется, целью не было написать продукт, который хоть сейчас можно продавать, а показать принцип, ведь я уверен, у ТСа ещё куча подобных заданий будет.

Добавлено через 5 минут
Можно так.

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
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double factorial(double);
double calculate(double, int);
 
int main()
{
    double K;
    double x;
    double result;
 
    do
    {
        printf("Input K: ");
        scanf("%lf", &K);
 
        if (K <= 0.0)
            printf("K must be greater than or equal to zero! Try...\n\n");
    }
    while (K <= 0.0);
 
    printf("Input x: ");
    scanf("%lf", &x);
 
    result = calculate(x, (double)K);
 
    printf("Result of calculating: %lf", result);
 
    getch();
    return 0;
}
 
double factorial(double n)
{
    double i;
 
    for (i = n - 1.0; i > 1.0; i -= 1.0)
        n *= i;
 
    return (n == 0.0) ? 1.0 : n;
}
 
double calculate(double x, int K)
{
    double sum = 0.0;
    int p;
    double n;
    int i;
 
    for (i = -1, n = 0.0, p = 0; n < K; n += 1.0)
    {
        sum += pow(-1.0, p) * pow(x, ++i) / factorial(2.0 * n + 1.0);
 
        if (i % 2 != 0)
        {
            i += 2;
            p++;
        }
    }
 
    return sum;
}
Добавлено через 1 минуту
Только K всё же надо было оставить int...
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
29.09.2010, 16:39  [ТС]     Факториал #9
На днях защищал лабу, и препод по этой проге сказал, что надо было её написать при помощи какой-то рекурсии. Говорит что с ней легче решить и не надо две функции писать поэтому...
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.09.2010, 16:42     Факториал #10
Ну и зря он так сказал... Факториал лучше писать циклом, а не рекурсией.
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
29.09.2010, 16:47     Факториал #11
Рекурсивно

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
 
int FactorialFunc(int n)
{
    if(n==1)
        return 1;
    else
        return n*FactorialFunc(n-1);
}
 
void main()
{
    int n;
    int result;
    printf("Enter your n: \n");
    scanf("%d", &n);
    result=FactorialFunc(n);
    printf("Factorial of %d is %d\n", n, result);
    getch();
}
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
29.09.2010, 16:48  [ТС]     Факториал #12
Не могли бы объяснить как при помощи рекуррентности сделать. Функция main одна для всех этих программ
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
double factorial(double);
double calculate(double, int);
 
int main()
{
    double K;
    double x;
    double result;
 
    do
    {
        cout << "Input K: ";
        cin >> K;
 
        if (K <= 0.0)
            cout << "K must be greater than or equal to zero! Try...\n\n";
    }
    while (K <= 0.0);
 
    cout << "Input x: ";
    cin >> x;
 
    result = calculate(x, (double)K);
 
    cout << "Result: " << result;
 
 
    getch();
    return 0;
}
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
#include <math.h>
double factorial(double);
double calculate(double, int);
 
double factorial(double n)
{
    double i;
    
 
    for (i = n - 1.0; i > 1.0; i -= 1.0)
        n *= i;
 
    return (n == 0.0) ? 1.0 : n;
}
 
double calculate(double x, int K)
{
    double sum = 0.0;
    int p;
    double n;
    int i;
 
    for (i = -1, n = 0.0, p = 0; n < K; n += 1.0)
    {
        sum += pow(-1.0, p) * pow(x, ++i) / factorial(2.0 * n + 1.0);
 
        if (i % 2 != 0)
        {
            i += 2;
            p++;
        }
    }
 
    return sum;
}
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
#include <math.h>
double factorial(double);
double calculate(double, int);
 
double factorial(double n)
{
double i;
 
i = n - 1.0;
 
while (i > 1.0)
{
n *= i;
i -= 1.0;
}
 
return (n == 0.0) ? 1.0 : n;
}
 
double calculate(double x, int K)
{
    double sum = 0.0;
    int p = 0;
    double n = 0.0;
    int i = -1;
 
    while (n < K)
    {
sum += pow(-1.0, p) * pow(x, ++i) / factorial(2.0 * n + 1.0);
 
        if (i % 2 != 0)
        {
            i += 2;
            p++;
        }
 
n += 1.0;
    }
 
    return sum;
}
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 <math.h>
double factorial(double);
double calculate(double, int);
 
double factorial(double n)
{
double i;
 
i = n - 1.0;
 
do
{
n *= i;
i -= 1.0;
}
while (i > 1.0);
 
return (n == 0.0) ? 1.0 : n;
}
 
double calculate(double x, int K)
{
    double sum = 0.0;
    int p = 0;
    double n = 0.0;
    int i = -1;
 
    do
    {
sum += pow(-1.0, p) * pow(x, ++i) / factorial(2.0 * n + 1.0);
 
        if (i % 2 != 0)
        {
            i += 2;
            p++;
        }
 
n += 1.0;
    }
    while (n < K);
 
    return sum;
}
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
29.09.2010, 16:50     Факториал #13
Что-то я совсем плохой стал... совсем задание не читаю
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
29.09.2010, 17:12  [ТС]     Факториал #14
Рекурсией решается только факториал или вся программа?
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
29.09.2010, 17:14     Факториал #15
Только нахождение факториала, я ж грю - условие как-то нехорошо прочитал
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
29.09.2010, 17:25  [ТС]     Факториал #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
#include <math.h>
double factorial(double);
double calculate(double, int);
 
double factorial(double n)
{
    if(n==1)
                return 1;
        else
                return n*factorial(n-1);
 
}
 
double calculate(double x, int K)
{
    double sum = 0.0;
    int p;
    double n;
    int i;
 
    for (i = -1, n = 0.0, p = 0; n < K; n += 1.0)
    {
        sum += pow(-1.0, p) * pow(x, ++i) / factorial(2.0 * n + 1.0);
 
        if (i % 2 != 0)
        {
            i += 2;
            p++;
        }
    }
 
    return sum;
}
В моём случает так?
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
29.09.2010, 17:27     Факториал #17
В функцию calculate не вникал, но похоже на то
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
30.09.2010, 21:23  [ТС]     Факториал #18
Спасибо всем!

Добавлено через 19 часов 46 минут
а саму функцию calculate через рекуррентность никак нельзя?

Добавлено через 8 часов 8 минут
Пожалуйста помогите с рекуррентностью, мне нужно избавиться от факториала
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.09.2010, 22:12     Факториал #19
MarchZM,
Вообще-то честно говоря не могу сообразить, какая тут будет рекурсивная функция...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2010, 22:38     Факториал
Еще ссылки по теме:

Факториал в С - C++
Помогите пожалуйста написать программку. Надо,чтобы считала: (1+ 1/1*1)*(1+1/2*2)*....*(1+1/n*n)=? Немогу сообразить( Спасибо.

Факториал - C++
Мой друг дал мне код вычисление факториала на языке СИ++: Он следующий: #include &lt;fstream&gt; #include &lt;cstdio&gt; #include&lt;iostream&gt; ...

Факториал - C++
Даны натуральные числа N и M. Вычислить (M!+N!)/(M+N)! нужное преобразовать формулу, чтобы не было переполнения.

факториал в с++ - C++
Дано целое число N (&gt;0). Вывести сумму 2 + 1/(2!) +1/(3!)+ ... + 1/(N!) Полученное число является приближеным значением константы...

Факториал - C++
помогите написать прогу факториала в С++ с помощью циклов. Мне нужна простая прога а не на пол экрана. облазил весь инет, нигде нет...


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

Или воспользуйтесь поиском по форуму:
KuKu
1556 / 1034 / 76
Регистрация: 17.04.2009
Сообщений: 2,974
30.09.2010, 22:38     Факториал #20
MarchZM, ваш преподавателю наверное не понравилось что факториал и возведение в степень считаются каждый раз заново для каждого члена. А по-хорошему надо бы новый член считать из предыдущего, не делая повторных вычислений.
a[0]=1
a[1]=x

b[0]=1;

a[i]=-a[i-2]*x^4;
b[i]=b[i-1]*(2*i-1)*(2*i-2)

S=a[i]/b[i]

вродь формулы такие, хотя могу ошибаться.

Не по теме:

silent_1991, извиняюся за упорство, насчет ряда Тейлора я был не прав.

Yandex
Объявления
30.09.2010, 22:38     Факториал
Ответ Создать тему
Опции темы

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