【擬似言語⑩裏】階乗 | 順列Pと組合せCへの応用(基本情報技術者, 科目B, アルゴリズム)
このNoteでは、>前回の階乗Note を流用して、順列Pと組合せCの公式計算をテーマにします。
関数の呼出しと、提示された数式を擬似言語で組むだけなので、結構簡単です。>擬似言語の11解法Note➑
簡単だったので、「0!=1!=1」や「順列P」「組合せC」の復習も追加しときました。科目Aで苦手/捨て問にしてた方は、もう一回だけチャレンジして頂けたら嬉しいです。
テキストの基礎を生かして、プログラム的な考察/工夫を学んでいきます。基礎と実用にギャップを感じる方のために作りました。
>【FEB】擬似言語の教科書Note
ぜひ一緒に学習を進めていきましょう!
このNoteは、私がIT専門学校で授業したことを基に作成しています。IT専門学校でFEは第一目標として、カリキュラムが構築されています。何も知らずに入学しても、1年生10月にはFE合格していきますよ。実績ある教育ノウハウを詰め込んだので、少しでも信頼して頂けたら嬉しいです。
>全Noteへのリンク(FE節)
※科目Aのテーマ別/科目B/旧FE午後など沢山作りました!
階乗 | 数を階段みたいに掛け算
「階乗」って、n!=n×(n-1)×(n-2)×・・・×1のような計算。例えばn=3の時、3!=3×2×1。なお、1!=0!=1です。
>前回のNote では、階乗の計算を2つの方式(forループ、再帰呼出し)で行う擬似言語を作りました。
○整数型: calcFactorial(整数型: n):forループ
○整数型: calcFactorialRecur(整数型: n):再帰呼出し
つまり。calcFactorial(3)で、3!=3×2×1=6を得れます。
関数の中身や、再帰関数の科目A出題は以下のNoteで。
>前回のNote
>【FE計算①】再帰関数のNote
>【AP計算⑲】再帰関数のNote
今回は使えればOK。
では、順列Pと組合せCを計算する擬似言語を組みます。公式通りにするだけなので超簡単です。>擬似言語の11解法Note➑
順列(P)の擬似言語
順列Pの数式が分かれば簡単です。
$$
_nP_r = \frac{n!}{(n-r)!}
$$
n!をcalcFactorial(n)、(n-r)!をcalcFactorial(n-r)で得て、分子分母としてガッチャンコすれば終わり。
○整数型: calcPermutation(整数型: n, 整数型: r)
整数型: numerator / 分子 */
整数型: denominator / 分母 */
/ 分子 (n!) を計算 */
numerator ← calcFactorial(n)
/ 分母 ((n - r)!) を計算 */
denominator ← calcFactorial(n - r)
/ 分子を分母で割った結果を返す */
return numerator / denominatorなんなら下記でも良いかも😅
return calcFactorial(n)/calcFactorial(n - r)引数検査をしたいなら、以下を関数最初に追加。
nとrは0未満はダメ。n<rもダメ。
/ 引数チェック */
if (n < r または n < 0 または r < 0)
return -1
endif組合せ(C)の擬似言語
組合せCの公式。
$$
_nC_r = \frac{n!}{r!(n-r)!}
$$
calcFactorial(n), (r), (n-r)をガッチャンコって分かりますね。
○整数型: calcCombination(整数型: n, 整数型: r)
整数型: numerator / 分子: */
整数型: denominator / 分母: */
/ 引数チェック */
if (n < r または n < 0 または r < 0)
return -1
endif
numerator ← calcFactorial(n)
denominator ← calcFactorial(r) × calcFactorial(n - r)
return numerator / denominator簡単でしたね。これにて今回の学習は終了です。
以下は、科目Aの補強。1!=1は分かるけど、なんで0!=1なのか。順列Pと組合せCってどんなんだったっけ。を解説します。
0! = 1! = 1の理由
順列Pや組合せCで「(n-r)!」が出ました。n=rだったら0!になります。2!=2×1, 1!=1ですが、0!=1って分かりますか?
「(n-r)!」が分母にくるので、0!=0だと計算できないんです。1/0はプログラムでは「エラー(0除算)」、数学的には「∞」になります。
ここから先は
メンバーシップ
¥ 500 /月
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ
