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

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

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

〔プログラムの説明〕

 ある有料自動車道路には A 〜 J の順に 10 か所のインターチェンジ(以下,IC という)があり, すべての IC に自動発券精算システムを導入することにした。すべての IC には一般道路からの 出入口があり,利用者は,入った IC (以下,入車 IC という)で発券された通行券を, 出た IC (以下,出車 IC という)の精算機に投入し,利用区間に応じた通行料を支払う。 システムは計算センタとオンラインで結ばれており,通行料は出車 IC の売上として 売上ファイルに記録される。

 このプログラムは,売上ファイルを読み込み,各 IC の売上,及び利用区間と その利用台数を台数の多い順に 10 区間まで,図1に示す形式で表示する。

A          187,200             
B:         514,700
        :
J:          95,400
TOTAL:   3,086,200

B‐E:  1,125
E‐B:  1,079
C‐E:    996
        :

  図1 プログラム実行時の表示例

(1) 売上ファイルは,図2に示すレコード様式の順ファイルである。

 入車 IC 
 2けた  
 出車 IC 
 2けた  
 通行料 
 4けた   

   図2 売上ファイルのレコード様式

@ 車1台の1回の利用につき1レコードが生成され,一つのファイルには1日分の売上が記録されている。

A 入車 IC 及び出車 IC には,各 IC に対応する 01 〜 10 の番号が格納される。A は 01, B は 02,…,J は 10 とする。

(2) 各 IC の1日の売上は 999,999 円以下とする。

(3) 1日の利用台数は 99,999 台以下とする。

(4) 利用台数の多い順に 10 区間までを表示する際,10 区間目と台数が同じ利用区間が 複数ある場合は,それらの利用区間もすべて表示する。ただし,利用台数がゼロになった場合は, 表示が 10 区間に満たなくても処理を終了する。

(5) Uターン及び同じ IC からの入出車はないものとする。

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

 1  DATA DIVISION.
 2  FILE SECTION.
 3  SD  SORT-FILE.
 4  01  SORT-REC.
 5      02  SORT-IN            PIC 9(2).
 6      02  SORT-OUT           PIC 9(2).
 7      02  SORT-DATA          PIC 9(6).
 8  FD  SALES-FILE.
 9  01  SALES-REC.
10      02  SAL-IN             PIC 9(2).
11      02  SAL-OUT            PIC 9(2).
12      02  SAL-TOLL           PIC 9(4).
13  WORKING-STORAGE SECTION.
14  77  LOOP-FLAG              PIC X(1) VALUE SPACE.
15      88  INIT               VALUE SPACE.
16      88  LOOP-END           VALUE "E".
17  77  CNT1                   PIC 9(2).
18  77  CNT2                   PIC 9(2).
19  01  .
20      02 IC-TOTAL            PIC 9(6) VALUE ZERO OCCURS 10.
21  77  TOTAL                  PIC 9(8) VALUE ZERO.
22  01  SECT-DATA.
23      02                     OCCURS 10.
24          03 SECT-NUM        PIC 9(5) VALUE ZERO OCCURS 10.
25  77  PREV-NUM               PIC 9(6) VALUE ZERO.
26  01  PRT-IC.
27      02  IC-HEADER          PIC X(1).
28      02                     PIC X(9) VALUE ":".
29      02  IC-SALES           PIC ZZZ,ZZ9.
30  01  PRT-TOTAL.
31      02                     PIC X(7) VALUE "TOTAL:".
32      02  TOTAL-SALES        PIC ZZ,ZZZ,ZZ9.
33  01  PRT-SECT.
34      02  PRT-IN             PIC X(1).
35      02                     PIC X(1) VALUE "-".
36      02  PRT-OUT            PIC X(1).
37      02                     PIC X(2) VALUE ":".
38      02  PR-NUM             PIC ZZ,ZZ9.
39  01  IC-NAME                PIC X(10) VALUE "ABCDEFGHIJ".
40  PROCEDURE DIVISION.
41  MAIN-PROC SECTION.
42      OPEN INPUT SALES-FILE.
43      PERFORM UNTIL LOOP-END
44         READ SALES-FILE AT END     SET LOOP-END TO TRUE
45                         NOT AT END PERFORM CNT-PROC
46         END-READ
47      END-PERFORM.
48      CLOSE SALES-FILE.
49      PERFORM PRINT-PROC.
50      STOP RUN.
51  CNT-PROC SECTION.
52      ADD SAL-TOLL TO IC-TOTAL(SAL-OUT)
53      
54  PRINT-PROC SECTION.
55      PERFORM VARYING CNT1 FROM 1 BY 1 UNTIL CNT1 > 10
56         MOVE IC-NAME(CNT1:1) TO IC-HEADER
57         MOVE IC-TOTAL(CNT1) TO IC-SALES
58         DISPLAY PRT-IC
59         
60      END-PERFORM.
61      MOVE TOTAL TO TOTAL-SALES.
62      DISPLAY PRT-TOTAL.
63      DISPLAY " ".
64      SORT SORT-FILE ON DESCENDING KEY SORT-DATA
65                     INPUT  PROCEDURE IS IN-PROC
66                     OUTPUT PROCEDURE IS OUT-PROC.
67  IN-PROC  SECTION.
68      PERFORM VARYING CNT1 FROM 1 BY 1 UNTIL CNT1 > 10
69         PERFORM VARYING CNT2 FROM 1 BY 1 UNTIL CNT2 > 10
70            MOVE CNT1 TO SORT-IN
71            MOVE CNT2 TO SORT-OUT
72            
73            RELEASE SORT-REC
74         END-PERFORM
75      END-PERFORM.
76  OUT-PROC SECTION.
77      SET INIT TO TRUE.
78      PERFORM VARYING CNT1 FROM 1 BY 1 UNTIL LOOP-END
79         RETURN SORT-FILE
80            AT END
81               SET LOOP-END TO TRUE
82            NOT AT END
83               IF SORT-DATA = ZERO OR
84                  (  ) THEN
85                  SET LOOP-END TO TRUE
86               ELSE
87                  MOVE IC-NAME(SORT-IN:1) TO PRT-IN
88                  MOVE IC-NAME(SORT-OUT:1) TO PRT-OUT
89                  MOVE SORT-DATA TO PRT-NUM
90                  DISPLAY PRT-SECT
91                  MOVE SORT-DATA TO PREV-NUM
92               END-IF
93         END-RETURN
94      END-PERFORM.

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

a〜c に関する解答群

ア ADD SECT-NUM(SAL-IN SAL-OUT)TO TOTAL

イ ADD 1 TO IC-TOTAL(CNT1)

ウ ADD 1 TO SECT-NUM(SAL-IN SAL-OUT)

エ ADD IC-TOTAL(CNT1)TO SECT-NUM(SAL-IN SAL-OUT)

オ ADD IC-TOTAL(CNT1)TO TOTAL

カ MOVE IC-TOTAL(CNT1)TO SORT-DATA

キ MOVE SECT-NUM(CNT1 CNT2) TO SORT-DATA

d に関する解答群

ア CNT1 > 10 AND PREV-NUM <= 10

イ CNT1 > 10 AND SORT-DATA < PREV-NUM

ウ CNT1 > 10 AND SORT-DATA <= PREV-NUM

エ CNT1 > 10 AND SORT-DATA >= PREV-NUM

オ SORT-IN > 10 AND SORT-OUT > 10

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

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

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

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


設問2 この道路の運営会社では,利用区間に応じた料金の割引きを検討している。 売上への影響を検証した上で,次の二つのプランのいずれかを採用することにした。 なるべく新しいデータで検証するため,ある期間だけプログラムを変更して, それぞれのプランを適用した場合の売上を表示することにした。 図3に変更後の表示形式を示す。次の表中の に入れる正しい答えを, 解答群の中から選べ。

プラン X:5 区間以上利用した場合は 20%,通行料を割り引く。

プラン Y:3 〜 6 区間利用した場合は 10%,7 区間以上利用した場合は 20%,通行料を割り引く。

A:        187,200
B:        514,700
     :
J:         95,400
TOTAL:  3,086,200  PLAN X:  2,899,400   PLAN Y:  2,814,990  

B-E: 1,125 E-B: 1,079 C-E: 996 :

   図3 割引プラン適用時の売上を追加表示する場合の表示例

         表 プログラムの変更内容

   処置         変更内容
行番号 25 と 26 の
間に追加
77  TOTAL-PLANX         PIC 9(8) VALUE ZERO.
77  TOTAL-PLANY         PIC 9(8) VALUE ZERO.
77  DISCOUNT-X          PIC 9V9.
77  DISCOUNT-Y          PIC 9V9.
行番号 32 と 33 の
間に追加
    02                 PIC X(11) VALUE "   PLAN X:".
    02  TOTAL-X        PIC ZZ,ZZZ,ZZ9.
    02                 PIC X(11) VALUE "   PLAN Y:".
    02  TOTAL-Y        PIC ZZ,ZZZ,ZZ9.

間に追加
IF SAL-IN < SAL-OUT THEN
    COMPUTE CNT1 = SAL-OUT - SAL-IN
ELSE
    COMPUTE CNT1 = SAL-IN - SAL-OUT
END-IF.
EVALUATE CNT1
    WHEN    MOVE  1.0  TO  DISCOUNT-X
                   MOVE  0.9  TO  DISCOUNT-Y
    WHEN    MOVE  0.8  TO  DISCOUNT-X
                   MOVE  0.9  TO  DISCOUNT-Y
    WHEN    MOVE  0.8  TO  DISCOUNT-X DISCOUNT-Y
    WHEN OTHER     MOVE  1.0  TO  DISCOUNT-X DISCOUNT-Y
END-EVALUATE.
COMPUTE TOTAL-PLANX = TOTAL-PLANX + SAL-TOLL * DISCOUNT-X.
COMPUTE TOTAL-PLANY = TOTAL-PLANY + SAL-TOLL * DISCOUNT-Y.
行番号 61 と 62 の
間に追加
MOVE TOTAL-PLANX TO TOTAL-X
MOVE TOTAL-PLANY TO TOTAL-Y

e に関する解答群

ア 行番号 47 と 48      イ 行番号 53 と 54

ウ 行番号 54 と 55      エ 行番号 60 と 61

f〜h に関する解答群

ア 1 THRU 2       イ 3       ウ 3 THRU 4

エ 3 THRU 5       オ 5       カ 5 THRU 6

キ 5 THRU 7       ク 7       ケ 7 THRU 9

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

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

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

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


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