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

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

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

〔プログラムの説明〕

 X社では,自社の事業所内にある4面のテニスコートについて,従業員が予約やキャンセル, 空き状況の確認ができるシステムを開発することになった。このプログラムは, テニスコートの予約を受け付けるサブプログラムであり,利用希望者からの予約情報を パラメタで受け取り,予約管理ファイルで管理している予約状況と照らし合わせて, 予約結果をパラメタで呼出し元に返却する。

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


図1 パラメタの様式

@ 予約番号には,予約希望に対して一意に割り振られる 000001 〜 999999 の番号が 格納されている。

A 希望面数には,希望するコートの面数が格納されている。

B 希望日には,年,月,日が,それぞれ4桁,2桁,2桁の西暦で格納されている。

C 希望時刻には,希望する利用開始時刻の“時”が, 24 時間表記で格納されている。 利用可能な時間帯は8時から 17 時までであり,1時間単位で予約できる。

D 希望時間には,希望する利用時間数が格納されている。

E 結果には,希望どおりに予約できた場合は0を,予約できなかった場合は9を設定する。

F 予約コートには,予約できたコートのコート番号を設定する。例えば3番コートを 予約できた場合は 3000 を設定し,1番コートと2番コートを予約できた場合は 1200 を 設定する。予約ができなかった場合は,0000 を設定する。

G コートは1番〜4番の順に検索し,番号の小さいコートから確保する。

H 予約情報の各項目の値は呼出し側プログラムで検査するので,@〜Dで 示した範囲以外の値が設定されることはない。

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


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

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

A 予約状況の各要素には,予約済の場合は予約番号が, 予約が入っていない場合は0が格納される。

B 予約が入っていない日付をキーとするレコードは存在しない。

〔プログラム〕
(行番号)
 1  DATA DIVISION.
 2  FILE SECTION.
 3  FD RSV-FILE.
 4  01 RSV-REC.
 5     02 RSV-DATE      PIC X(8).
 6     02 RSV-AREA.
 7        03 RSV-COURT  OCCURS 4.
 8           04 RSV-RNO    PIC 9(6) OCCURS 9.
 9  WORKING-STORAGE SECTION.
10  77 W-CHK        PIC 9(1).
11     88 CHK-OK    VALUE 0.
12     88 CHK-NG    VALUE 1.
13  77 COURT-CNT    PIC 9(1).
14  77 TIME-CNT     PIC 9(2).
15  77 TIME-START   PIC 9(2).
16  77 TIME-END     PIC 9(2).
17  77 KEEP-COURT   PIC 9(1).
18  77 BKUP-AREA    PIC X(54).
19  LINKAGE SECTION.
20  01 PRM-DATA.
21     02 PRM-RNO       PIC 9(6).
22     02 PRM-NUM       PIC 9(1).
23     02 PRM-DATE      PIC 9(8).
24     02 PRM-TIME      PIC 9(2).
25     02 PRM-HOURS     PIC 9(1).
26  01 RET-DATA.
27     02 RET-RSLT      PIC 9(1).
28        88 RSV-OK     VALUE 0.
29        88 RSV-NG     VALUE 9.
30     02 RET-COURT.
31        03 COURT-NO     PIC 9(1) OCCURS 4.
32  PROCEDURE DIVISION USING PRM-DATA RET-DATA.
33  MAIN-PROC.
34      SET RSV-OK TO TRUE.
35      INITIALIZE RET-COURT.
36      OPEN I-O RSV-FILE.
37      MOVE PRM-DATE TO RSV-DATE.
38      READ RSV-FILE
39         INVALID KEY     INITIALIZE RSV-AREA
40                         MOVE PRM-DATE TO RSV-DATE
41                         PERFORM RSV-PROC
42                         WRITE RSV-REC END-WRITE
43         NOT INVALID KEY PERFORM RSV-PROC
44                         IF RSV-OK THEN
45                            REWRITE RSV-REC END-REWRITE
46                         END-IF
47      END-READ.
48      CLOSE RSV-FILE.
49      EXIT PROGRAM.
50  RSV-PROC.
51      MOVE ZERO TO KEEP-COURT.
52       .
53      COMPUTE TIME-END = TIME-START + PRM-HOURS.
54      PERFORM VARYING COURT-CNT FROM 1 BY 1
55              UNTIL COURT-CNT > 4 OR PRM-NUM = KEEP-COURT
56         
57         MOVE RSV-COURT(COURT-CNT) TO BKUP-AREA
58         PERFORM VARYING TIME-CNT FROM TIME-START BY 1
59                 UNTIL CHK-NG OR TIME-CNT >= TIME-END
60            IF RSV-RNO(COURT-CNT TIME-CNT) = ZERO THEN
61               MOVE PRM-RNO TO RSV-RNO(COURT-CNT TIME-CNT)
62            ELSE
63               SET CHK-NG TO TRUE
64               
65            END-IF
66         END-PERFORM
67         IF CHK-OK THEN
68            ADD 1 TO KEEP-COURT
69            MOVE COURT-CNT TO COURT-NO(KEEP-COURT)
70         END-IF
71      END-PERFORM
72      IF    THEN
73          SET RSV-NG TO TRUE
74          INITIALIZE RET-COURT
75      END-IF.

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

a〜c に関する解答群

ア COMPUTE TIME-START = PRM-TIME - 7

イ MOVE BKUP-AREA TO RSV-COURT(COURT-CNT)

ウ MOVE COURT-CNT TO KEEP-COURT

エ MOVE PRM-TIME TO TIME-CNT

オ MOVE RSV-RNO(COURT-CNT TIME-CNT) TO PRM-RNO

カ MOVE TIME-CNT TO COURT-CNT

キ SET CHK-NG TO TRUE

ク SET CHK-OK TO TRUE

d に関する解答群 ア CHK-NG               イ CHK-OK

ウ KEEP-COURT NOT = ZER0     エ PRM-NUM NOT = KEEP-COURT

オ PRM-NUM = KEEP-COURT

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

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

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

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

基本情報技術者試験


設問2 システムの運用を開始したところ, “隣り合わせのコートを希望する機能が欲しい”との要望が挙がった。 コートは図3に示すとおりに配置されていて,2面を予約した利用者にフェンスを 挟んだコート,例えば1番コートと3番コートが割り当てられたことがあったためである。

 パラメタにデータ項目 PRM-NEXT を追加し,1が設定されている場合, 確保できたコートがフェンスを挟んでいたら予約はせずに,結果に4を 設定して返却するようにプログラムを変更する。ただし,3面以上の予約だった場合は, フェンスを挟んでいても予約する。表1中の に 入れる正しい答えを,解答群の中から選べ。


図3 テニスコートの配置

      表1 プログラムの変更内容
    処置        変更内容
 行番号 25 と 26 の
 間に追加
02 PRM-NEXT     PIC 9(1).
   88 NEXT-OFF  VALUE O.
   88 NEXT-ON   VALUE 1.
 行番号 29 と 30 の
 間に追加
   88 RSV-NOTE VALUE 4.
 行番号 74 と 75 の
 間に追加
ELSE
    IF   AND
         AND
         THEN
       SET RSV-NOTE TO TRUE
       INITIALIZE RET-COURT
    END IF

e〜g に関する解答群

ア ((COURT-NO(1) = 1 OR 2) AND (COURT-NO(2) = 3 OR 4))

イ (COURT-CNT = 3 OR 4)

ウ (COURT-NO(1) = 1 OR 3)

エ NEXT-OFF

オ NEXT-ON

カ PRM-NUM = 2

キ RSV-OK

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


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