Я пытаюсь сделать программу на C ++ по следующей формуле:
Я сделал выбор части функции:
#include <iostream>
#include <fstream>
using namespace std;int choose();
void binomialdistribution();
int main(){
choose();
binomialdistribution();
}
int choose() {
double n = 3;
double k = 0;
double i;
double b;
double value;
while (k <= n){
if (0 == k || n == k) {
return 1;
}
if (k > n) {
return 0;
}
if (k > (n - k)) {
k = n - k;
}
if (1 == k) {
return n;
}
b = 1;
for (i = 1; i <= k; ++i) {
b *= (n - (k - i));
if (b < 0){
return -1;
}
b /= i;
}
return b;
cout << k;
k++;
binomialdistribution();
}
}
void binomialdistribution(){
cout << choose();
}
Мой вывод для k пуст, а мой выбор () — 0000000000000000000000
Любая помощь будет оценена
Из вашей программы «выбор» вызывается из main, а возвращаемое значение не дается. Плюс, ваш «k» всегда будет равен нулю, потому что из цикла while. Сначала он проверяет, равен ли k нулю, и возвращает 1. (Обратите внимание переменная для ввода возвращаемого значения отсутствует.) Затем вызывается метод «выбрать» из биномиального распределения. (Обратите внимание, что вы не изменили значение k.Это всегда будет НОЛЬ!). (Обратите внимание, что в программе вы вызывали команду «Выбрать дважды»). )
Попробуй это
#include <cmath>
#include <stdio.h>
int main(){
double p;
int k;
int n;
scanf("%d%d", &n, &k);
scanf("%lf", &p);
if (k > n) return 1;
if (p > 1 || p < 0) return 1;
double w = 1; //neutral element of multiplication
// n choose k part
for (int i = n - k + 1; i <= n; ++i) w = w * i;
for (int i = 1; i <= k; ++i) w = w / i;
// p^k * (1-p)^(n-k) part
w = w * pow(p, k) * pow(1.0 - p, n - k);
printf("%lf\n", w);
return 0;
}
спросите, если что-то не понятно.
Также не забудьте собрать с -lm
флаг
Вы можете использовать программирование темпаля, которое позволит вам писать меньше кода котла.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm> // std::sort
using namespace std;template <unsigned int N, unsigned int K>
struct Binomial
{
enum
{
value=Binomial<N-1,K-1>::value + Binomial<N-1,K>::value
};
};
template <unsigned int N>
struct Binomial<N,0>
{
enum
{
value=1
};
};
template <unsigned int N>
struct Binomial<N,N>
{
enum
{
value=1
};
};int main(void)
{
std::cout<<" Binomial<10,1> = ";
std::cout<< Binomial<10,1>::value;
std::cout<< std::endl;
std::cout<<" Binomial<8,3> = ";
std::cout<< Binomial<8,3>::value;
std::cout<< std::endl;
}
Выход:
бином<10,1> = 10
бином<8,3> = 56