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

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

Войти
Регистрация
Восстановить пароль
 
MicroSB
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 8
#1

Составить функцию нахождения факториала - C++

13.09.2013, 18:33. Просмотров 943. Ответов 12
Метки нет (Все метки)

Составить функцию нахождения факториала и вычислить значение выражения: (k-m)! *n!/(n+k)!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 18:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Составить функцию нахождения факториала (C++):

Составить функцию нахождения - C++
Добрый день уважаемые форумчане!!! Недавно начали "изучать" в университете с++, и сразу возникли проблемы с преподавателем(ничего не...

Составить функцию нахождения максимального элемента - C++
Составить функцию нахождения максимального элемента в диагонали матрицы, параллельной главной диагонали. Используя эту функцию в матрице...

Составить функцию нахождения площади равностороннего треугольника - C++
помогите,пожалуйста! есть вот такие задания...ОЧЕНЬ надо на завтра... \Вопрос 3. Составить функцию, которая получает как аргумент...

Составить функцию нахождения площади круга по длине окружности - C++
1. Цель задания. 1. 1. Изучить синтаксис функций. 1. 2. Научиться применять функции при решении задач. Составить функцию...

Составить функцию нахождения объема куба по его диагонали - C++
Составить функцию нахождения объема куба по его диагонали. С помощью данной функции вычислить объемы для N кубов.

Составить нерекурсивную функцию нахождения НОД двух чисел - C++
Объясните пожалуйста код! Задача: Составить нерекурсивную функцию нахождения НОД двух чисел. Взял код с инета, а понять не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
jurok_85
241 / 224 / 77
Регистрация: 21.02.2013
Сообщений: 519
Завершенные тесты: 1
13.09.2013, 18:59 #2
функция факториала:
C++
1
2
3
4
5
6
7
8
9
int factorial(int f)
{
   if (f == 0 && f == 1)
      return 1;
   if (f > 1)
      return factorial(f - 1) * f;
   else
      return f;
}
а вот вычислить выражение не понял
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
13.09.2013, 22:09 #3
Цитата Сообщение от MicroSB Посмотреть сообщение
(k-m)! *n!/(n+k)!
Такую штуку лучше не вычислять через ф-цию.
1
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
13.09.2013, 22:57 #4
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<cstring>
 
using namespace std;
 
int factorial( int n ) {
    if ( n < 0 ) // если пользователь ввел отрицательное число
        return 0; // возвращаем ноль
    // если n > 0 рекурсивно вызываем функцию и уменьшаем аргумент на 1
    return !n ? 1 : n * factorial( n - 1 );
}
 
int main() {
 
    int k, m, n;
    // просим пользователя ввести данные
    cout << "Введите целочисленные значения k, m, n через пробел ";
    cin >> k >> m >> n;
 
    // вычисляем результат
    double result = static_cast < double >( factorial( k - m ) ) * factorial( n ) / factorial( n + k );
 
    // проверяем результат
    if ( !result ) { // если результат равен 0
 
        // выдаем сообщение о неверных введенных данных
        cout << "Рассчет с введенными значениями невозможен!" << endl;
        return -1; // выходим из программы
    }
 
    // а если результат не 0, то выводим его на экран
    cout << "Результат равен " << result << endl;
 
    return 0;
}
0
Georgg
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 37
05.08.2014, 03:16 #5
а для чего здесь нужно приведение типа static_cast < double > ?
0
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
05.08.2014, 04:24 #6
Georgg, наверное, чтобы считалось правильно, а то значения теряться будут (округляться до int)
1
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
05.08.2014, 10:32 #7
как вариант...
C++
1
2
3
4
unsigned long factorial(int x)
{
    return (x > 0) ? x * factorial(x - 1) : 1;
}
1
Andrej
И целого heap'а мало
94 / 55 / 9
Регистрация: 31.07.2014
Сообщений: 291
06.08.2014, 14:15 #8
Если скучно, то можно убиться об метапограмированние =)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
template <int N>
struct Factorial {
        const static long value = N * Factorial<N - 1>::value;
};
 
template <>
struct Factorial<0> {
        const static long value = 1;
};
 
int
main(int argc, char** argv)
{
        long factorial = Factorial<6>::value;
        std::cout << factorial << std::endl;
};
или об лямбды:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int
main(int argc, char** argv)
{
        auto factorial = [] (int N) -> long
            {
                    long result = 1;
                    do
                    {
                            result *= N;
                    }
                    while (--N);
 
                    return result;
            };
        std::cout << factorial(7) << std::endl;
};
делать было до того аж нечего
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
06.08.2014, 14:33 #9
Цитата Сообщение от Avazart Посмотреть сообщение
Такую штуку лучше не вычислять через ф-цию.
Ну вы бы хоть объясняли почему, с чем связано. В трех словах.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
06.08.2014, 14:35 #10
рекурсия, переполнение, Рекуррентные выражение
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
06.08.2014, 14:40 #11
Avazart, я вообще так, на будущее.

И все равно кстати непонятно из той ссылки почему.
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,666
Записей в блоге: 17
06.08.2014, 14:59 #12
Что не понятно, для начала нужно попробовать упростить выражение если это возможно.
Если нет то вероятно стоило бы отходить от рекурсии, ну или хотя бы свести локальные переменные (то что в стеке)
к минимуму.
1
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
06.08.2014, 15:06 #13
Avazart, вот так бы сразу.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2014, 15:06
Привет! Вот еще темы с ответами:

Составить функцию для нахождения наименьшего нечетного натурального делителя - C++
6.1.2. Помогите, пожалуйста решить задачу в С++, с помощью функций. Составить функцию для нахождения наименьшего нечетного...

Функция нахождения факториала - C++
Кто может исправить ошибки? голова уже вообще не работает #include &lt;iostream&gt; using namespace std; int factorial (int n) { ...

Составить функцию нахождения минимального элемента среди положительных элементов в столбце матрицы и его индек - C++
вот условие: Составить функцию нахождения минимального элемента среди положительных элементов в столбце матрицы и его индексов (сам не...

Что не так в программе для нахождения факториала? - C++
Вроде бы всё так, но учитель говорит переделать... #include &lt;iostream&gt; using namespace std; int main() { int n, res=1; ...


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

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

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