COBOLで作成する簡易な電卓プログラム

スポンサーリンク
COBOL

今回は、COBOLで作成した簡単な電卓プログラム(加減乗除)をご紹介しよう。ユーザーが2つの数値と演算子(+、-、*、/)を入力すると、その計算結果を表示する。

なお、GnuCOBOL + VSCode でCOBOL学習環境を構築する方法は以下の記事を参照してください。

       IDENTIFICATION DIVISION.
       PROGRAM-ID. CALC.

       ENVIRONMENT DIVISION.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77  NUM1         PIC 9(5)V99 VALUE 0.
       77  NUM2         PIC 9(5)V99 VALUE 0.
       77  RESULT       PIC 9(7)V99 VALUE 0.
       77  OPERATOR     PIC X VALUE SPACE.
       77  WS-DIV-ZERO  PIC X VALUE 'N'.

       PROCEDURE DIVISION.
       MAIN-PROCESS.

           DISPLAY "=== COBOL CALCULATOR ===".
           DISPLAY "Enter first number (e.g., 123.45)".
           ACCEPT NUM1.

           DISPLAY "Enter second number (e.g., 67.89)".
           ACCEPT NUM2.

           DISPLAY "Enter operator (+ - * /)".
           ACCEPT OPERATOR.

           EVALUATE OPERATOR
               WHEN "+"
                   COMPUTE RESULT = NUM1 + NUM2
               WHEN "-"
                   COMPUTE RESULT = NUM1 - NUM2
               WHEN "*"
                   COMPUTE RESULT = NUM1 * NUM2
               WHEN "/"
                   IF NUM2 = 0
                       DISPLAY "Error: division by zero"
                       MOVE 'Y' TO WS-DIV-ZERO
                   ELSE
                       COMPUTE RESULT = NUM1 / NUM2
                   END-IF
               WHEN OTHER
                   DISPLAY "Invalid operator"
                   STOP RUN
           END-EVALUATE.

           IF WS-DIV-ZERO = 'N'
               DISPLAY "Result: " RESULT
           END-IF.

           STOP RUN.

実行方法(calc.cob というファイル名で保存)

cobc -x calc.cob
./calc

ファイル保存時の注意

  • エンコーディング:UTF-8
  • 行末に改行:あり。(ないと -Wmissing-newline エラー)
  • 72文字超過に注意:GnuCOBOLは73文字目以降を無視することがある。
  • エディタ設定:タブを使わずスペースでインデントを推奨。

実行例

=== COBOL CALCULATOR ===
Enter first number (e.g., 123.45)
13.34
Enter second number (e.g., 67.89)
67.38
Enter operator (+ - * /)
+
Result: 0000080.72

補足

  • PIC 9(5)V99 は整数5桁、小数2桁(合計7桁)の数値を扱う定義である。
  • 除算の際にはゼロ除算のチェック(IF NUM2 = 0)を入れてある。
  • EVALUATE は switch 文に相当する。演算子ごとの分岐処理に便利である。
  • COBOL(特に GnuCOBOL)では、全角文字を含む長い DISPLAY 文はトラブルの元になるので今回は避けた。

コメント

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