【COBOL学習|豆知識】COBOLでの平均値算出をスマートに!組み込み関数MEANの活用術

導入

業務システムで避けて通れないのが「平均値の算出」です。従来、平均を求めるには「合計値を集計するループ」と「件数で割る除算処理」を記述し、さらにゼロ除算のチェックまで行う必要がありました。しかし、COBOLの組み込み関数であるMEAN関数を使えば、これらの煩雑な処理を一行で完結させることができます。コードの可読性を高め、ヒューマンエラーを減らすために、ぜひこの機能を使いこなしましょう。

基礎知識

COBOLにおける組み込み関数とは、コンパイラが標準で提供している便利な計算・文字列処理機能のことです。MEAN関数は、引数に指定した数値項目やテーブル(配列)の全要素の平均値を算出します。特筆すべきは、内部で自動的に「合計値の算出」と「要素数での除算」を行ってくれる点です。また、戻り値は浮動小数点数として返されるため、精度の高い計算結果が得られるのも大きなメリットです。

実装/解決策

MEAN関数を使用する際は、COMPUTE文と組み合わせて記述するのが基本です。特に、テーブル(OCCURS句で定義された配列)全体を対象とする場合は、添字にALLを指定することで、ループ処理を記述することなく全要素の平均を算出できます。これにより、ソースコードの行数を劇的に削減でき、保守性も向上します。

サンプルプログラム

以下のサンプルは、学生のテストスコアを格納したテーブルから平均値を算出する例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE-MEAN.
DATA DIVISION.
WORKING-STORAGE SECTION.

  • 5人分のスコアを保持するテーブル

01 WS-SCORE-TABLE.
05 WS-SCORE PIC 9(03) OCCURS 5 TIMES.
01 WS-AVG PIC S9(03)V99.

PROCEDURE DIVISION.

  • テストデータのセット

MOVE 80 TO WS-SCORE(1).
MOVE 90 TO WS-SCORE(2).
MOVE 75 TO WS-SCORE(3).
MOVE 85 TO WS-SCORE(4).
MOVE 95 TO WS-SCORE(5).

  • MEAN関数による平均値算出
  • ALLを指定することで、テーブル全要素の平均を自動計算

COMPUTE WS-AVG = FUNCTION MEAN(WS-SCORE(ALL)).

DISPLAY “平均スコアは: ” WS-AVG.

STOP RUN.

応用・注意点

現場で活用する際の注意点は、ゼロ除算(除算エラー)です。もしMEAN関数に渡す数値がすべて空(あるいは0件のテーブル)である場合、計算結果が不定になることがあります。実務では、あらかじめ件数をチェックするロジックを併用するか、計算結果を格納する受け側の項目の精度を十分に確保してください。また、古いコンパイラ環境では組み込み関数が利用できない場合もありますので、導入前に開発環境の仕様を必ず確認しましょう。これらを意識すれば、より堅牢で美しいコードが書けるはずです。

コメント

タイトルとURLをコピーしました