基本情報技術者試験の過去問と解説
[TOP] [午前分野別] [午後分野別] [キーワード索引] [令和元年秋午前] [令和元年秋午後]

平成24年 秋期 基本情報技術者 午後 問10
問10   COBOL

 次の COBOL プログラムの説明及びプログラムを読んで,設問1,2に答えよ。

〔プログラムの説明〕

 ある会員制スポーツクラブにおける利用料金の計算プログラムである。

 このスポーツクラブは,会員が都合の良い時間に施設を利用できるようになっており, 会員の利用実績を利用記録ファイルに格納する。利用料金は,1か月に 10 時間まで 利用できる基本料金と,10時間を超過した時間に応じて課金する超過料金の合計であり, 1か月分をまとめて,翌月,会員に請求する。施設の利用実績がなかった会員にも, 基本料金は請求する。

(1) 会員ファイルは,図1に示すレコード様式の索引ファイルであり,会員番号を 主レコードキーとする。呼出し法は順呼出しとする。


     図1 会員ファイルのレコード様式

@ 会員番号は,会員ごとに割り当てられる一意の番号であり,000001 から始まる6桁の数字である。

A 会員種別には,表1に示す会員種別が格納される。利用料金は,会員種別によって決まる。

     表1 料金表

B 入会日には,入会した年,月,日が,それぞれ4桁,2桁,2桁で格納される。

(2) 利用記録ファイルは,図2に示すレコード様式の順ファイルであり,1か月分の 会員の利用実績を格納する。1レコードには,1人の会員の1回の利用に関する情報が格納される。


     図2 利用記録ファイルのレコード様式

@ 利用日には,施設を利用した年,月,日が,それぞれ4桁,2桁,2桁で格納される。

A 開始時刻及び終了時刻には,時,分がそれぞれ2桁の24時間表記で格納される。 施設の営業時間は8時から 23 時までである。

B 利用時間には,施設の利用時間が分単位で格納される。

(3) 請求ファイルは,図3に示すレコード様式の順ファイルであり,会員ごとの月次請求金額を格納する。 超過料金は1か月の利用時間の合計(分)を時間単位に切り上げて課金する。


 図3 請求ファイルのレコード様式

(4) 作業用ファイルは,図4に示すレコード様式の索引ファイルであり, 会員番号を主レコードキーとする。利用記録ファイルから会員ごとの利用時間の合計を分単位で 求めるために使用する。呼出し法は乱呼出しとする。


 図4 作業用ファイルのレコード様式

〔プログラム〕
(行番号)

 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD WORK-F.
 4  01 W-REC.
 5     02 W-NO            PIC X(6).
 6     02 W-MIN           PIC 9(6).
 7  FD MEM-F.
 8  01 M-REC.
 9     02 M-NO            PIC X(6).
10     02 M-CODE          PIC 9(1).
11     02 M-PERSON.
12       03 M-NAME           PIC X(10).
13       03 M-ADDR           PIC X(20).
14       03 M-TEL            PIC 9(11).
15     02 M-DATE          PIC 9(8).
16  FD TIME-F
17  01 T-REC.
18     02 T-NO            PIC 9(6).
19     02 T-DATE          PIC 9(8).
20     02 T-STIME         PIC 9(4).
21     02 T-ETIME         PIC 9(4).
22     02 T-MIN           PIC 9(4).
23  FD BILL-F.
24  01 B-REC.
25     02 B-NO            PIC 9(6).
26     02 B-CHG           PIC 9(6).
27  WORKING-STORAGE SECTION.
28  77 TIME-FLAG       PIC X(1) VALUE SPACE.
29     88  TIME-EOF       VALUE "E"
30  77 MEM-FLAG        PIC X(1) VALUE SPACE.
31     88  MEM-EOF        VALUE "E".
32  77 EXT-H           PIC 9(4).
33  01 PRICE-VALUE.
34     02              PIC X(16) VALUE "5000500040003000".
35     02              PIC X(12) VALUE  .
36  01 PRICE-TABLE     REDEFINES PRICE-VALUE.
37     02 BASE-PRICE      OCCURS 4 PIC 9(4).
38     02 EXT-PRICE       OOCURS 4 PIC 9(3).
39  PROCEDURE DIVISION.
40  MAIN-PROC.
41      OPEN INPUT  MEM-F TIME-F
42           I-O    WORK-F
43           OUTPUT BILL-F.
44      PERFORM MKTIME-PROC.
45      PERFORM  .
46      CLOSE MEM-F TIME-F WORK-F BILL-F.
47      STOP RUN.
48  MKTIME-PROC.
49      PERFORM UNTIL TIME-EOF
50         READ TIME-F AT END     SET TIME-EOF TO TRUE
51                     NOT AT END PERFORM MKWORK-PROC
52         END-READ
53      END-PERFORM.
54  MKWORK-PROC.
55      MOVE T-NO TO W-NO.
56      READ WORK-F
57         INVALID KEY     MOVE T-NO TO W-NO
58                         
59                         WRITE W-REC END-WRITE
60         NOT INVALID KEY ADD T-MIN TO W-MIN
61                         REWRITE W-REC END-REWRITE
62      END-READ.
63  MKBILL-PROC.
64      PERFORM UNTIL MEM-EOF
65         READ MEM-F
66            AT END     SET MEM-EOF TO TRUE
67            NOT AT END PERFORM WRBILL-PROC
68         END-READ
69      END-PERFORM.
70  WRBILL-PROC.
71      MOVE M-NO TO W-NO B-NO
72      MOVE BASE-PRICE(M-CODE) TO B-CHG.
73      READ WORK-F
74         INVALID KEY CONTINUE
75         NOT INVALID KEY
76            IF W-MIN > 600 THEN
77               COMPUTE EXT-H = (W-MIN - 600 + 59) / 60
78               
79            END-IF
80      END-READ.
81      WRITE B-REC.

設問1 プログラム中の に入れる正しい答えを, 解答群の中から選べ。

a に関する解答群

ア "300400400500"       イ "400400500500"

ウ "500400400300"       エ "500500400300"

b に関する解答群

ア MAIN-PROC         イ MKBILL-PROC

ウ MKTIME-PROC        エ MKWORK-PROC

オ WRBILL-PROC

c,d に関する解答群

ア ADD EXT-PRICE(M-CODE) TO B-CHG

イ ADD T-MIN TO W-MIN

ウ COMPUTE B-CHG = B-CHG + EXT-PRICE(M-CODE) * EXT-H

エ COMPUTE W-MIN = (T-MIN + 59) / 60 + 1

オ MOVE EXT-PRICE(M-CODE) TO B-CHG

カ MOVE T-MIN TO W-MIN

解答 a ←クリックすると正解が表示されます

解答 b ←クリックすると正解が表示されます

解答 c ←クリックすると正解が表示されます

解答 d ←クリックすると正解が表示されます

基本情報技術者試験


設問2 テストデータを用いて動作確認をしたところ,利用記録ファイルの レコード数の増加に伴って,処理時間が想定を大きく超えることが判明した。調査の結果, 作業用ファイルの入出力に多くの時間を費やしていた。そこで,整列機能を使用して 処理時間の短縮を図ることにし,表2の変更を行うことにした。表2のプログラムでは, 図4に示すレコード様式の整列併合用ファイルを作業用ファイルとして使用する。 表2のプログラム中の に入れる正しい答えを,解答群の中から選べ。 ここで,表2の には,設問1の正しい答えが入っているものとする。

          表2 プログラムの変更
   処置           変更内容
 行番号 3 を変更
 SD WORK-F.
 行番号 31 と 32 の
 間に追加
 77 WORK-FLAG      PIC X(1) VALUE SPACE.
    88  WORK-EOF      VALUE "E".
 77 TMP-NO         PIC 9(6) VALUE ZERO.
 77 TMP-MIN        PIC 9(6) VALUE ZERO.
 行番号 39 〜 81
 を変更
 PROCEDURE DIVISION.
 MAIN-PROC.
     OPEN INPUT  MEM-F TIME-F
          OUTPUT BILL-F.
     SORT WORK-F ASCENDING KEY W-NO
        INPUT  PROCEDURE IS MKTIME-PROC
        OUTPUT PROCEDURE IS MKBILL-PROC.
     CLOSE MEM-F TIME-F BILL-F.
     STOP RUN.
 MKTIME-PROC.
     PERFORM UNTIL TIME-EOF
        READ TIME-F
           AT END     SET TIME-EOF TO TRUE
           NOT AT END PERFORM MKWORK-PROC
        END-READ
     END-PERFORM.
 MKWORK-PROC.
     MOVE T-NO  TO W-NO.
     MOVE T-MIN TO W-MIN.
     
 MKBILL-PROC.
     PERFORM UNTIL WORK-EOF
        RETURN WORK-F
           AT END     SET WORK-EOF TO TRUE
                      PREFORM WRBILL-PROC
           NOT AT END IF TMP-NO = W-NO OR ZERO THEN
                         
                      ELSE
                         PREFORM WRBILL-PROC
                         MOVE W-MIN TO TMP-MIN
                      END-IF
                      MOVE W-NO TO TMP-NO
        END-RETURN
     END-PERFORM.
 WRBILL-PROC.
     PERFORM TEST AFTER
        UNTIL (M-NO = TMP-NO AND NOT WORK-EOF) OR MEM-EOF
        READ MEM-F
           AT END
              SET MEM-EOF TO TRUE
           NOT AT END
              MOVE M-NO TO B-NO
              MOVE BASE-PRICE(M-CODE) TO B-CHG
              IF  THEN
                 COMPUTE EXT-H = (TMP-MIN - 600 + 59) / 60
                 
              END-IF
              WRITE B-REC
        END-READ
     END-PERFORM.

e,f に関する解答群

ア ADD W-MIN TO TMP-MIN       イ MOVE ZERO TO TMP-MIN

ウ PERFORM WRBILL-PROC       エ RELEASE W-REC

オ WRITE W-REC

g に関する解答群

ア (M-NO = TMP-NO OR TMP-MIN > 600) AND NOT MEM-EOF

イ M-NO = TMP-NO

ウ M-NO = TMP-NO AND TMP-MIN > 600

エ M-NO = TMP-NO OR TMP-MIN > 600

オ TMP-MIN > 600

解答 e ←クリックすると正解が表示されます

解答 f ←クリックすると正解が表示されます

解答 g ←クリックすると正解が表示されます


[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]