Введение
Перестановка и комбинация - это два разных математических понятия. Перестановка - это упорядоченное расположение объектов. Комбинация - это выбор объектов из множества без учета порядка выбранных объектов. В этом лабораторном задании мы научимся вычислять перестановки и комбинации с использованием языка C.
Напишите главную функцию
Сначала создайте новый файл с именем main.c в каталоге ~/project/ и напишите начальный код для включения заголовочных файлов и главной функции.
#include <stdio.h>
int main() {
printf("Перестановки и комбинации на языке C\n\n");
// Здесь будет добавлен код для вычисления перестановок и комбинаций
return 0;
}
Напишите функцию для вычисления факториала
Для вычисления перестановок и комбинаций нам нужно вычислить факториал числа. Факториалы можно вычислять рекурсивно. Добавьте следующий код вне главной функции.
long factorial(int num) {
if (num == 0) {
return 1;
}
else {
return num * factorial(num - 1);
}
}
Эта функция принимает целое число в качестве аргумента и возвращает его факториал.
Напишите функцию для вычисления сочетаний из n по r
Добавьте следующую функцию вне главной функции для вычисления сочетаний из n по r.
long nCr(int n, int r) {
if (n < r) {
return -1;
}
else {
return factorial(n) / (factorial(r) * factorial(n - r));
}
}
Эта функция принимает два целых числа, n и r, в качестве аргументов и возвращает значение сочетаний из n по r. Значение сочетаний из n по r вычисляется путём деления факториала n на произведение факториалов r и n-r.
Напишите функцию для вычисления размещений из n по r
Добавьте следующую функцию вне главной функции для вычисления размещений из n по r.
long nPr(int n, int r) {
if (n < r) {
return -1;
}
else {
return factorial(n) / factorial(n - r);
}
}
Эта функция принимает два целых числа, n и r, в качестве аргументов и возвращает значение размещений из n по r. Значение размещений из n по r вычисляется путём деления факториала n на факториал n-r.
Напишите код управляющего модуля программы
Добавьте следующий код внутри главной функции для ввода значений и отображения результатов.
int main()
{
int n, r;
printf("Введите значение n:");
scanf("%d", &n);
printf("Введите значение r:");
scanf("%d", &r);
printf("nCr равно %ld\n", nCr(n, r));
printf("nPr равно %ld\n", nPr(n, r));
return 0;
}
Этот код получает от пользователя значения n и r, вызывает функции nCr() и nPr() для вычисления соответствующих значений и затем отображает их.
Полный код
Завершённый код выглядит следующим образом.
#include <stdio.h>
long factorial(int num) {
if (num == 0) {
return 1;
}
else {
return num * factorial(num - 1);
}
}
long nCr(int n, int r) {
if (n < r) {
return -1;
}
else {
return factorial(n) / (factorial(r) * factorial(n - r));
}
}
long nPr(int n, int r) {
if (n < r) {
return -1;
}
else {
return factorial(n) / factorial(n - r);
}
}
int main()
{
int n, r;
printf("Введите значение n:");
scanf("%d", &n);
printf("\nВведите значение r:");
scanf("%d", &r);
printf("nCr равно %ld\n", nCr(n, r));
printf("nPr равно %ld\n", nPr(n, r));
return 0;
}
Резюме
В этом практическом занятии мы научились вычислять перестановки и сочетания на языке C. Мы написали функции для вычисления факториала, сочетаний из n по r и размещений из n по r. Мы также написали код-диспетчер для программы. Следуя шагам, описанным выше, мы можем вычислять перестановки и сочетания для введённых пользователем значений.



