メインコンテンツへスキップ
見出し画像

【擬似言語⑩裏】階乗 | 順列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の数式が分かれば簡単です。

    nPr=n!(n−r)!_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の公式。

    nCr=n!r!(n−r)!_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除算)」、数学的には「∞」になります。

     
     
    大学・専門学校の先生の解説Note。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。