Алгоритм вычисления вероятности события - C (СИ)
Формулировка задачи:
Разработайте и представьте в виде кода программы на языке Си алгоритм вычисления вероятности события, используя классическое определение вероятности и формулы комбинаторики, на примере следующей задачи.
Инвестор формирует пакет из R акций. В его распоряжении имеются N акций нефтяной компании, M акций банков и K акций телекоммуникационной компании. Найти вероятность того, что инвестор сформировал пакет из n акций нефтяной компании, m акций банков и k акций телекоммуникационной компании.
Для решения задачи будем полагать, что событие A = {инвестор сформировал пакет из n акций нефтяной компании, m акций банков и k акций телекоммуникационной компании}. Тогда вероятность события A вычисляется по формуле:
P(A) = N(A) / N(•);
где N(A) – число исходов, благоприятствующих событию А, N(•) – общее число исходов. Для вычисления этих значений следует определить число сочетаний:
N(•)=CRN+M+K; N(A) = CnN * CmM * CkK.
где биномиальные коэффициенты CRN+M+K; CnN * CmM * CkK вычисляются по формуле:
Cab = a! / b! * (a-b)!.
Код программы должен содержать две пользовательские функции: binom() – для вычисления биномиальных коэффициентов ; factorial() – для вычисления факториалов, необходимых при определении числа сочетаний.
В общем понятно, что ничего не понятно. Я сделала вот такой код, который выдает 0,0000000...
помогите, пожалуйста, понять, где я ошибаюсь..
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int factorial(int x);
int binom(int x2, int x3, int x4);
int a, b, result, c = a-b;
int main()
{
printf (" Vvedite celoe a=");
scanf ("%d", &a);
printf (" Vvedite celoe b=");
scanf ("%d", &b);
result = binom (factorial(a), factorial(b), factorial(c));
printf (" Result = %f\n\n", binom);
system ("pause");
return 0;
}
int binom(int x2, int x3, int x4)
{
return (factorial(a) / (factorial(b) * factorial(c)) );
}
int factorial(int x)
{ int t;
if(x <=1)
t = 1;
else
t = x * factorial(x - 1);
return t;
}Решение задачи: «Алгоритм вычисления вероятности события»
textual
Листинг программы
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int factorial(int x);
int binom(int x2, int x3, int x4);
//int a, b, result, c = a-b; Старайтесь не объявлять глобальные переменные, тем более с=а-б, вы еще не ввели
//данные в а и б, а уже вычисляете с
int main()
{ int a, b, result, c; //Объявляем переменные в теле цикла
printf (" Vvedite celoe a=");
scanf ("%d", &a);
printf (" Vvedite celoe b=");
scanf ("%d", &b);
c = a - b; // Вычисляем с
result = binom (factorial(a), factorial(b), factorial(c));
// printf (" Result = %f\n\n", binom); Результат находится в переменой result, причем тут binom вообще не понятно
printf(" Result = %d\n\n", result); // Датовый тип int требует %d
system ("pause");
return 0;
}
int binom(int x2, int x3, int x4)
{
// return (factorial(a) / (factorial(b) * factorial(c)) ); а зачем вы передавали в функцию какие то данные если
//потом используете а, б ,с
return (factorial(x2) / (factorial(x3) * factorial(x4)));
}
int factorial(int x)
{ int t;
if(x <=1)
t = 1;
else
t = x * factorial(x - 1);
return t;
}