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

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

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

 

〔プログラムの説明〕

 Z社では,毎年実施している従業員の健康診断を今年も実施した。 健康診断の結果は,過去 10 回分が健康診断マスタファイルに記録されている。 このプログラムは,今回の健康診断の結果が記録された結果ファイルを読み込み, 健康診断マスタフアイルに反映する。

 

(1) 健康診断マスタファイルは,図1に示すレコード様式の順ファイルである。

 


図1 健康診断マスタファイルのレコード様式

 

@ 全ての従業員に対するレコードが,従業員番号の昇順に格納される。

A 結果履歴には,当該従業員の過去 10 回分の健康診断の結果が,受診日の降順に格納される。 受診回数が 10 回に満たない場合,残りの結果履歴には全てゼロが設定される。

B 受診日には,年,月,日が,それぞれ4桁,2桁,2桁の西暦で格納される。

C 身長(cm),体重(kg),最高血圧(mmHg,最低血圧(mmHg)には,それぞれの数値が格納される。 身長と体重は小数点以下1桁までが格納される。胸部X線には,所見がない場合は 0 が, 所見がある場合は 1 が格納される。

 

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


結果ファイルのレコード様式

 

@ 結果ファイルの先頭レコードとして,様式1のレコードが1件だけ格納される。 受診日には,年,月,日が,それぞれ4桁,2桁,2桁の西暦で格納される。 受診日は,健康診断マスタファイルに記録されているどの受診日よりも新しい。

A 2件日以降のレコードとして,受診した従業員の様式2のレコードが順不同で 格納される。受診していない従業員に対するレコードは存在しない。

 

〔プログラム〕
(行番号)
 1  DATA DIVISION.
 2  FILE SECTION.
 3  SD SORT-FILE.
 4  Ø1 SORT-REC.
 5     Ø2 SORT-NO        PIC 9(6).
 6     Ø2 SORT-ELM       PIC X(15).
 7  FD MST-FILE.
 8  Ø1 MST-REC.
 9     Ø2 MST-NO         PIC 9(6).
1Ø     Ø2 MST-HISTORY    OCCURS 1Ø.
11        Ø3 MST-DATE       PIC 9(8)
12        Ø3 MST-ELM.
13           Ø4 MST-HEIGHT     PIC 9(3)V9(1).
14           Ø4 MST-WEIGHT     PIC 9(3)V9(1).
15           Ø4 MST-HIGHPRES   PIC 9(3).
16           Ø4 MST-LOWPRES    PIC 9(3).
17           Ø4 MST-XRAY       PIC 9(1).
18  FD RSLT-FILE.
19  Ø1 FIRST-REC.
2Ø     Ø2 RSLT-DATE      PIC 9(8).
21     Ø2                PIC X(13).
22  Ø1 RSLT-REC       PIC X(21).
23  WORKING-STORAGE SECTION.
24  77 CNT          PIC 9(2).
25  77 NEW-DATE     PIC 9(8).
26  77 RSLT-FLAG    PIC X(1) VALUE SPACE.
27     88 RSLT-EOF     VALUE "E".
28  77 SORT-FLAG    PIC X(1) VALUE SPACE.
29     88 SORT-EOF     VALUE "E".
3Ø  PROCEDURE DIVISION.
31  MAIN-PROC.
32       OPEN I-O MST-FILE INPUT RSLT-FILE.
33       READ RSLT-FILE.
34        .
35       SORT SORT-FILE ASCENDING KEY SORT-NO
36          INPUT  PROCEDURE IS REL-PROC
37          OUTPUT PROCEDURE IS RET-PROC.
38       CLOSE MST-FILE RSLT-FILE.
39       STOP RUN.
4Ø  REL-PROC.
41       PERFORM UNTIL RSLT-EOF
42          READ RSLT-FILE AT END     SET RSLT-EOF TO TRUE
43                         NOT AT END 
44          END-READ
45       END-PERFORM.
46  RET-PROC.
47       PERFORM UNTIL SORT-EOF
48          RETURN SORT-FILE AT END     SET SORT-EOF TO TRUE
49                           NOT AT END PERFORM MATCHING-PROC
5Ø          END-RETURN
51       END-PERFORM.
52  MATCHING-PROC.
53       READ MST-FILE.
54       PERFORM TEST BEFORE UNTIL 
55          READ MST-FILE END-READ
56       END-PERFORM.
57       PERFORM TEST BEFORE VARYING CNT  UNTIL CNT = Ø
58          MOVE MST-HISTORY(CNT) TO MST-HISTORY(CNT + 1)
59       END-PERFORM.
6Ø       MOVE NEW-DATE TO MST-DATE(1).
61       MOVE SORT-ELM TO MST-ELM(1).
62       REWRITE MST-REC.

 

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

 

a,b に関する解答群 ア MOVE RSLT-DATE TO NEW-DATE

イ MOVE ZERO TO ONT

ウ MOVE ZERO TO NEW-DATE

エ PERFORM RET-PROC

オ RELEASE SORT-REC

カ RELEASE SORT-REC FROM RSLT-REC

 

c に関する解答群 ア MST-NO = SORT-NO       イ MST-NO < SORT-NO

ウ MST-NO > SORT-NO       エ MST-NO NOT = SORT-NO

 

d に関する解答群 ア FROM Ø BY 1       イ FROM 9 BY -1

ウ FROM 1Ø BY -1       エ FROM CNT BY 1

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

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

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

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

基本情報技術者試験


設問2  プログラムを変更して,健康診断の結果を健康診断マスタファイルに反映するときに, 全ての従業員の確認結果を図3に示すように表示する。表1中の に入れる正しい答えを,解答群の中から選べ。

 


図3 確認結果の表示例

 

〔確認結果の表示についての説明〕

 次に該当する従業員は,従業員番号に続けて該当する文字列を表示する。

 なお,複数該当する場合は,その全てを表示する。

@ 今回受診していない場合は NO-DATA

A 今回と前回の体重を比較して,4kg 以上の増減がある場合は WEIGHT

B 今回の最高血圧が 140mmHg 以上(高血圧症状), 又は 90 mmHg 以下(低血圧症状)である場合は BLOOD-PRESSURE

C 今回の胸部X線の診断で所見がある場合は XRAY

 

              表1 プログラムの変更内容
     処置             変更内容 
行番号 29 と 30 の間
に追加 
77 MST-FLAG     PIC X(1)VALUE SPACE.
   88 MST-EOF      VALUE "E".
Ø1 DISP-WK      PIC X(3Ø). 

に追加 
PERFORM UNTIL MST-EOF
   READ MST-FILE AT END     SET MST-EOF TO TRUE
                 NOT AT END DISPLAY MST-NO ": NO-DATA"
   END-READ
END-PERFORM.
行番号 54 と 55 の間
に追加
    DISPLAY MST-NO ": NO-DATA"
行番号 61 と 62 の間
に追加
.
MOVE SPACE TO DISP-WK.
IF MST-DATE(2) NOT = ZERO AND
   () THEN
   MOVE " WEIGHT" TO DISP-WK(CNT:)
   ADD 7 TO CNT
END IF.
IF MST-HIGHPRES(1) >= 14Ø OR
   MST-HIGHPRES(1) <= 9Ø THEN
   MOVE " BLOOD-PRESSURE" TO DISP-WK(CNT:)
   ADD 15 TO CNT
END-IF.
IF MST-XRAY(1) = 1 THEN
   MOVE " XRAY" TO DISP-WK(CNT:)
END-IF.
DISPLAY MST-NO ":" DISP-WK.

 

e に関する解答群 ア 行番号 34 と 35 の間       イ 行番号 45 と 46 の間

ウ 行番号 51 と 52 の間       エ 行番号 52 と 53 の間

 

f に関する解答群 ア MOVE 1 TO CNT

イ MOVE 1Ø TO CNT

ウ MOVE MST-DATE(1) TO NEW-DATE

エ MOVE ZERO TO NEW-DATE

 

g に関する解答群 ア MST-WEIGHT(1) >= MST-WEIGHT(2) + 4 OR
  MST-WEIGHT(1) <= MST-WEIGHT(2) - 4

イ MST-WEIGHT(1) >= MST-WEIGHT(CNT) + 4 OR
  MST-WEIGHT(1) <= MST-WEIGHT(CNT) - 4

ウ MST-WEIGHT(1Ø) >= MST-WEIGHT(9) + 4 OR
  MST-WEIGHT(1Ø) <= MST-WEIGHT(9) - 4

エ MST-WEIGHT(1Ø) >= MST-WEIGHT(CNT) + 4 OR
  MST-WEIGHT(1Ø) <= MST-WEIGHT(CNT) - 4

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

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

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


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