Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 21:41   #1
Proger16
Пользователь
 
Аватар для Proger16
 
Регистрация: 15.02.2013
Сообщений: 38
Вопрос Факториалы

Здравствуйте, может ли кто-нибудь объяснить по факториалам?
Что означает n!/j!. Объясните пожалуйста
Proger16 вне форума Ответить с цитированием
Старый 13.05.2013, 21:48   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

факториал числа n поделить на факториал числа j
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.05.2013, 21:49   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Факториал
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.05.2013, 21:50   #4
Proger16
Пользователь
 
Аватар для Proger16
 
Регистрация: 15.02.2013
Сообщений: 38
По умолчанию

В С++ это будет выглядеть так:
.............
Код:
int factorial(int x)
{
	int z;
	z = 1;
	for (int i = 1; i <= x; i++)
	{
		z *= i;
	}
	return z;
}
int k2(int n, int j, int i)
{
	int z;
	i = 0;
	z = factorial(n)/factorial(j);
}
Правильно?

Последний раз редактировалось Stilet; 13.05.2013 в 21:53.
Proger16 вне форума Ответить с цитированием
Старый 13.05.2013, 22:01   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Правильно, но лучше написать оптимальнее:
Когда возможен случай n < j:
Код:
#include <algorithm>
#include <exception>

double
k2(int n, int j, int i)
{
    if (n < 0 || j < 0)
        throw std::exception("n or j negative");
    double z = 1;
    for (int k = std::min(j + 1, n + 1); k <= std::max(j, n); ++k)
        z *= k;
    if (n >= j)
        return z;
    else
        return 1 / z;
}
Только для n >= j:
Код:
#include <exception>

int
k2(int n, int j, int i)
{
    if (n < 0 || j < 0)
        throw std::exception("n or j negative");
    int z = 1;
    for (int k = j + 1; k <= n; ++k)
        z *= k;
    return z;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 13.05.2013, 22:02   #6
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Лучше уж как-нибудь так
Код:
double fact (double n)
{
	return (n > 1) ? n * fact (n - 1) : 1;
}
А вообще, конкретно в этом случае можно вообще не вычислять непосредственно факториал каждого числа... Например, если j == n, то это очевидно 1.. если j < n, то там что-то типа (j + 1) * ... * n, и т. д.

Upd.
Снова я опоздал, кажется...

Upd.2
В смысле, там
Код:
double fact (int n)
Μολὼν λαβέ

Последний раз редактировалось alexander13; 13.05.2013 в 22:06.
alexander13 вне форума Ответить с цитированием
Старый 13.05.2013, 22:15   #7
Proger16
Пользователь
 
Аватар для Proger16
 
Регистрация: 15.02.2013
Сообщений: 38
По умолчанию

Спасибо конечно, но дело в том что мне 15 лет и я совсем недавно начал изучать С++.)))))
Proger16 вне форума Ответить с цитированием
Старый 13.05.2013, 22:17   #8
Proger16
Пользователь
 
Аватар для Proger16
 
Регистрация: 15.02.2013
Сообщений: 38
По умолчанию

Теперь всё хорошо, но одна ошибка:
код:
Код:
#include <iostream>
using namespace std;

int factorial(int x)
{
	int z;
	z = 1;
	for (int i = 1; i <= x; i++)
	{
		z *= i;
	}
	return z;
}

int main()
{
	int a = 4;
	cout<<factorial(a);
	cin.get();
	cin.get();
	return 0;
}

int k1(int x, int y, int j, int i)
{
	int z;
	j = 0;
	int result = 0;
	z = power(x, j) - power(y, i-j);
	cout<<"Vvedite x, x=";
	cin>>x;
	cout<<"Vvedite y, y=";
	cin>>y;
	cout<<"Vvedite i, i=";
	cin>>i;
	for (int j = 0; j<=i; j++)
	{
		result += power(x, j) - power(y, i-j);
		return result;
	}
}
double power(double x, int p)
{
	double result = 1;
	for (int i = 0; i < p; i++)
		result *= x;
	return result;
}

int k2(int n, int j, int i)
{
	int z;
	int result;
	i = 0;
	z = factorial(n)/factorial(j);
	for (int j = i; j <= n; j++)
	{
	result += factorial(n) / factorial(j);
	return result;
}

}
double k3(double z)
{
	z = k1 - k2;  //ошибка здесь
}

Последний раз редактировалось ACE Valery; 14.05.2013 в 01:06.
Proger16 вне форума Ответить с цитированием
Старый 13.05.2013, 22:40   #9
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

k1 и k2 - функции... т.е z = k1(arg1) - k2(arg2), где arg1 и arg2 - аргументы
+ смысл использовать передачу по значению в функцию k3()?

Последний раз редактировалось Igor95; 13.05.2013 в 22:42.
Igor95 вне форума Ответить с цитированием
Старый 13.05.2013, 22:42   #10
Proger16
Пользователь
 
Аватар для Proger16
 
Регистрация: 15.02.2013
Сообщений: 38
По умолчанию

Почему подсвечивает минус?
Proger16 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Факториалы в С++ Александр Жуков Помощь студентам 2 19.09.2012 23:37
Факториалы UmkO C# (си шарп) 2 03.04.2012 23:08
Факториалы kop Общие вопросы C/C++ 2 15.05.2011 13:20
паскаль и факториалы A.S.W Помощь студентам 2 07.01.2010 20:17