COBOL

COBOL練習問題

答えを見る前にコードを書き、入力値を変えてデータ処理の考え方を定着させましょう。

COBOL入門の講座一覧

01

表示と計算:送料を求める

商品価格2500円と送料600円を足して、合計を表示してください。まずは自分でPRICE、SHIPPING、TOTALを定義してみましょう。

解答例と実行結果
解答例COBOL
IDENTIFICATION DIVISION.
PROGRAM-ID. SHIPPING.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(5) VALUE 2500.
01 SHIPPING PIC 9(4) VALUE 600.
01 TOTAL PIC 9(5).
PROCEDURE DIVISION.
    COMPUTE TOTAL = PRICE + SHIPPING
    DISPLAY "合計: " TOTAL "円"
    STOP RUN.
実行結果OUTPUT
合計: 03100円
02

条件分岐:在庫を判定する

在庫数が10以上なら「在庫あり」、1以上9以下なら「残りわずか」、0なら「売り切れ」と表示してください。EVALUATE TRUEを使う方法も試しましょう。

解答例と考え方
解答例COBOL
01 STOCK PIC 9(3) VALUE 7.

EVALUATE TRUE
    WHEN STOCK >= 10 DISPLAY "在庫あり"
    WHEN STOCK >= 1 DISPLAY "残りわずか"
    WHEN OTHER DISPLAY "売り切れ"
END-EVALUATE.
実行結果OUTPUT
残りわずか

上から順に条件が確認されます。STOCKを0、10、25へ変更し、3種類の結果が表示されることを確認してください。

03

表の集計:合計と最高点

4人分の点数をOCCURS 4 TIMESで持ち、合計と最高点を求めてください。最初の要素を最高点へ入れてから、残りと比較すると考えやすくなります。

解答例と実行結果
解答例COBOL
01 SCORES.
    05 SCORE PIC 9(3) OCCURS 4 TIMES.
01 TOTAL PIC 9(4) VALUE 0.
01 HIGHEST PIC 9(3) VALUE 0.
01 I PIC 9.

MOVE 72 TO SCORE (1).
MOVE 91 TO SCORE (2).
MOVE 68 TO SCORE (3).
MOVE 85 TO SCORE (4).

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
    ADD SCORE (I) TO TOTAL
    IF SCORE (I) > HIGHEST
        MOVE SCORE (I) TO HIGHEST
    END-IF
END-PERFORM.
DISPLAY "合計=" TOTAL " 最高点=" HIGHEST.
実行結果OUTPUT
合計=0316 最高点=091
04

ファイル処理:件数と合計

numbers.txtに整数を複数行保存し、READで読み込んだ件数と合計を表示してください。ファイルが空の場合も試します。

確認ポイント
  • OPEN INPUTを実行してから読む
  • AT ENDで終了フラグを立てる
  • NOT AT ENDの中で件数と合計を更新する
  • 最後にCLOSEする
05

入力検証:範囲外を受け付けない

点数を受け取る項目を用意し、0未満または100超の値なら「範囲外」と表示してください。入力を受け付ける処理まで進める場合は、GnuCOBOLのACCEPTと文字列から数値へ変換する方法を公式資料で確認しましょう。

条件を検証するCOBOL
01 SCORE PIC S9(3).

MOVE 105 TO SCORE.
IF SCORE < 0 OR SCORE > 100
    DISPLAY "点数が範囲外です。"
ELSE
    DISPLAY "点数を受け付けました。"
END-IF.
実行結果OUTPUT
点数が範囲外です。
06

次の課題

ここまでの内容を組み合わせ、商品売上ファイルを読み込んで商品別の合計を出すプログラムへ発展させましょう。さらに、商品マスターと売上データを照合するマッチング処理にも挑戦できます。

学習の進め方

最初から大きなプログラムにせず、1件を表示する、合計を求める、条件で分ける、ファイルへ出す、という小さな段階を作ります。各段階で実行結果を保存すると、変更による影響を追いやすくなります。