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

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

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

〔プログラムの説明〕

 ある遊園地では,IC カードを利用した精算システムを導入した。入園時に, 入園者から入園料を受け取ると,入園者番号を記録した IC カードを渡し,入園者番号と 年齢層の情報を入園者ファイルに格納する。各施設では,提示された IC カードから 入園者番号を読み取り,施設利用実績をイベントファイルに格納する。退園時に, 入園者から IC カードが返却されたときに,施設利用料金を一括で徴収する。

 このプログラムは,入園者ファイル及びイベントファイルに格納されたデータを読み込み, 入園者に関する情報を集計して表示する。

(1) 入園者ファイルは,図1に示すレコード様式の,入園者番号を主キーとする索引ファイルである。 ファイルは,営業日ごとに作成する。

 入園者番号
  4桁
 年齢層コード
  1桁

  図1 入園者ファイルのレコード様式
@ 入園者番号は,営業日ごとに一意となる,1 から始まる4桁の数字である。

A 年齢層コードには,4 〜 12 歳は 1 ,13 〜 18 歳は 2 ,19 〜 29 歳は 3 ,30 〜 49 歳は 4 , 50 歳以上は 5 を格納する。4歳未満は入園料及び遊戯施設利用料金が無料となるので, IC カードは発行せず,入園者ファイルにも格納しない。

(2) イベントファイルは,図2に示すレコード様式の順ファイルである。 入園者の IC カード利用状況(以下,イベントという)を格納する。ファイルは,営業日ごとに作成する。

 入園者番号
  4桁
 イベントコード
  2桁
 時刻
  6桁
 金額
  6桁

    図2 イベントファイルのレコード様式

@ イベントコードには,発生したイベントに応じて,表1に示すイベントコードを格納する。

    表1 イベントとイベントコード
    イベント イベントコード   補足
入園   01 IC カード発行
退園   02 IC カード返却
観覧車   03 遊戯施設利用
ゴーカート   04 遊戯施設利用
ジェットコースター   05 遊戯施設利用
メリーゴーランド   06 遊戯施設利用
ウォータースライダー   07 遊戯施設利用
お化け屋敷   08 遊戯施設利用
レストラン   09   飲食
ショップ   10   購入

A 時刻には,イベントが発生した時刻の時,分,秒を 24 時間表記で格納する。 時系列で格納するので,レコードは時刻の昇順になっている。

 なお,この遊園地は 10 時に開園し,全ての入園者は 20 時になるまでに退園する。 20 時台の時刻が格納されることはない。

B 金額には,該当するイベントを利用した際の金額を格納する。 なお,入退園(イベントコード 01,02 )の場合は,0 を格納する。

C 一旦退園した入園者が,その日のうちに同じ入園者番号で再入園することはない。

(3) 集計結果の表示例を図3に示す。

 TOTAL GUESTS 2012
 STAY GUESTS
          ----+----1----+----2----+----3----+----4----+----5  
 10:00-59 @@@**++==-
 10:00-59 @@@@***++==-
      :
 19:00-59 *+++=

   図3 集計結果の表示例

@ TOTAL GUESTS には,入園者数を表示する。1日の入園者数が 5,000 人を超えることはない。

A STAY GUESTS には,左端に表示した時間帯の滞在者数を,年齢層別に棒グラフで表示する。 例えば,10 時ちょうどに入園し,11 時ちょうどに退園した者は,10 時台と 11 時台の滞在者として数える。

B 棒グラフを構成する各記号は,表2に示すとおり滞在者の年齢層と対応している。 記号一つは 100 人を表し,100 人未満の端数は切り捨てる。

  表2 年齢層と対応する記号
  年齢層  記号
   4 〜 12 歳 @
  13 〜 18 歳 *
  19 〜 29 歳 +
  30 〜 49 歳 =
  50 歳以上  -

〔プログラム〕

(行番号)

 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD GUEST.
 4  01 G-REC.
 5     02 G-NO            PIC X(4).
 6     02 G-AGE           PIC 9(1).
 7  FD EVENT.
 8  01 E-REC.
 9     02 E-NO            PIC X(4).
10     02 E-CODE          PIC 9(2).
11        88 E-ENTER         VALUE 1.
12        88 E-EXIT          VALUE 2.
13        88 E-FAC           VALUE 3 THRU 8.
14        88 E-MEAL          VALUE 9.
15        88 E-SHOP          VALUE 10.
16     02 E-TIME.
17        03 E-HH            PIC 9(2).
18        03 E-MMSS          PIC 9(4).
19     02 E-SALES         PIC 9(6).
20  WORKING-STORAGE SECTION.
21  77 READ-FLAG       PIC X(1) VALUE SPACE.
22     88  EOF            VALUE "E".
23  77 CR-HH           PIC 9(2) VALUE 10.
24  77 I               PIC 9(2).
25  77 J               PIC 9(2).
26  77 MARK-CNT        PIC 9(2).
27  77 MARK-POS        PIC 9(2).
28  77 TOTAL-GUEST     PIC 9(4) VALUE 0.
29  77 TOTAL-GUEST-X  REDEFINES TOTAL-GUEST PIC X(4).
30  01 STAY-GUEST.
31     02 STAY-CNT        PIC 9(4) OCCURS 5 VALUE ZERO.
32  01 PRT-GUEST.
33     02 PRT-TIME        OCCURS 10.
34        03 PRT-AGE         PIC 9(4) OCCURS 5 VALUE ZERO.
35  01 HD-SCALE     PIC X(50)VALUE
36       "----+----1----+----2----+----3----+----4----+----5".
37  01 LHEADER.
38     02 LHD-HH       PIC 9(2).
39     02              PIC X(7) VALUE ":00-59".
40     02 LHD-MARK     PIC X(50).
41  01 AGE-MARK.
42     02 KIDS-M       PIC X(50) VALUE ALL "@".
43     02 STUDENT-M    PIC X(50) VALUE ALL "*".
44     02 YOUNG-M      PIC X(50) VALUE ALL "+".
45     02 ADULT-M      PIC X(50) VALUE ALL "=".
46     02 OLD-M        PIC X(50) VALUE ALL "-".
47  01 REDEFINES AGE-MARK.
48     02 MARK         PIC X(50) OCCURS 5.
49  PROCEDURE DIVISION.
50  MAIN-PROC.
51      OPEN INPUT GUEST EVENT.
52      PERFORM UNTIL EOF
53         READ EVENT
54            AT END
55               SET EOF TO TRUE
56            NOT AT END
57              IF CR-HH NOT = E-HH THEN
58                 PERFORM VARYING CR-HH FROM CR-HH BY 1
59                         UNTIL CR-HH = E-HH
60                     
61                 END-PERFORM
62              END IF
63              PERFORM SUM-PROC
64         END READ
65      END PERFORM.
66      CLOSE GUEST EVENT.
67      PERFORM PRT-PROC.
78      STOP RUN.
69  SUM-PROC.
70      MOVE ENO TO G-NO.
71      READ GUEST.
72      EVALUATE TRUE
73         WHEN E-ENTER
74            ADD 1 TO    
75         WHEN E-EXIT
76            SUBTRACT 1 FROM STAY-CNT(G-AGE)
77      END-EVALUATE.
78  PRT-PROC.
79      DISPLAY "TOTAL GUESTS  " TOTAL-GUEST-X.
80      DISPLAY "STAY GUESTS".
81      DISPLAY "         " HD-SCALE.
82      PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
83         MOVE 1 TO MARK-POS
84         COMPUTE LHD-HH = I + 9
85         MOVE SPACE TO LHD-MARK
86         PERFORM VARYING J FROM 1 BY 1 UNTIL J > 5
87            COMPUTE MARK-CNT = PRT-AGE(I, J) / 100
88            IF MARK-CNT > 0 THEN
89               MOVE MARK(J)(1:MARK-CNT) TO LHD-MARK(MARK-POS:)
90               
91            END-IF
92         END-PERFORM
93         DISPLAY LHEADER
94      END-PERFORM.

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

a に関する解答群

ア MOVE STAY-CNT(CR-HH) TO PRT-AGE(CR-HH - 8, E-HH)

イ MOVE STAY-CNT(CR-HH - 8) TO PRT-TIME(CR-HH)

ウ MOVE STAY-GUEST TO PRT-TIME(CR-HH - 8)

エ MOVE ZERO TO PRT-AGE(CR-HH - 8, CR-HH)

b 〜 d に関する解答群

ア CR-HH     イ I

ウ J     エ PRT-AGE(CR-HH - 9, G-AGE)

オ PRT-AGE(G-AGE, CR-HH - 9)     カ STAY-CNT(CR-HH)

キ STAY-CNT(G-AGE)     ク TOTAL-GUEST

e に関する解答群

ア ADD J TO MARK-CNT

イ ADD J TO MARK-POS

ウ ADD MARK-CNT TO MARK-POS

エ ADD MARK-POS TO MARK-CNT

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

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

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

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

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

基本情報技術者試験


設問2 各遊戯施設の延べ利用者数を集計し,図4に示すグラフを追加表示するように プログラムを変更した。表3中の に入れる正しい答えを, 解答群の中から選べ。

〔グラフの説明〕

(1) 左端に表示したイベントコードに対応する遊戯施設を利用した延べ人数を 表示する。記号 # 一つは 100 人を表し, 100 人未満の端数は切り捨てる。 一つの遊戯施設の延べ利用者数が 5,000 人を超えることはない。

(2) 延べ利用者数が 100 人未満の遊戯施設の行は表示しない。

 RECREATIONAL FACILITIES 
----+----1----+----2----+----3----+----4----+----5   03: ################ 04: ####### : 08: ##########

   図4 遊戯施設利用状況の表示例

   表3 プログラムの変更

   処置           変更内容
行番号 48 と 49 の間
に追加
01 .
   02 FAC-CNT     PIC 9(4) OCCURS 6 VALUE ZERO.
01 FAC-HEADER.
   02 FAC-N0      PIC 9(2).
   02             PIC X(2) VALUE ": ".
01 FAC-MARK    PIC X(50) VALUE ALL "#".
行番号 76 と 77 の間
に追加
WHEN E-FAC
  
行番号 94 の後ろに
追加
    DISPLAY "RECREATIONAL FACILITIES".
    DISPLAY "    " HD-SCALE.
    PERFORM 
       COMPUTE MARK-CNT = FACT-CNT(FACT-NO - 2) / 100
       IF MARK-CNT NOT = O THEN 
          DISPLAY FAC-HEADER FAC-MARK(1:MARK-CNT)
       END-IF
    END-PERFORM.

f に関する解答群

ア ADD 1 TO FAC-CNT(E-CODE)

イ ADD 1 TO FAC-CNT(E-CODE - 2)

ウ ADD G-AGE TO FAC-CNT(E-CODE)

エ ADD G-NO TO FAC-CNT(E-CODE)

オ ADD STAY-CNT(G-AGE) TO FAC-CNT(E-CODE)

gに関する解答群

ア 6 TIMES

イ UNTIL FAC-NO > 6 AND MARK-CNT > 50

ウ UNTIL FAC-NO > 6 0R MARK-CNT > 50

エ VARYING FAC-NO FROM 1 BY 1 UNTIL FACT-NO > 6

オ VARYING FAC-NO FROM 3 BY 1 UNTIL FACT-NO > 8

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

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


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