東京理科大学 infoserv[更新日]2000.10.23


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

〔プログラムの説明〕

システムにログインした利用者番号,日時などを 1 か月分記録したログファイルを 読んで,利用者番号別にログイン回数を集計し,利用回数ファイルに出力する。

(1) ログファイルのレコード様式は,次のとおりである。

利用者番号

10 けた

ログイン日

8 けた

ログイン時刻

6 けた

その他

26 けた

  このファイルは,利用者番号, ログイン日及びログイン時刻の昇順に整列されている。

  ログイン日は,4 けたの西暦年,2 けたの月, 2 けたの日で構成されている。

例:2000 年 10 月 15 日の場合は,20001015 である。

  ログイン時刻は,2 けたの時(24 時制), 2 けたの分,2 けたの秒で構成されている。

例:午後 3 時 50 分 20 秒の場合は,155020 である。

(2) 利用回数ファイルのレコード様式は,次のとおりである。 利用回数は,3 けたを超えないものとする。

利用者番号

10 けた

利用回数

3 けた

〔プログラム〕

(行番号)

01 DATA DIVISION.
02 FILE SECTION.
03 FD  LOG-FILE.
04 01  LOG-REC.
05     02  LOG-USER-NO           PIC  X(10). 
06     02  LOG-DAY               PIC  9(08).
07     02  LOG-TIME              PIC  9(06).
08     02                        PIC  X(26).
09 FD  USER-FILE.
10 01  USER-REC.
11     02  USER-NO               PIC  X(10).
12     02  USER-COUNT            PIC  9(03).
13 WORKING-STORAGE SECTION.
14 01  LOG-FILE-FLG              PIC  X(01) VALUE SPACE.
15 01  WORK-COUNT                PIC  9(03) VALUE ZERO.
16 PROCEDURE DIVISION.
17 INIT-RTN.
18     OPEN INPUT LOG-FILE  OUTPUT USER-FILE.
19     READ LOG-FILE AT END
20        MOVE "E" TO LOG-FILE-FLG
21     NOT AT END
22        MOVE LOG-USER-NO TO USER-NO
23     END-READ.
24     PERFORM MAIN-RTN UNTIL LOG-FILE-FLG = "E".
25     CLOSE LOG-FILE USER-FILE.
26     STOP RUN.
27 MAIN-RTN.
28     IF LOG-USER-NO = USER-NO THEN
29        COMPUTE WORK-COUNT = WORK-COUNT + 1
30     ELSE
31        MOVE WORK-COUNT TO USER-COUNT
32        WRITE USER-REC
33        MOVE 1 TO WORK-COUNT
34        MOVE LOG-USER-NO TO USER-NO
35     END-IF.
36     READ LOG-FILE AT END
37        MOVE "E" TO LOG-FILE-FLG
38        MOVE WORK-COUNT TO USER-COUNT
39        WRITE USER-REC
40     END-READ.
設問   次に示す機能を追加するために,プログラムを変更する。 変更内容を記述した表中の に入れる正しい答えを, 解答群の中から選べ。解答は,重複して選んでもよい。

同一利用者が 1 か月に何日ログインしたかを集計するため,同一利用者が 1 日に 複数回ログインしても利用日数を 1 とみなす方法で,利用した日数も集計することになった。 このため,プログラム仕様のうち,利用回数ファイルのレコード様式を次のように変更する。

利用者番号

10 けた

利用回数

3 けた

利用日数

2 けた

表 機能追加のための修正内容

処理

行番号 12 の直後に追加 02 USER-DAY-COUNT PIC 9(02).
行番号 15 の直後に追加 01 WORK-DAY       PIC 9(08).
01 WORK-DAY-COUNT   PIC 9(02) VALUE ZERO.
行番号 22 の直後に追加
行番号 29 の直後に追加 IF THEN
  MOVE LOG-DAY TO WORK-DAY
  
END-IF

行番号 31 の直後に追加

MOVE LOG-DAY TO WORK-DAY
MOVE ZERO TO WORK-DAY-COUNT

行番号 38 の直後に追加

a,c 〜 e に関する解答群

ア COMPUTE USER-DAY-COUNT = WORK-DAY-COUNT + 1

イ COMPUTE WORK-DAY-COUNT = WORK-DAY-COUNT + 1

ウ MOVE LOG-DAY TO WORK-DAY

エ MOVE LOG-USER-NO TO USER-NO

オ MOVE WORK-DAY-COUNT TO USER-DAY-COUNT

カ MOVE WORK-COUNT TO USER-COUNT

キ MOVE ZERO TO WORK-DAY

ク MOVE ZERO TO WORK-DAY-COUNT

b に関する解答群

ア LOG-DAY NOT = WORK-DAY

イ LOG-DAY = WORK-DAY

ウ LOG-DAY < WORK-DAY

エ LOG-USER-NO NOT = USER-NO

オ LOG-USER-NO < USER-NO

カ LOG-USER-NO > USER-NO


東京理科大学 infoserv 戻る 次頁:問13