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

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

〔プログラムの説明〕

社員別業務別の1か月分の作業日報ファイルを読み込み, 社員別業務別の作業時間月計ファイルと社員別の超過時間月計ファイルを作成するプログラムである。

(1) 作業日報ファイル NIPPO-FILE のレコード様式は,次のとおりである。

社員コード
6 けた
作業日
2 けた
作業日種別
1 けた
業務コード
3 けた
作業時間
2 けた

@ 作業日種別の値は,0 のときは平日出勤日を示し,1 のときは休日出勤日を示す。

A 作業時間は,1 時間単位とする。

B 平日出勤日1日の作業時間の合計は 8 時間以上である。

C 平日出勤日1日の作業時間のうち 8 時間を超えた分と, 休日出勤日の作業時間を超過時間とみなす。

D 各作業日の作業時間の合計は 24 時間以内である。

E 同一社員コードのレコードに現れる業務コードは,100 種類以下である。

F 1人の社員が1日の間に複数の業務を行ったときは,行った業務ごとにレコードがある。

G 1人の社員が連続して複数日にまたがって同一業務を行ったときは, 作業日ごとにレコードがある。

H 作業日報ファイルは,社員コード及び作業日の昇順に整列された順ファイルである。

I ファイルの内容は,すべて正しいものとする。

(2) 作業時間月計ファイル SAGYO-FILE のレコード様式は,次のとおりである。

社員コード
6 けた
業務コード
3 けた
作業時間
3 けた

社員ごとに業務ごとの作業時間を集計した順ファイルである。

(3) 超過時間月計ファイル CHOKA-FILE のレコード様式は,次のとおりである。

社員コード
6 けた
超過時間
3 けた

@ 社員ごとに各作業日の超過時間を求め,1 か月分を集計した順ファイルである。

A 集計した超過時間が 0 の場合でも,超過時間月計ファイルに書き出す。

(4) 処理の手順は,次のとおりである。

@ 社員ごとに1日分の作業時間を求める。

A 社員ごとに業務ごとの作業時間を集計する。

B 社員ごとに @ で求めた1日分の作業時間のうち, 平日出勤日のときは 8 時間を超えた分を超過時間とし, 休日出勤日のときはすべての作業時間を超過時間として合計する。

C 社員ごとに A で求めた業務ごとの作業時間を,作業時間月計ファイルに書き出す。

D 社員ごとに B で求めた超過時間の合計を,超過時間月計ファイルに書き出す。

(5) このプログラムは未完成で,幾つかの文を挿入したり条件式を修正したりする必要がある。

〔プログラム〕

(行番号)
 1     DATA              DIVISION.
 2     FILE              SECTION.
 3     FD  NIPPO-FILE.
 4     01  NIPPO-REC.
 5         03  N-SHAIN-CODE    PIC   X(06).
 6         03  N-SAGYO-BI      PIC   9(02).
 7         03  N-SHUBETSU      PIC   9(01).
 8         03  N-GYOMU-CODE    PIC   X(03).
 9         03  N-SAGYO-JIKAN   PIC   9(02).
10     FD  SAGYO-FILE.
11     01  SAGYO-REC.
12         03  S-SHAIN-CODE    PIC   X(06).
13         03  S-GYOMU-CODE    PIC   X(03).
14         03  S-SAGYO-JIKAN   PIC   9(03).
15     FD  CHOKA-FILE.
16     01  CHOKA-REC. 
17         03  C-SHAIN-CODE    PIC   X(06).
18         03  C-CHOKA-JIKAN   PIC   9(03).
19     WORKING-STORAGE   SECTION.
20     01  EOF                 PIC   X(01). 
21     01  SHAIN-CODE          PIC   X(06).
22     01  SAGYO-BI            PIC   9(02). 
23     01  SHUBETSU            PIC   9(01).
24     01  SAGYO-JIKAN-KEI     PIC   9(03).
25     01  GYOMU-SU            PIC   9(03).
26     01  GYOMU.
27         03  FILLER    OCCURS 100 INDEXED BY N.
28             05  GYOMU-CODE    PIC   X(03).
29             05  SAGYO-JIKAN   PIC   9(03).
30     PROCEDURE         DIVISION. 
31     MAIN-RTN.
32        OPEN INPUT NIPPO-FILE 
33             OUTPUT CHOKA-FILE SAGYO-FILE.
34        MOVE SPACE TO EOF.
35        PERFORM READ-RTN.
36        PERFORM UNTIL EOF = "E"
37           INITIALIZE CHOKA-REC
38           INITIALIZE GYOMU
39           MOVE N-SHAIN-CODE TO SHAIN-CODE
40           PERFORM UNTIL EOF = "E" OR 
41                         N-SHAIN-CODE NOT = SHAIN-CODE
42              MOVE N-SAGYO-BI TO SAGYO-BI 
43              MOVE N-SHUBETSU TO SHUBETSU 
44              PERFORM UNTIL N-SAGYO-BI NOT = SAGYO-BI
45                 COMPUTE SAGYO-JIKAN-KEI = 
46                         SAGYO-JIKAN-KEI + N-SAGYO-JIKAN
47                 PERFORM VARYING N FROM 1 BY 1
48                         UNTIL GYOMU-CODE(N) = N-GYOMU-CODE
49                    CONTINUE
50                 END-PERFORM
51                 IF N > GYOMU-SU THEN
52                    MOVE N-GYOMU-CODE TO GYOMU-CODE(N)
53                    SET GYOMU-SU TO N
54                 END-IF
55                 COMPUTE SAGYO-JIKAN(N) = 
56                         SAGYO-JIKAN(N) + N-SAGYO-JIKAN
57              END-PERFORM
58              IF SHUBETSU = 0 THEN
59                 COMPUTE C-CHOKA-JIKAN = 
60                         C-CHOKA-JIKAN + SAGYO-JIKAN-KEI - 8
61              ELSE 
62                 COMPUTE C-CHOKA-JIKAN = 
63                         C-CHOKA-JIKAN + SAGYO-JIKAN-KEI
64              END-IF
65           END-PERFORM
66           PERFORM WRITE-RTN
67        END-PERFORM.
68        CL OS E NIPPO-FILE CHOKA-FILE SAGYO-FILE.
69        STOP RUN.
70     READ-RTN.
71        READ NIPPO-FILE AT END
72           MOVE "E" TO EOF
73        END-READ.
74     WRITE-RTN.
75        MOVE SHAIN-CODE TO C-SHAIN-CODE S-SHAIN-CODE.
76        PERFORM VARYING N FROM 1 BY 1
77                UNTIL N = GYOMU-SU
78           MOVE GYOMU-CODE(N) TO S-GYOMU-CODE
79           MOVE SAGYO-JIKAN(N) TO S-SAGYO-JIKAN
80           WRITE SAGYO-REC
81        END-PERFORM.
82        WRITE CHOKA-REC.

基本情報技術者試験


設問 プログラムを完成させるためには,プログラム中の条件式を 表1に示す三つの条件式で置き換えるとともに,表2に示す三つの文を プログラムに挿入する必要がある。 表1,表2の に 入れる置換位置及び挿入位置を,解答群の中から選べ。 ただし,挿入した場合でも,プログラムの行番号は付け直さないものとする。

  表1 置き換える条件式

置換位置 条件式
N > GYOMU-SU
N > GYOMU-SU OR GYOMU-CODE(N) = N-GYOMU-CODE
EOF = "E" OR N-SHAIN-CODE NOT = SHAIN-CODE OR
N-SAGYO-BI NOT = SAGYO-BI

  表2 挿入する文

挿入位置
PERFORM READ-RTN
MOVE ZERO TO SAGYO-JIKAN-KEI
MOVE ZERO TO GYOMU-SU

a 〜 c に関する解答群

ア 行番号 36    イ 行番号 40,41    ウ 行番号 44

エ 行番号 48    オ 行番号 51      カ 行番号 58

キ 行番号 77

d 〜 f に関する解答群

ア 行番号 36 と 37 の間    イ 行番号 41 と 42 の間

ウ 行番号 44 と 45 の間    エ 行番号 48 と 49 の間

オ 行番号 49 と 50 の間    カ 行番号 56 と 57 の間

キ 行番号 64 と 65 の間    ク 行番号 66 と 67 の間

ケ 行番号 77 と 78 の間    コ 行番号 80 と 81 の間

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

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

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

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

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

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


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