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

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

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

〔プログラムの説明〕

 予約状況ファイルと料金ファイルから,パラメタで与えられた検索条件を 満たす宿泊施設の空室を検索して,宿泊料金の安い順に並べた空室情報を 返す副プログラムである。

(1) 予約状況ファイル BOOKING-FILE のレコード様式は,次のとおりである。

施設コード
  3 けた
部屋名称
  10 けた
部屋タイプ
  2 けた
予約状況
  1 けた × 366

@ 施設コードは宿泊施設を表し,各施設には複数の部屋があるものとする。

A 予約状況は,366 個の要素からなる 1次元の表であり,プログラムを 実行する翌日から 1年間分の予約状況を表している。

B 要素の値が,0 のときは“予約なし”を示し,1 のときは“予約済”を示す。 予約状況ファイルは毎日更新され,プログラム実行時には,それまでの予約状況が 正しく反映されているものとする。

 プログラムを実行する日が 2003 年 10 月 19 日のときは, 2003 年 10 月 20日〜 2004 年 10 月 19 日の予約状況が格納されている。

(2) 料金ファイル CHARGE-FILE は部屋タイプを主キーとする索引ファイルであり, レコード様式は次のとおりである。

@ 宿泊人数:1 部屋に泊まる人数を示す。

A 宿泊料金:部屋の1人当たりの1泊料金を示す。 宿泊人数の違いによって 4 通り用意されている。

B 予約状況ファイルに格納されている部屋タイプに該当するレコードは,必ず存在する。

(3) 検索条件 SEARCH-INFO の形式は,次のとおりである。 検索条件で与えられるデータは正しいものとする。

施設コード
  3 けた
宿泊開始日
  8 けた
宿泊日数
  2 けた
宿泊人数
  2 けた
1 泊の予算
下限
  6 けた
上限
  6 けた

@ 施設コード:3けたの数字である。 “000”のときは施設の指定がないことを表す。

A 宿泊開始日:4けたの西暦年,2けたの月,2けたの日で構成されている。 プログラムを実行する翌日から1年以内の日付とする。

 2003 年 10 月 20 日ならば“20031020”となる。

B 宿泊日数:2けたの 0 でない数字である。 宿泊開始日から連続して泊まる日数を表す。 連続して泊まる日を含めて,プログラムを実行する翌日から1年間に収まる日数とする。

 1泊2日のときは,“01”となる。

C 宿泊人数:2 けたの 0 でない数字である。

D 1 泊の予算:1人当たりの1泊の予算であり,下限と上限を示す1組の 6けたの数字である。 下限と上限がともに“000000”のときは指定なしを表す。

 10,000 〜 15,000 円の部屋を検索するときは,  下限として“010000”,上限として“015000”を指定する。

(4) 検索結果 SEARCH-RESULT の形式は,次のとおりである。

@ 空室情報は 100 個の要素からなる1次元の表であり,検索結果は 100 件以下とする。 検索結果が 100 件未満のとき,残りの要素は,空白で埋められている。

A 空室情報は,宿泊料金の安い順に並べる。

(5) 副プログラム GETDAYS を使用する。 GETDAYS は,与えられた日付データを,プログラムを実行する翌日からの通算日に変換する。 GETDAYS の呼び出し方法は,次のとおりである。

  CALL "GETDAYS" USING 日付 通算日

〔プログラム〕

DATA              DIVISION.
FILE              SECTION.
FD  BOOKING-FILE.
01  BOOKING-REC.
    03  BCODE             PIC   9(03).
    03  BNAME             PIC   X(10).
    03  BTYPE             PIC   X(02).
    03  BOOKING-INFO      PIC   9(01)  OCCURS 366.
FD  CHARGE-FILE.
01  CHARGE-REC.
    03  CTYPE             PIC   X(02).
    03  ACCOMMODATION-INFO             OCCURS 4.
        05  GUEST-NO      PIC   9(02).
        05  CHARGE        PIC   9(06).
SD  VACANCY-FILE.
01  VACANCY-REC.
    03  VCODE             PIC   9(03).
    03  VNAME             PIC   X(10).
    03  VCHARGE           PIC   9(06).
WORKING-STORAGE   SECTION.
01  EOF                   PIC   X(01).
01  BOOKING-FLAG          PIC   9(01).
01  DAYS                  PIC   9(03).
01  MATCH                 PIC   9(01).
01  I                     PIC   9(03).
01  J                     PIC   9(01).
LINKAGE           SECTION.
01  SEARCH-INFO.
    03  SCODE             PIC   9(03).
    03  CHECKIN-DATE      PIC   9(08).
    03  STAY-DAYS         PIC   9(02).
    03  SGUEST-NO         PIC   9(02).
    03  SCHARGE-RANGE.
        05  LOWER-LIMIT   PIC   9(06).
        05  UPPER-LIMIT   PIC   9(06).
01  SEARCH-RESULT.
    03  SEARCH-COUNT      PIC   9(03).
    03  VACANCY-INFO      PIC   X(19)  OCCURS 100.
PROCEDURE         DIVISION  USING  SEARCH-INFO SEARCH-RESULT.
MAIN-PROC.
    SORT VACANCY-FILE
        
        INPUT PROCEDURE SEARCH-PROC
        OUTPUT PROCEDURE RESULT-PROC.
    EXIT PROGRAM.
SEARCH-PROC.
    OPEN INPUT BOOKING-FILE CHARGE-FILE.
    MOVE SPACE TO EOF.
    READ BOOKING-FILE AT END
       MOVE "E" TO EOF
    END-READ.
    PERFORM UNTIL EOF = "E"
       IF (SCODE = ZERO OR
           SCODE = BCODE) THEN
          CALL "GETDAYS" USING CHECKIN-DATE DAYS
          MOVE 0 TO BOOKING-FLAG
          PERFORM 
             IF BOOKING-INFO(I) = 1 THEN
                MOVE 1 TO BOOKING-FLAG
             END-IF
          END-PERFORM
          IF  THEN
             MOVE BTYPE TO CTYPE
             READ CHARGE-FILE
             MOVE 0 TO MATCH
             PERFORM VARYING J FROM 1 BY 1
                     UNTIL J > 4 OR MATCH = 1
                IF  THEN
                   MOVE BCODE TO VCODE
                   MOVE BNAME TO VNAME
                   MOVE CHARGE(J) TO VCHARGE
                   RELEASE VACANCY-REC
                   MOVE 1 TO MATCH
                END-IF
             END-PERFORM
          END-IF
       END-IF
       READ BOOKING-FILE AT END
          MOVE "E" TO EOF
       END-READ
    END-PERFORM.
    CL OS E  BOOKING-FILE CHARGE-FILE.
RESULT-PROC.
    INITIALIZE SEARCH-RESULT.
    MOVE SPACE TO EOF.
    RETURN VACANCY-FILE AT END
       MOVE "E" TO EOF
    END-RETURN.
    PERFORM UNTIL EOF = "E"
       COMPUTE SEARCH-COUNT = SEARCH-COUNT + 1
       MOVE VACANCY-REC TO VACANCY-INFO(SEARCH-COUNT)
       RETURN VACANCY-FILE AT END
          MOVE "E" TO EOF
       END-RETURN
    END-PERFORM.

基本情報技術者試験


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

a に関する解答群

ア OCCURS KEY VCHARGE

イ ON ASCENDING KEY VCHARGE

ウ ON DESCENDING KEY VCHARGE

エ SORT KEY VCHARGE

オ USING KEY VCHARGE

b に関する解答群

ア VARYING I FROM 1 BY 1 UNTIL I > DAYS

イ VARYING I FROM 1 BY 1 UNTIL I > DAYS OR BOOKING-FLAG = 1

ウ VARYING I FROM 1 BY 1 UNTIL I >= STAY-DAYS

エ VARYING I FROM 1 BY 1 UNTIL I >= STAY-DAYS
  OR BOOKING-FLAG = 1

オ VARYING I FROM DAYS BY 1
  UNTIL I >= DAYS + STAY-DAYS OR BOOKING-FLAG = 1

c に関する解答群

ア BOOKING-FLAG = 0

イ BOOKING-FLAG = 1

ウ BOOKING-INFO(I) = 0

エ BOOKING-INFO(I) = 1

オ SCODE = ZERO

カ SCODE NOT = ZERO

d に関する解答群

ア (GUEST-NO(J) = SGUEST-NO AND
  (SCHARGE-RANGE = ZERO OR
  (CHARGE(J) >= LOWER-LIMIT AND CHARGE(J) <= UPPER-LIMIT)))

イ (GUEST-NO(J) = SGUEST-NO AND
  (SCHARGE-RANGE NOT = ZERO AND
  (CHARGE(J) < LOWER-LIMIT OR CHARGE(J) > UPPER-LIMIT)))

ウ (GUEST-NO(J) = SGUEST-NO OR
  (SCHARGE-RANGE = ZERO OR
  (CHARGE(J) >= LOWER-LIMIT AND CHARGE(J) <= UPPER-LIMIT)))

エ NOT (GUEST-NO(J) NOT = SGUEST-NO AND
  (SCHARGE-RANGE = ZERO OR
  (CHARGE(J) >= LOWER-LIMIT AND CHARGE(J) <= UPPER-LIMIT)))

オ NOT (GUEST-NO(J) NOT = SGUEST-NO AND
  (SCHARGE-RANGE NOT = ZERO AND
  (CHARGE(J) < LOWER-LIMIT OR CHARGE(J) > UPPER-LIMIT)))

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

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

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

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


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