情報処理技術者試験の過去問と解説なら「情報処理試験.jp」
[広告] 身体のケア
桜の情報開花予想千鳥ヶ淵隅田公園弘前公園魚の旬年賀はがき
コンサートワクワク学校アルバム大野智櫻井翔相葉雅紀二宮和也松本潤

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

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

〔プログラムの説明〕

A 〜 J の 10 駅を結ぶ路線をもつ鉄道において,利用者の入場駅,出場駅及び入場時刻が 1 日分記録された乗客ファイルを読み込み,各駅間の区間利用者数を集計して印字するプログラムである。

(1) 乗客ファイル( IN-FILE )は,次のレコード様式の順ファイルであり, 乗客 1 人の 1 回の利用に対して一つのレコードが作成される。

入場駅
2 けた
出場駅
2 けた
入場時刻
4 けた

@ 上り及び下り列車の利用者が順不同で格納されている。

A 入場時刻は,HHMM の形式で格納されている。 ここで,HH は 24 時間表現の時を表し,MM は分を表す。 なお,各駅は午前 6 時に開場し,午前 0 時に閉鎖する。 閉鎖中,乗客は駅及び列車内にとどまることはできない。

B 入場駅及び出場駅は,次のとおり,それぞれの駅に対応する番号 01 〜 10 として格納されている。 入場駅と出場駅は異なるものとする。

A 駅は 01,B 駅は 02,C 駅は 03,D 駅は 04,…,J 駅は 10

例: 6 時 55 分に B 駅から入場し,D 駅で出場した場合は,次のとおり記録される。

  02      04      0655 

(2) 印字様式は,次のとおりとする。


  TIME           A-B       B-C       C-D       D-E    …     I-J
  06:00 UP     ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9  …   ZZZ,ZZ9
        DOWN   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9  …   ZZZ,ZZ9
  07:00 UP     ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9  …   ZZZ,ZZ9
        DOWN   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9  …   ZZZ,ZZ9
   …
  23:00 UP     ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9  …   ZZZ,ZZ9
        DOWN   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9   ZZZ,ZZ9  …   ZZZ,ZZ9

@ TIME は,印字された時間帯の利用であることを表す。例えば,07 時 00 分〜

  07 時 59 分における利用ならば,07:00 の行に集計される。

A A-B から I-J の各列は区間を表す。 例えば,A-B は A 駅から B 駅までの区間を表す。

B UP は上り(A 駅から J 駅の方向)を,DOWN は下り( J 駅から A 駅の方向)を表す。

C 利用者数は,入場時刻を基にした経過時間及び乗車区間で集計する。

なお,各駅間の区間所要時間は 10 分とし,待ち時間や乗換えなどは考慮しない。 例えば,(1) の例の“ 6 時 55 分に B 駅から入場し,D 駅で出場した場合”であれば, 次の網掛け部分を 1 名が利用したとみなし,各要素にカウントする。 人数は 999,999 以下とする。

〔プログラム〕

(行番号)

 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD  IN-FILE.
 4  01  IN-REC       PIC X(8).
 5  FD  PR-FILE.
 6  01  PR-REC       PIC X(100).
 7  WORKING-STORAGE SECTION.
 8  01  W-IN-REC.
 9      02 IN-STATION   PIC 9(2).
10      02 OUT-STATION  PIC 9(2).
11      02 IN-TIME.
12         03 IN-HH        PIC 9(2).
13         03 IN-MM        PIC 9(2).
14  01  COUNT-TABLE.
15      02 UP-TABLE    OCCURS 18.
16         03 UP-PASSENGER    OCCURS 9 PIC 9(6) VALUE ZERO.
17      02 DOWN-TABLE  OCCURS 18.
18         03 DOWN-PASSENGER  OCCURS 9 PIC 9(6) VALUE ZERO.
19  77  READ-SW      PIC  X(1) VALUE SPACE.
20      88 AT-END    VALUE "E".
21  77  WAY          PIC S9(1).
22      88 UP-WAY    VALUE  1.
23      88 DOWN-WAY  VALUE -1.
24  77  TIME-IDX     PIC S9(2).
25  77  TIME-CNT     PIC S9(2).
26  77  SECT-IDX     PIC S9(2).
27  01  W-PR-HEADER.
28      02               PIC X(15) VALUE "TIME".
29      02               PIC X(50) VALUE
30         "A-B       B-C       C-D       D-E       E-F".
31      02               PIC X(35) VALUE
32         "F-G       G-H       H-I       I-J".
33  01  W-PR-REC.
34      02 PR-TIME.
35         03 PR-HH      PIC 9(2).
36         03 PR-MM      PIC X(4).
37      02 PR-WAY        PIC X(4).
38      02               OCCURS 9.
39         03               PIC X(3) VALUE SPACE.
40         03 PR-PASSENGER  PIC ZZZ,ZZ9.
41  PROCEDURE DIVISION.
42  MAIN-PROCEDURE.
43      OPEN INPUT IN-FILE OUTPUT PR-FILE.
44      PERFORM TEST BEFORE UNTIL AT-END
45         READ IN-FILE AT END SET AT-END TO TRUE
46         NOT AT END MOVE IN-REC TO W-IN-REC
47                    PERFORM COUNT-PASSENGER
48         END-READ
49      END-PERFORM.
50      PERFORM PRINT-DATA.
51      CL OS E IN-FILE PR-FILE.
52      STOP RUN.
53  COUNT-PASSENGER.
54      IF  THEN
55         SET UP-WAY   TO TRUE
56      ELSE
57         SET DOWN-WAY TO TRUE
58      END-IF.
59      COMPUTE TIME-IDX = IN-HH - 5.
60      MOVE IN-MM TO TIME-CNT.
61      PERFORM VARYING SECT-IDX FROM IN-STATION BY WAY
62              UNTIL SECT-IDX = OUT-STATION
63         IF UP-WAY THEN
64            ADD 1 TO UP-PASSENGER(TIME-IDX, SECT-IDX)
65         ELSE
66            ADD 1 TO DOWN-PASSENGER()
67         END-IF
68         COMPUTE TIME-CNT = TIME-CNT + 10
69         IF  THEN
70            COMPUTE TIME-IDX = TIME-IDX + 1
71            COMPUTE TIME-CNT = TIME-CNT - 60
72         END-IF
73      END-PERFORM.
74  PRINT-DATA.
75      WRITE PR-REC FROM W-PR-HEADER.
76      PERFORM VARYING TIME-IDX FROM 1 BY 1
77              UNTIL TIME-IDX > 18
78         COMPUTE PR-HH = TIME-IDX + 5
79         MOVE ":00" TO PR-MM
80         MOVE "UP"  TO PR-WAY
81         PERFORM VARYING SECT-IDX FROM 1 BY 1
82                 UNTIL SECT-IDX > 9
83            MOVE UP-PASSENGER(TIME-IDX, SECT-IDX)
84              TO PR-PASSENGER()
85         END-PERFORM
86         WRITE PR-REC FROM W-PR-REC
87         MOVE SPACE  TO PR-TIME
88         MOVE "DOWN" TO PR-WAY
89         PERFORM VARYING SECT-IDX FROM 1 BY 1
90                 UNTIL SECT-IDX > 9
91            MOVE DOWN-PASSENGER(TIME-IDX, SECT-IDX)
92              TO PR-PASSENGER()
93         END-PERFORM
94         WRITE PR-REC FROM W-PR-REC
95      END-PERFORM.

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

a,c に関する解答群

ア IN-STATION < 5     イ IN-STATION < OUT-STATION

ウ IN-STATION > 5     エ IN-STATION > OUT-STATION

オ TIME-CNT = 60      カ TIME-CNT >= 60

キ TIME-IDX = 0       ク TIME-IDX NOT = 0

b,d に関する解答群

ア SECT-IDX              イ SECT-IDX, TIME-IDX

ウ TIME-IDX - 1, SECT-IDX    エ TIME-IDX + 1, SECT-IDX

オ TIME-IDX             カ TIME-IDX, SECT-IDX - 1

キ TIME-IDX, SECT-IDX + 1    ク TIME-IDX, SECT-IDX

情報処理試験.jp


設問2 区間利用者数をより正確に集計するため,各駅間の所要時間を分単位で 保持するテーブルを用意し,そのテーブルから経過時間を求めるよう,プログラムを変更したい。 次の表中の に入れる正しい答えを,解答群の中から選べ。

処置 プログラムの変更内容
行番号 40 と 41 の間に追加 01 TIME-TABLE.
  02 TIME-DATA PIC X(18) VALUE "080611071009081013".
  02 SECT-MM REDEFINES TIME-DATA PIC 9(2) OCCURS 9.
行番号 64 と 65 の間に追加 COMPUTE TIME-CNT =
行番号 66 と 67 の間に追加 COMPUTE TIME-CNT =
行番号 68 を削除  

解答群

ア 60 - SECT-MM(SECT-IDX)

イ 60 - SECT-MM(TIME-IDX)

ウ TIME-CNT + SECT-MM(SECT-IDX)

エ TIME-CNT + SECT-MM(SECT-IDX + 1)

オ TIME-CNT + SECT-MM(SECT-IDX - 1)

カ TIME-CNT + SECT-MM(TIME-IDX)

キ TIME-CNT + SECT-MM(TIME-IDX + 1)

ク TIME-CNT + SECT-MM(TIME-IDX - 1)


[←前の問題] [次の問題→] [問題一覧表] [分野別] [情報処理試験.jpのTOP]