はじめに
この実験では、C 言語で順列 (nPr) を計算する方法を学びます。この実験は、以下の手順で構成されています。
最初に、順列の計算に必要な n と r の入力値を読み取ります。scanf() 関数を使用してユーザーから入力を受け取り、入力値を出力して確認します。
次に、階乗と順列 (nPr) を計算する関数を実装します。計算式は nPr = n! / (n-r)! です。r が n より大きい場合、エラーメッセージを表示します。
この実験では、C 言語で順列 (nPr) を計算する方法を学びます。この実験は、以下の手順で構成されています。
最初に、順列の計算に必要な n と r の入力値を読み取ります。scanf() 関数を使用してユーザーから入力を受け取り、入力値を出力して確認します。
次に、階乗と順列 (nPr) を計算する関数を実装します。計算式は nPr = n! / (n-r)! です。r が n より大きい場合、エラーメッセージを表示します。
このステップでは、C プログラミングで順列を計算するために必要な n と r の入力値を読み取る方法を学びます。
まず、順列計算プログラムを実装するための新しい C ファイルを作成しましょう。
cd ~/project
nano permutations.c
次に、入力値を読み取るコードを記述します。
#include <stdio.h>
int main() {
int n, r;
printf("アイテムの総数 (n) を入力してください:");
scanf("%d", &n);
printf("選択するアイテムの数 (r) を入力してください:");
scanf("%d", &r);
printf("入力された値:n = %d, r = %d\n", n, r);
return 0;
}
実行例:
アイテムの総数 (n) を入力してください: 5
選択するアイテムの数 (r) を入力してください: 3
入力された値: n = 5, r = 3
コードの詳細:
scanf() を使用して、ユーザーから整数を入力を読み取ります。%d は整数の書式指定子です。&n と &r は、入力値が格納されるメモリアドレスです。プログラムをコンパイルして実行します。
gcc permutations.c -o permutations
./permutations
このステップでは、階乗の計算によって順列 (nPr) を計算する関数を実装します。
以前の permutations.c ファイルを修正して、階乗計算と順列計算を追加しましょう。
cd ~/project
nano permutations.c
次に、階乗と順列計算関数でコードを更新します。
#include <stdio.h>
// 階乗を計算する関数
unsigned long long factorial(int num) {
unsigned long long result = 1;
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}
// 順列 (nPr) を計算する関数
unsigned long long permutation(int n, int r) {
// 無効な入力をチェック
if (r > n) {
printf("Error: r は n より大きくできません\n");
return 0;
}
// 式 n! / (n-r)! を使って nPr を計算
return factorial(n) / factorial(n - r);
}
int main() {
int n, r;
printf("アイテムの総数 (n) を入力してください:");
scanf("%d", &n);
printf("選択するアイテムの数 (r) を入力してください:");
scanf("%d", &r);
unsigned long long result = permutation(n, r);
if (result > 0) {
printf("%d 個のアイテムから %d 個選ぶ順列 (nPr) は:%llu\n", n, r, result);
}
return 0;
}
プログラムをコンパイルして実行します。
gcc permutations.c -o permutations
./permutations
実行例:
アイテムの総数 (n) を入力してください: 5
選択するアイテムの数 (r) を入力してください: 3
5 個のアイテムから 3 個選ぶ順列 (nPr) は: 60
実装に関する重要な点:
factorial() 関数は、与えられた数の階乗を計算します。permutation() 関数は、nPr の式 n! / (n-r)! を実装します。unsigned long long を使用しています。このステップでは、順列計算プログラムを拡張して、より詳細な出力とフォーマットオプションを追加します。
permutations.c ファイルを修正して、結果の表示を改善しましょう。
cd ~/project
nano permutations.c
結果表示を改善したコードを更新します。
#include <stdio.h>
// 階乗を計算する関数
unsigned long long factorial(int num) {
unsigned long long result = 1;
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}
// 順列 (nPr) を計算する関数
unsigned long long permutation(int n, int r) {
// 無効な入力をチェック
if (r > n) {
printf("Error: r は n より大きくできません\n");
return 0;
}
// 式 n! / (n-r)! を使って nPr を計算
return factorial(n) / factorial(n - r);
}
// 詳細な順列計算の説明を表示する関数
void printPermutationDetails(int n, int r, unsigned long long result) {
printf("\n--- 順列計算詳細 ---\n");
printf("アイテムの総数 (n): %d\n", n);
printf("選択するアイテムの数 (r): %d\n", r);
printf("計算:%d P %d = %d! / (%d - %d)!\n", n, r, n, n, r);
printf("結果:%llu 通りの異なる配置が可能です\n", result);
printf("----------------------------------------\n");
}
int main() {
int n, r;
printf("順列 (nPr) 計算機\n");
printf("アイテムの総数 (n) を入力してください:");
scanf("%d", &n);
printf("選択するアイテムの数 (r) を入力してください:");
scanf("%d", &r);
unsigned long long result = permutation(n, r);
if (result > 0) {
printPermutationDetails(n, r, result);
}
return 0;
}
プログラムをコンパイルして実行します。
gcc permutations.c -o permutations
./permutations
実行例:
順列 (nPr) 計算機
アイテムの総数 (n) を入力してください: 5
選択するアイテムの数 (r) を入力してください: 3
--- 順列計算詳細 ---
アイテムの総数 (n): 5
選択するアイテムの数 (r): 3
計算: 5 P 3 = 5! / (5 - 3)!
結果: 60通りの異なる配置が可能です
----------------------------------------
主な改善点:
printPermutationDetails() 関数を追加しました。この実験では、C プログラミングで順列を計算するために必須の n と r の入力値を読み取る方法を学びました。また、n! / (n-r)! という式を使って階乗と順列 (nPr) を計算する関数を実装しました。
主な学習ポイントは、整数入力を読み取るための scanf() の使用、階乗と順列計算関数の作成、r が n より大きい場合の無効な入力の処理です。