はじめに
この実験では、C プログラミング言語で二項確率を計算する方法を学びます。この実験では以下の手順がカバーされます。
- 二項確率の計算に必要な入力値、試行回数 (n)、成功確率 (p)、成功回数 (k) を読み取る。
- 二項確率の公式で使用される階乗と組み合わせ (n から k の組み合わせ) を計算する関数を実装する。
- 公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) を使用して二項確率を計算する。ここで、C(n,k) は組み合わせを表す。
- 計算された確率を出力する。
この実験の終わりまでに、C で二項確率を扱う方法をしっかりと理解し、これらの概念をさまざまな現実世界の問題に適用できるようになります。
n、p、k を読み取る
このステップでは、二項確率の計算に必要な入力値、n (試行回数)、p (成功確率)、k (成功回数) を読み取る方法を学びます。
まず、これらの入力値を読み取る C プログラムを作成しましょう。
#include <stdio.h>
int main() {
int n, k;
double p;
printf("Enter number of trials (n): ");
scanf("%d", &n);
printf("Enter probability of success (p): ");
scanf("%lf", &p);
printf("Enter number of successes (k): ");
scanf("%d", &k);
printf("Input values:\n");
printf("n = %d\n", n);
printf("p = %.2f\n", p);
printf("k = %d\n", k);
return 0;
}
このファイルを保存し、コンパイルしましょう。
nano ~/project/binomial_prob.c
gcc ~/project/binomial_prob.c -o ~/project/binomial_prob
プログラムを実行したときの出力例:
Enter number of trials (n): 10
Enter probability of success (p): 0.5
Enter number of successes (k): 6
Input values:
n = 10
p = 0.50
k = 6
このプログラムは以下のことを示しています。
- n、p、k の変数を宣言する
scanf()を使用して整数と浮動小数点数の入力を読み取る- 入力値を確認のために出力する
入力値は以下を表します。
- n: 独立した試行の総数
- p: 各試行における成功確率
- k: 確率を計算したい成功した試行の回数
P(X=k)=C(n,k)p^k(1-p)^(n-k) を計算する
このステップでは、前のプログラムを拡張して、公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) を使用して二項確率を計算します。
組み合わせと二項確率を計算する関数を追加します。
#include <stdio.h>
#include <math.h>
// Function to calculate factorial
unsigned long long factorial(int n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
// Function to calculate combinations (n choose k)
unsigned long long combinations(int n, int k) {
return factorial(n) / (factorial(k) * factorial(n - k));
}
// Function to calculate binomial probability
double binomial_probability(int n, int k, double p) {
unsigned long long combinations_value = combinations(n, k);
double probability = combinations_value *
pow(p, k) *
pow(1 - p, n - k);
return probability;
}
int main() {
int n, k;
double p;
printf("Enter number of trials (n): ");
scanf("%d", &n);
printf("Enter probability of success (p): ");
scanf("%lf", &p);
printf("Enter number of successes (k): ");
scanf("%d", &k);
double prob = binomial_probability(n, k, p);
printf("Binomial Probability P(X=%d) = %f\n", k, prob);
return 0;
}
プログラムをコンパイルして実行します。
gcc ~/project/binomial_prob.c -o ~/project/binomial_prob -lm
~/project/binomial_prob
出力例:
Enter number of trials (n): 10
Enter probability of success (p): 0.5
Enter number of successes (k): 6
Binomial Probability P(X=6) = 0.205078
二項確率計算の主要な要素:
factorial(): n! を計算するcombinations(): C(n,k) または n 個の中から k 個を選ぶ方法の数を計算するbinomial_probability(): 完全な公式を使用して P(X=k) を計算する- 累乗計算に math.h の
pow()関数を使用する
確率を出力する
このステップでは、二項確率のプログラムを拡張して、確率計算のより詳細で整形された出力を提供します。
前のプログラムを修正して、追加の確率表現を含めます。
#include <stdio.h>
#include <math.h>
// Previous functions (factorial, combinations, binomial_probability) remain the same
int main() {
int n, k;
double p;
printf("Enter number of trials (n): ");
scanf("%d", &n);
printf("Enter probability of success (p): ");
scanf("%lf", &p);
printf("Enter number of successes (k): ");
scanf("%d", &k);
double prob = binomial_probability(n, k, p);
// Detailed probability output
printf("\nProbability Calculation Results:\n");
printf("-----------------------------\n");
printf("Number of Trials (n): %d\n", n);
printf("Probability of Success (p): %.4f\n", p);
printf("Number of Successes (k): %d\n", k);
// Different probability representations
printf("\nProbability Representations:\n");
printf("Decimal: %f\n", prob);
printf("Percentage: %.2f%%\n", prob * 100);
printf("Fraction: 1 in %.0f\n", 1.0 / prob);
return 0;
}
プログラムをコンパイルして実行します。
gcc ~/project/binomial_prob.c -o ~/project/binomial_prob -lm
~/project/binomial_prob
出力例:
Enter number of trials (n): 10
Enter probability of success (p): 0.5
Enter number of successes (k): 6
Probability Calculation Results:
-----------------------------
Number of Trials (n): 10
Probability of Success (p): 0.5000
Number of Successes (k): 6
Probability Representations:
Decimal: 0.205078
Percentage: 20.51%
Fraction: 1 in 5
このステップでの主な改善点:
- 詳細な結果の整形を追加した
- 複数の確率表現を表示した
- 出力の読みやすさを向上させた
まとめ
この実験では、二項確率の計算に必要な入力値、試行回数 (n)、成功確率 (p)、成功回数 (k) を読み取る方法を学びました。また、階乗、組み合わせ、および二項確率の公式 P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k) を計算する関数を実装しました。これにより、各試行における成功確率が与えられた場合に、n 回の独立した試行の中で k 回成功する確率を計算することができます。
この実験でカバーされた主要な手順には、入力値の読み取り、公式を使用した二項確率の計算、および計算結果の確率の出力が含まれます。この知識は、統計学、意思決定、リスク分析など、二項確率が関連するさまざまな現実世界のシナリオに適用することができます。



