Вычисление сочетаний (nCr) на C

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

Введение

В этом лабораторном практикуме вы научитесь вычислять сочетания (nCr) с помощью программы на языке C. Практикум охватывает два основных этапа: ввод значений n и r, а затем реализацию формулы для вычисления сочетания nCr = n! / (r! * (n-r)!). По завершении этого практикума у вас будет рабочая программа на C, которая может вычислять сочетания для любых заданных значений n и r.

Практикум начинается с демонстрации того, как вводить значения n и r с помощью функции scanf(). Затем он представляет реализацию функций вычисления факториала и сочетаний, которые используются для вычисления конечного результата. Практикум предоставляет полный код и пошаговые инструкции, что делает его легким для понимания и применения этих концепций в ваших собственных проектах.

Чтение значений n и r

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

Сначала создайте новый файл C для вашей программы вычисления сочетаний:

cd ~/project
nano combinations.c

Теперь добавьте следующий код для чтения входных значений:

#include <stdio.h>

int main() {
    int n, r;

    // Запросить у пользователя ввод значений n и r
    printf("Введите значение n: ");
    scanf("%d", &n);

    printf("Введите значение r: ");
    scanf("%d", &r);

    // Вывести введенные значения для проверки ввода
    printf("Вы ввели n = %d и r = %d\n", n, r);

    return 0;
}

Компилируйте и запустите программу для проверки ввода:

gcc combinations.c -o combinations
./combinations

Пример вывода:

Введите значение n: 5
Введите значение r: 3
Вы ввели n = 5 и r = 3

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

  • Использовать scanf() для чтения целых чисел от пользователя
  • Запрашивать у пользователя ввод значений n и r
  • Выводить введенные значения для подтверждения правильности ввода

Код создает основу для вычисления сочетаний, сначала захватив необходимые входные значения n и r.

Вычисление nCr = n!/(r!(n-r)!)

В этом шаге вы реализуете функцию для вычисления факториала и сочетаний по формуле nCr = n! / (r! * (n-r)!).

Откройте предыдущий файл combinations.c и обновите его функциями вычисления факториала и сочетаний:

cd ~/project
nano combinations.c

Добавьте следующий код для реализации вычислений факториала и сочетаний:

#include <stdio.h>

// Функция для вычисления факториала
unsigned long long factorial(int num) {
    if (num == 0 || num == 1) {
        return 1;
    }

    unsigned long long result = 1;
    for (int i = 2; i <= num; i++) {
        result *= i;
    }

    return result;
}

// Функция для вычисления сочетаний (nCr)
unsigned long long combinations(int n, int r) {
    // Проверка входных данных
    if (r > n) {
        return 0;
    }

    // Используйте формулу сочетаний: nCr = n! / (r! * (n-r)!)
    unsigned long long числитель = factorial(n);
    unsigned long long знаменатель = factorial(r) * factorial(n - r);

    return числитель / знаменатель;
}

int main() {
    int n, r;

    // Запросить у пользователя ввод значений n и r
    printf("Введите значение n: ");
    scanf("%d", &n);

    printf("Введите значение r: ");
    scanf("%d", &r);

    // Вычислить и вывести сочетание
    unsigned long long результат = combinations(n, r);

    printf("Сочетание C(%d, %d) = %llu\n", n, r, результат);

    return 0;
}

Компилируйте и запустите программу:

gcc combinations.c -o combinations
./combinations

Пример вывода:

Введите значение n: 5
Введите значение r: 3
Сочетание C(5, 3) = 10

Ключевые моменты этой реализации:

  • Функция factorial() вычисляет факториал заданного числа
  • Функция combinations() реализует формулу сочетаний
  • Использует unsigned long long для обработки больших вычислений факториалов
  • Проверяет входные данные, чтобы предотвратить некорректные сочетания

Вывод Результата

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

Откройте файл combinations.c и измените код:

cd ~/project
nano combinations.c

Обновите код с улучшенным выводом результата и проверкой входных данных:

#include <stdio.h>

// Предыдущие функции факториала и сочетаний остаются без изменений

int main() {
    int n, r;

    // Запрос ввода значений n и r
    printf("Калькулятор сочетаний (nCr)\n");
    printf("----------------------------\n");

    // Проверка входных данных
    do {
        printf("Введите общее количество элементов (n): ");
        scanf("%d", &n);

        if (n < 0) {
            printf("Ошибка: n должно быть неотрицательным целым числом.\n");
        }
    } while (n < 0);

    do {
        printf("Введите количество элементов для выбора (r): ");
        scanf("%d", &r);

        if (r < 0 || r > n) {
            printf("Ошибка: r должно быть в диапазоне от 0 до n.\n");
        }
    } while (r < 0 || r > n);

    // Вычисление сочетания
    unsigned long long результат = combinations(n, r);

    // Подробный вывод результата
    printf("\nПодробный результат:\n");
    printf("----------------\n");
    printf("Общее количество элементов (n): %d\n", n);
    printf("Элементы для выбора (r): %d\n", r);
    printf("Возможные сочетания (nCr): %llu\n", результат);

    // Интерпретация результата
    printf("\nИнтерпретация:\n");
    printf("---------------\n");
    printf("Существует %llu способов выбрать %d элементов из набора из %d элементов.\n",
           результат, r, n);

    return 0;
}

Компилируйте и запустите программу:

gcc combinations.c -o combinations
./combinations

Пример вывода:

Калькулятор сочетаний (nCr)
----------------------------
Введите общее количество элементов (n): 5
Введите количество элементов для выбора (r): 3

Подробный результат:
----------------
Общее количество элементов (n): 5
Элементы для выбора (r): 3
Возможные сочетания (nCr): 10

Интерпретация:
---------------
Существует 10 способов выбрать 3 элемента из набора из 5 элементов.

Основные улучшения:

  • Добавлена проверка входных данных для предотвращения некорректных значений.
  • Улучшен вывод с подробным разбором результата.
  • Предоставлена интерпретация результата сочетания.

Резюме

В этом лабораторном практикуме вы изучили, как считывать значения n и r, а затем вычислять сочетания (nCr) по формуле nCr = n! / (r! * (n-r)!). Вы реализовали функции для вычисления факториала и сочетаний, а затем использовали эти функции для вычисления конечного результата. Ключевыми этапами были: 1) считывание входных значений n и r и 2) вычисление сочетаний по формуле и функции факториала.