COBOL言語の関数「FACTORIAL」について理解しよう!

COBOL(コボル)言語の予約語FACTORIALを使った階乗の求め方とは

辞典・辞書-FACTORIAL-イメージ

COBOL(コボル)言語のFACTORIAL関数とは?

COBOL(コボル)の組込み関数であるFACTORIAL関数は、英語からも想像が付く通り階乗を求めたい場合に使用します。階乗とは、自然数nに対して1からnまでの自然数の積になり、n!で表します。!はエクスクラメーションマークと言います。例えば自然数5の階乗(5!)は、5 × 4 × 3 × 2 × 1 (5 ・ 4 ・ 3 ・ 2 ・ 1)= 120になります。なお、0の階乗だけは1と決められています。階乗は主に順列や組み合わせを求める際に利用されます。例えば数字の書かれたカードを3枚並べた場合に何通りの並べ方ができるかを求める事ができます。では早速COBOL言語での使い方について見ていきましょう。

書き方(FACTORIAL関数):

FUNCTION FACTORIAL(引数1)

・関数の型:整数

・引数1:階乗を求める数字を指定します。0以上20未満の整数が指定できます。

・戻り値:引数1の階乗の整数値です。

使用例:

辞典・辞書-FACTORIAL-使用例

実行結果:

辞典・辞書-FACTORIAL-実行結果

FACTORIAL関数のCOBOL(コボル)言語における基本事項やルールについて

1.「FACTORIAL」の間の空白や改行は、自由に設定できます。

2.組込み関数の前には予約語「FUNCTION」を指定する必要があります。

3.引数1は0以上20未満の数値である必要があります。

COBOL(コボル)言語のFACTORIAL関数を扱う上での注意点

COBOL言語のFACTORIAL関数(階乗)は、高校の数学で学ぶ順列、組み合わせを求める際に活用できます。順列は、異なるn個のものの中から異なるr個を取り出して1列に並べる場合の数を求める事を指し、nPr=n!/ (n-r)!というような公式があります。組み合わせは、異なるn個のものの中から異なるr個を取り出す場合の数を求める事を指し、nCr=nPr/r!というような公式があります。順列と組み合わせの違いは、並び順を考慮するかしないかになります。この違いを理解して活用できるようになりましょう。

また、引数として指定する数字が負数の場合は実行時にエラーとなってしまいますし、引数に20以上の値を設定した場合は桁溢れを起こしてしまいますので、関数実行前には数字の値の範囲をチェックするようにしましょう。

FACTORIAL関数を使ったCOBOL(コボル)プログラムの活用法

FACTORIAL関数は、先ほどご紹介した通り階乗を求める関数でした。ここでは活用法として、実際に順列を求めるプログラムを作成してみましょう。画面上から異なる数値の数(n)と、そこから取り出す数値の数(r)を入力してもらい、結果値を画面に表示するようにしてみましょう。それができれば今度は入力される値をチェックする処理などをご自身で追加してみましょう。同じように組み合わせのプログラムも作成すると理解が深まるでしょう。

サンプルプログラム(FACTORIAL2):

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. FACTORIAL_SAMPLE2.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. 01 INPUT-RECORD.
  8. 03 IN-DATA-NUM-N PIC 9(02).
  9. 03 IN-DATA-NUM-R PIC 9(02).
  10. 03 OUT-DATA-NUM PIC 9(18).
  11. PROCEDURE DIVISION.
  12. DISPLAY "異なる数値の数を入力してください。>> " WITH NO ADVANCING.
  13. ACCEPT IN-DATA-NUM-N FROM CONSOLE.
  14.  
  15. DISPLAY "取り出す数値の数を入力してください。>> " WITH NO ADVANCING.
  16. ACCEPT IN-DATA-NUM-R FROM CONSOLE.
  17.  
  18. COMPUTE OUT-DATA-NUM = FUNCTION FACTORIAL(IN-DATA-NUM-N) /
  19. FUNCTION FACTORIAL(IN-DATA-NUM-N - IN-DATA-NUM-R).
  20. DISPLAY IN-DATA-NUM-N "P" IN-DATA-NUM-R " = " OUT-DATA-NUM.
  21. STOP RUN.

実行結果(FACTORIAL2):

辞典・辞書-FACTORIAL-実行結果

今回ご紹介したFACTORIALのサンプルプログラムは、ある整数値の階乗を求める関数でした。階乗は高校数学でも習うものになりますので馴染みのある方もいらっしゃるのではないかと思います。ここで学んだ順列や組み合わせについては、確率の計算を行う場合などにも応用されますので、是非この機会に一度サンプルプログラムを作成して機能の理解を深めていただくとともに、実際のプログラミングに応用していっていただければと思います。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門