COBOL言語の関数「MAX、MIN」ついて理解しよう! | 用語辞典

COBOL(コボル)言語の予約語MAX、MINを使った最大値、最小値の求め方とは

辞典・辞書-MAX&MIN-IMG-イメージ

COBOL(コボル)言語のMAX,MINとは?

COBOL(コボル)の組み込み関数であるMAX関数、MIN関数は2つ以上の項目や値から最大値、最小値を求める場合に使用します。MAX関数は指定された複数の引数から最大値が含まれる引数の値を返し、MIN関数は指定された複数の引数から最小値が含まれる値を返します。

書き方(MAX関数):

FUNCTION MAX(引数-1、引数-2、・・・)

書き方(MIN関数):

FUNCTION MIN(引数-1、引数-2、・・・)

たとえば、プログラムで定義された以下の項目から最大値、最小値を求めたい場合があるとします。

  1. 03 NUM-A PIC 9(3) VALUE 200.
  2. 03 NUM-B PIC 9(3) VALUE 300.
  3. 03 NUM-C PIC 9(3) VALUE 100.

以下のように引数を指定するとMAX関数、MIN関数は最大値、最小値を含む引数の値が返されます。この例ではMAX関数は最大値300を返し、MIN関数は最小値100を返します。

  1. FUNCTION MAX(NUM-A NUM-B NUM-C).
  2. FUNCTION MIN(NUM-A NUM-B NUM-C).

使用例:

辞典・辞書-MAX&MIN-IMG-使用例

実行結果:

辞典・辞書-MAX&MIN-IMG-実行結果:

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

  1. 「FUNCTION MAX」の間の空白や改行は、自由に設定できます。
  2. MAX関数やMIN関数のような組み込み関数は、関数名の前に予約後「FUNCTION」を指定する必要があります。
  3. 引数には最大値・最小値を求める値を複数指定する必要があります。
  4. MAX、MIN関数の引数は数字のほか、英字・英数字・国別を指定することもできます。
  5. 戻り値は引数の項目が持っている値の内容が返されます。最大値、最小値を求める比較は単純条件の規則に従います。
  6. 比較する項目で2つ以上の同じ値の最大値、最小値がある場合は、左側にある引数-1の内容が返されます。

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

MAX関数、MIN関数で引数に指定する値は、同じ型(数字・英字・英数字・国別)である必要があります。ただし、英字と英数字の引数の組み合わせは可能です。

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

MAX、MIN関数はCOBOL(コボル)言語で複数の項目から最大値、最小値を求めるときに非常に便利です。ここでは、活用法としてACCEPT文で入力した値から最大値、最小値を求める簡単なプログラムを紹介します。

サンプルプログラム1:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. MAXMIN_SAMPLE01.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. 01 SAMPLE-DATA.
  8. 03 NUM-A PIC 9(3).
  9. 03 NUM-B PIC 9(3).
  10. 03 NUM-C PIC 9(3).
  11. 01 NUM-MAX PIC 9(3).
  12. 01 NUM-MIN PIC 9(3).
  13.  
  14. PROCEDURE DIVISION.
  15.  
  16. *>----------------------------------------------------
  17. *> コンソールに入力
  18. *>----------------------------------------------------
  19. DISPLAY "数字を入力してください(1/3)。>> " WITH NO ADVANCING.
  20. ACCEPT NUM-A FROM CONSOLE.
  21.  
  22. DISPLAY "数字を入力してください(2/3)。>> " WITH NO ADVANCING.
  23. ACCEPT NUM-B FROM CONSOLE.
  24.  
  25. DISPLAY "数字を入力してください(3/3)。>> " WITH NO ADVANCING.
  26. ACCEPT NUM-C FROM CONSOLE.
  27.  
  28. *>----------------------------------------------------
  29. *> 最大値/最小値を求める
  30. *>----------------------------------------------------
  31.  
  32. COMPUTE NUM-MAX = FUNCTION MAX(NUM-A NUM-B NUM-C).
  33. COMPUTE NUM-MIN = FUNCTION MIN(NUM-A NUM-B NUM-C).
  34.  
  35. DISPLAY "最大値は:"NUM-MAX.
  36. DISPLAY "最小値は:"NUM-MIN.

実行結果:

辞典・辞書-MAX&MIN-IMG-入力例

先述したようにMAX関数、MIN関数は英字などの文字列を比較するときにも使用できます。以下のサンプルでは入力した英字の文字列から最大値、最小値を求めます。なお、文字列の場合アルファベット順に最大値、最小値が精査されます。

サンプルプログラム2:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. MAXMIN_SAMPLE02.
  3. ENVIRONMENT DIVISION.
  4. INPUT-OUTPUT SECTION.
  5. DATA DIVISION.
  6. WORKING-STORAGE SECTION.
  7. 01 FRUITS-DATA.
  8. 03 STR-A PIC X(10).
  9. 03 STR-B PIC X(10).
  10. 03 STR-C PIC X(10).
  11. 01 STR-MAX PIC X(10).
  12. 01 STR-MIN PIC X(10).
  13.  
  14. PROCEDURE DIVISION.
  15.  
  16. *>----------------------------------------------------
  17. *> コンソールに入力
  18. *>----------------------------------------------------
  19. DISPLAY "文字列を入力してください(1/3)。>> " WITH NO ADVANCING.
  20. ACCEPT STR-A FROM CONSOLE.
  21.  
  22. DISPLAY "文字列を入力してください(2/3)。>> " WITH NO ADVANCING.
  23. ACCEPT STR-B FROM CONSOLE.
  24.  
  25. DISPLAY "文字列を入力してください(3/3)。>> " WITH NO ADVANCING.
  26. ACCEPT STR-C FROM CONSOLE.
  27.  
  28. *>----------------------------------------------------
  29. *> 最大値/最小値を求める
  30. *>----------------------------------------------------
  31.  
  32. MOVE FUNCTION MAX(STR-A STR-B STR-C) TO STR-MAX.
  33. MOVE FUNCTION MIN(STR-A STR-B STR-C) TO STR-MIN.
  34.  
  35. DISPLAY "最大値は:"STR-MAX.
  36. DISPLAY "最小値は:"STR-MIN.

実行結果:

辞典・辞書-MAX&MIN-IMG-入力例

ここで紹介した2つのプログラムではACCEPT文で入力した3つの値をMAX関数、MIN関数の引数に指定してそれぞれ最大値、最小値を求めています。MAX関数、MIN関数を使用すれば、IF文やEVALUATE文などの条件分岐処理を使わずに簡単に最大値、最小値を求められることがわかります。

実際のプログラムでもデータの中から最大値や最小値を求めるような処理はよく使われますので、ここで紹介したMAX関数とMIN関数の使い方はよく理解しておきましょう。

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

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

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

COBOL入門のカテゴリー

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