3

次の式の 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 の出力は空白で、choose() の出力は 000000000000000000000 です

どんな助けでも大歓迎です

4

3 に答える 3

0

より少ないボイラーコードを記述できるようにするテンプレートプログラミングを使用できます

#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

于 2014-05-03T20:53:28.810 に答える
0

あなたのプログラムから「選択」はメインから呼び出され、戻り値は与えられません.さらに、「k」は常にゼロに等しくなります.whileループから.最初にkがゼロに等しいかどうかをチェックし、1を返します.(通知戻り値を入れる変数がありません。)次に、二項分布から 'choose' を呼び出します。(k の値を変更していないことに注意してください。常に 0 になります!)。(プログラムで choose を 2 回呼び出したことに注意してください。 )

于 2014-04-02T21:22:27.560 に答える