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

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

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

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

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

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

Описать рекурсивные функции вещественного типа, вычисляющие факториал и двойной факториал заданного числа - C++
Описать рекурсивные функции Fact(N) и Fact2(N) вещественного типа, вычисляющие значения факториала N! и двойного факториала N!!...

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

Факториал - C++
Здравствуйте Всем!!! Меня зовут Наталья. Помогите решить задание на С++: Дано натуральное число n; найти n!. Использовать программу,...

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

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

факториал - C++
найти число нулей в конце факториала числа N по основанию каждого множителя K (1<=N<=1000000000, 2<=K<=1000) #include <iostream> ...

36
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.09.2010, 18:23 #2
А что с ней делать? вычислят! pow(x, n);
С меняющимися знаками так
pow(-1.0, i), где i начинается с 0 и каждую итерацию увеличивается.
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
22.09.2010, 18:44  [ТС] #3
Да я понял, что вычислять, но там же не по порядку меняются степени. Как это организовать? pow(x,n) это и так понятно
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.09.2010, 18:47 #4
А вы приглядитесь.
0-я + 1-я
минус
4-я + 5-я
плюс
8-я + 9-я
минус
12-я + 13-я
....
Закономерность уловили?
1
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
22.09.2010, 21:20  [ТС] #5
если честно, то нет, понял что на n+4 отличаются а как дальше не знаю ...
0
silent_1991
Эксперт С++
4984 / 3041 / 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;
}
1
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
22.09.2010, 23:08 #7
silent_1991, решение решением, но нехорошее, при n чуть больше десяти факториал начнет давать отрицательные значения
0
silent_1991
Эксперт С++
4984 / 3041 / 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...
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
29.09.2010, 16:39  [ТС] #9
На днях защищал лабу, и препод по этой проге сказал, что надо было её написать при помощи какой-то рекурсии. Говорит что с ней легче решить и не надо две функции писать поэтому...
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.09.2010, 16:42 #10
Ну и зря он так сказал... Факториал лучше писать циклом, а не рекурсией.
1
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();
}
0
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;
}
0
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
29.09.2010, 16:50 #13
Что-то я совсем плохой стал... совсем задание не читаю
0
MarchZM
0 / 0 / 0
Регистрация: 18.09.2010
Сообщений: 52
29.09.2010, 17:12  [ТС] #14
Рекурсией решается только факториал или вся программа?
0
Syndarin
13 / 13 / 1
Регистрация: 15.09.2009
Сообщений: 57
29.09.2010, 17:14 #15
Только нахождение факториала, я ж грю - условие как-то нехорошо прочитал
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2010, 17:14
Привет! Вот еще темы с ответами:

Факториал - C++
Пожалуйсто, помогите написать прогу на Си, которая вичисляла бы 100! (факториал) выводя всё на экран!

Факториал (n-1)! - C++
Помогите, пожалуйста, написать факториал (n-1)! очень надо

Факториал - C++
Дано натуральное число n; найти n!. Использовать программу, включающую рекурсивную процедуру вычисления n!

факториал - C++
#include &lt;iostream&gt; using namespace std; size_t fact(size_t n) { if(n==0) return 1; return n*fact(n-1); } int...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
29.09.2010, 17:14
Ответ Создать тему
Опции темы

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