Вычисление биномиальных вероятностей на языке C

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном занятии мы научимся вычислять биномиальные вероятности на языке программирования C. В рамках лабораторной работы будут рассмотрены следующие шаги:

  1. Чтение входных значений для вычисления биномиальной вероятности, включая количество испытаний (n), вероятность успеха (p) и количество успехов (k).
  2. Реализация функций для вычисления факториала и сочетаний (n по k), которые используются в формуле биномиальной вероятности.
  3. Вычисление биномиальной вероятности по формуле P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k), где C(n,k) представляет сочетания.
  4. Вывод вычисленной вероятности.

По окончании этого лабораторного занятия вы будете хорошо понимать, как работать с биномиальными вероятностями на языке 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

Эта программа демонстрирует, как:

  1. Объявить переменные для n, p и k
  2. Использовать функцию scanf() для считывания целочисленных и вещественных входных значений
  3. Вывести входные значения для проверки

Входные значения представляют:

  • 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

Основные компоненты вычисления биномиальной вероятности:

  1. factorial(): Вычисляет n!
  2. combinations(): Вычисляет C(n,k) или количество способов выбрать k элементов из n
  3. binomial_probability(): Вычисляет P(X=k) по полной формуле
  4. Функция pow() из библиотеки math.h, используемая для возведения в степень

Вывод вероятности

На этом шаге мы улучшим нашу программу для вычисления биномиальной вероятности, чтобы получить более детальный и отформатированный вывод результатов вычисления вероятности.

Мы модифицируем предыдущую программу, чтобы включить дополнительные представления вероятности:

#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

Основные улучшения на этом шаге:

  1. Добавлено детальное форматирование результатов
  2. Отображены несколько представлений вероятности
  3. Улучшена читаемость вывода

Резюме

В этом лабораторном занятии мы научились считывать входные значения для вычисления биномиальной вероятности, включая количество испытаний (n), вероятность успеха (p) и количество успехов (k). Мы также реализовали функции для вычисления факториала, сочетаний и формулы биномиальной вероятности P(X=k) = C(n,k) _ p^k _ (1-p)^(n-k). Это позволяет нам вычислять вероятность того, что в n независимых испытаниях будет k успехов, учитывая вероятность успеха в каждом испытании.

Основные шаги, рассмотренные в этом лабораторном занятии, включают считывание входных значений, вычисление биномиальной вероятности по формуле и вывод полученной вероятности. Эти знания можно применить в различных реальных сценариях, где актуальна биномиальная вероятность, например, в статистике, принятии решений и анализе рисков.