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

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

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

 

〔プログラムの説明〕
 Z社では,従業員向けの福利厚生施設として,6部屋の客室を有する保養所を運営している。 1部屋には4人まで宿泊可能で,宿泊希望者は1〜6までの部屋数を指定できる。 宿泊日数は1泊だけである。このプログラムは宿泊予約を管理するサブプログラムであり, 予約情報を受け取り,予約結果を呼出し元へ返す。

(1) このプログラムのパラメタは二つで,各パラメタの様式は,図1のとおりである。


図1 パラメタの様式

 

@ 予約番号には,予約希望に対して一意に割り振られた 000001 〜 999999 の番号が格納されている。
A 希望日には,宿泊する日の年,月,日が,それぞれ西暦の4桁,2桁,2桁で格納されている。
B 部屋数には,希望する部屋数が格納されている。
C 結果には,希望どおりに予約できた場合は 0 を,できなかった場合は 9 を設定する。
D 空き部屋数には,希望どおりに予約できなかった場合に,希望日の空き部屋数を設定する。 例えば,3部屋を希望している場合に2部屋しか空きがなかったときは,2を設定する。 希望どおりに予約できた場合は,0 を設定する。
E 予約情報に誤りはないものとする。

(2) 予約ファイルは, 日付を主キーとする図2に示すレコード様式の索引ファイルであり,予約状況を管理する。


図2 予約ファイルのレコード様式

 

@ 日付には,年,月, 日が,それぞれ西暦の4桁,2桁,2桁で格納されている。
A 部屋1〜6のうち,予約済みの部屋には予約番号が格納される。 予約が入っていない部屋には 0 が格納されている。
B 予約が1部屋も入っていない日のレコードは存在しない。

〔プログラム〕
(行番号)

 1  DATA  DIVISION.
 2  FILE SECTION.
 3  FD RSV-FILE.
 4  Ø1 RSV-REC.
 5     Ø2 RSV-DATE       PIC X(8).
 6     Ø2 RSV-ROOM       OCCURS 6.
 7        Ø3 RSV-NO         PIC 9(6).
 8  WORKING-STORAGE SECTION.
 9  77 CNT          PIC 9(1).
1Ø  77 GET-ROOM     PIC 9(1).
1l  LINKAGE SECTION.
12  Ø1 PRM1.
13     Ø2 PRM-NO         PIC 9(6).
14     Ø2 PRM-DATE       PIC 9(3).
15     Ø2 PRM-ROOM       PIC 9(1).
16  Ø1 PRM2.
17     Ø2 PRM-RSLT       PIC 9(1).
18     Ø2 PRM-FREE       PIC 9(1).
19  PROCEDURE DIVISION USING PRM1 PRM2.
2Ø  MAIN-PROC.
21      OPEN I-O RSV-FILE.
22      MOVE PRM-DATE TO RSV-DATE.
23      READ RSV-FILE INVALID KEY      PERFORM RSV-PROC
24                     NOT INVALID KEY PERFORM CHK-PROC
25      END-READ.
26      CLOSE RSV-FILE.
27      EXIT PROGRAM.
28  RSV-PROC.
29      INITIALIZE RSV-REC.
3Ø      MOVE PRM-DATE TO RSV-DATE.
31      PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > PRM-ROOM
32         
33      END-PERFORM.
34      WRITE RSV-REC.
35      MOVE ZERO TO PRM-RSLT PRM-FREE.
36  CHK-PROC.
37      MOVE ZERO TO GET-ROOM PRM-FREE.
38      PERFORM VARYING CNT FROM 1 BY 1 UNTIL 
39         IF RSV-NO(CNT) = ZERO THEN
4Ø            IF PRV-ROOM > GET-ROOM THEN
41               MOVE PRM-NO TO RSV-NO(CNT)
42               ADD 1 TO GET-ROOM
43            END-IF
44            ADD 1 TO PRM-FREE
45         END-IF
46      END-PERFORM.
47      IF  THEN
48         REWRITE RSV-REC
49         MOVE ZERO TO PRM-RSLT PRM-FREE
5Ø      ELSE
51         MOVE 9 TO PRM-RSLT
52      END-IF.
設問1 プログラム中の に入れる正しい答えを,解答群の中から選べ。

 

a に関する解答群 ア ADD 1 TO GET-ROOM

イ ADD 1 TO PRM-FREE

ウ MOVE PRM-NO TO RSV-NO(CNT)

エ MOVE ZERO TO RSV-NO(CNT)

 

b,c に関する解答群 ア CNT > 6          イ CNT > GET-ROOM

ウ CNT > PRM-ROOM      エ GET-ROOM < PRM-ROOM

オ GET-ROOM = PRM-ROOM     カ GET-ROOM > PRM-ROOM

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

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

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

基本情報技術者試験


設問2   予約をキャンセルする場合は,宿泊する日の7日前からキャンセル料が発生する。 希望どおり予約できた場合には,キャンセル料の発生開始日もパラメタで返すように, プログラムを変更する。キャンセル料の発生開始日の年,月, 日は, それぞれ西暦の4桁,2桁,2桁で表し,予約できなかった場合には 0 を設定する。 キャンセル料の発生開始日を求める処理は 2016 年〜 2099 年で動作を保証する。 表中の に入れる正しい答えを,解答群の中から選べ。

             表1 プログラムの変更内

      処置               変更内容
行番号 10 と 11 の間
に追加
Ø1 MONTH-TABLE.
   Ø2 MONTH-VAL  PIC X(24) VALUE "3128313Ø313Ø31313Ø313Ø31".   
   Ø2 MONTH-ELM  REDEFINES MONTH-VAL OCCURS 12 PIC 9(2).
77 URU-SUPPLY   PIC 9(1).
77 QUOTIENT     PIC 9(3).
行番号 18 と 19 の間
に追加
   Ø2 PRM-CANCEL.
      Ø3 CAN-YYYY       PIC 9(4).
      Ø3 CAN-MM         PIC 9(2).
      Ø3 CAN-DD         PIC 9(2).

に追加
    IF PRM-RSLT = ZERO THEN
       PERFORM SET-CANCEL
    ELSE
       MOVE ZERO TO PRM-CANCEL
    END-IF.
行番号 52 の後ろに
に追加
SET-CANCEL.
     MOVE PRM-DATE TO PRM-CANCEL.
     IF CAN-DD > 7 THEN
        SUBTRACT 7 FROM CAN-DD
     ELSE
        IF CAN-MM = 1 THEN
           SUBTRACT 1 FROM CAN-YYYY
           MOVE 12 TO CAN-MM
           COMPUTE CAN-DD = 31 + CAN-DD - 7
        ELSE
           SUBTRACT 1 FROM CAN-MM
           
           IF CAN-MM = 2 THEN
              DIVIDE CAN-YYYY BY 4
                     GIVING QUOTIENT REMAINDER URU-SUPPLY
              IF  THEN
                 ADD 1 TO CAN-DD
              END-IF
           END-IF
       END-IF
     END-IF.

 

d に関する解答群 ア 行番号 25 と 26 の間       イ 行番号 35 と 36 の間

ウ 行番号 37 と 38 の間       エ 行番号 46 と 47 の間

 

e に関する解答群 ア COMPUTE CAN-DD = 3Ø + CAN-DD - 7

イ COMPUTE CAN-DD = MONTH-ELM(CAN-MM - 1) - 7

ウ COMPUTE CAN-DD = MONTH-ELM(CAN-MM) + CAN-DD - 7

エ SUBTRACT 7 FROM CAN-DD

 

f に関する解答群 ア QUOTIENT > 1ØØ

イ QUOTIENT > 4ØØ

ウ URU-SUPPLY = ZERO

エ URU-SUPPLY NOT = ZERO

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

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

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


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