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

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

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

〔プログラム1の説明〕

 G社では,セキュリティ対策のため,入退室時の ID カード操作によって資格保有者以外の 立入りを禁止し,かつ,入室者の入退室日時を記録しておくセキュリティルームを設置した。 プログラム1は,セキュリティルームを管理するシステムのサブプログラムであり, 処理コードと従業員番号を受け取って,結果コードを返す。

(1) パラメタの形式は,図1のとおりである。

 処理コード  
  1けた
 従業員番号  
  8けた
 結果コード  
  1けた

   図1 パラメタの形式

@ 処理コードには,入室時には1が,退室時には2が設定される。

A 結果コードには,入室時に入室を許可する場合は0を,許可しない場合は, 事象に対応するコードを設定する。退室時には0を設定する。

(2) 従業員ファイルは,従業員番号をキーとする,図2に示すレコード様式の索引ファイルである。
 従業員番号  
  8けた
  職級  
 1けた
  資格  
 1けた

   図2 従業員ファイルのレコード様式

@ 従業員番号には,従業員に対して一意に割り振られた8けたの数字が設定される。 ただし,従業員番号0の従業員はいない。

A 職級には,当該従業員の職級が設定される。一般社員,係長,課長,部長に対応する値として, それぞれ 1,2,3,4 が設定される。

B 一般社員及び係長の資格には,入室許可申請によって入室を許可された場合には1が, 許可されていない場合には0が設定される。課長及び部長の資格に格納される値は不定である。

(3) セキュリティルームに入室できるのは,課長,部長, 入室を許可された一般社員及び入室を許可された係長である。

(4) セキュリティルーム内に同時に在室できる人員は 99 名までとする。

(5) 入室者の入退室日時を記録する入退室ログファイルは,図3に示すレコード様式の順ファイルである。

 従業員番号  
  8けた
 入退室コード  
  1けた
 入退室日時  
  14 けた

   図3 入退室ログファイルのレコード様式

@ 入退室コードには,入室記録の場合は1が,退室記録の場合は2が設定される。

A 入退室日時には,西暦の日付と 24 時間表記の時刻を格納する。この情報は, 組込み関数 CURRENT-DATE の関数値の先頭14文字を使用する。

B レコードは,入退室処理時に出力する。したがって,このファイル中の全レコードは, 入退室日時の昇順に整列されている。

C セキュリティルームを管理するシステムは,メンテナンスのため月末の深夜に一時運用を停止して, 入退室ログファイルを新しいファイルに切り換える。

 なお,メンテナンス開始時はセキュリティルーム内を無人にし,完了するまで入室を禁止する。 したがって,同一人物による入室と退室のレコードは必ず対で格納される。

(6) このプログラムは,最初に呼び出されたときを除き,CANCEL 文などによって 初期状態になることはない。

(7) セキュリティルームには,本人の ID カードを使って1人ずつ入退室する。 セキュリティルームの入退室はすべて記録される。

〔プログラム1〕

DATA DIVISION. 
FILE SECTION.
FD  EMPLOYEE.
01  EMP-REC.
    02  EMP-KEY.
        03  EMP-NO     PIC 9(8).
    02  EMP-CLASS      PIC 9(1).
    02  EMP-QUAL       PIC 9(1).
FD  LOG-FILE.
01  LOG-REC.
    02  LOG-EMP        PIC 9(8).
    02  LOG-CD         PIC 9(1).
    02  LOG-TIME       PIC X(14).

WORKING-STORAGE SECTION.
01  CNT                PIC 9(3) VALUE ZERO.
LINKAGE SECTION.
01  PRM.
    02  PRM-CD         PIC 9(1).
        88 CD-ENTER      VALUE 1.
        88 CD-EXIT       VALUE 2.
    02  PRM-EMP        PIC 9(8).
    02  PRM-RTN        PIC 9(1).
PROCEDURE DIVISION  USING PRM.
CTL-PROC SECTION. 
    MOVE ZERO TO PRM-RTN.
    EVALUATE TRUE
       WHEN CD-ENTER PERFORM QUAL-CHECK
       WHEN CD-EXIT  PERFORM REC-LOG
                     SUBTRACT 1 FROM CNT
       WHEN OTHER    MOVE 1 TO PRM-RTN
    END-EVALUATE.
    EXIT PROGRAM.
QUAL-CHECK SECTION.
    OPEN INPUT EMPLOYEE.
    MOVE PRM-EMP TO EMP-NO.
    READ EMPLOYEE
       INVALID KEY
          MOVE 2 TO PRM-RTN
       NOT INVALID KEY
          EVALUATE TRUE
             WHEN 
                MOVE 3 TO PRM-RTN
             WHEN CNT >= 99
                MOVE 4 TO PRM-RTN
             WHEN OTHER
                PERFORM REC-LOG
               
          END-EVALUATE
    END-READ.
    CLOSE EMPLOYEE.
REC-LOG SECTION.
    OPEN EXTEND LOG-FILE.
    MOVE PRM-EMP TO LOG-EMP.
    MOVE PRM-CD  TO LOG-CD.
    MOVE FUNCTION CURRENT-DATE TO LOG-TIME.
    WRITE LOG-REC.
    CLOSE LOG-FILE.

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

a に関する解答群

ア EMP-CLASS <= 2

イ EMP-CLASS <= 2 AND EMP-QUAL = 0

ウ EMP-CLASS <= 2 OR EMP-QUAL = 0

エ EMP-QUAL = 0

b に関する解答群

ア ADD 1 TO CNT        イ MOVE ZERO TO CNT

ウ SET CD-ENTER TO TRUE    エ SET CD-EXIT TO TRUE

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

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

基本情報技術者試験


設問2 パラメタで渡された従業員番号が,従業員ファイル中に存在しなかった場合に 設定する結果コードを,解答群の中から選べ。

解答群

ア 1       イ 2       ウ 3       エ 4

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

基本情報技術者試験


設問3 プログラム1によって作成され,保管していた,ある月の入退室ログファイルを読み込み, 指定した日時にセキュリティルーム内にいたすべての従業員の従業員番号を 表示するプログラム2を作成した。指定した日時より前に入室し,かつ,指定した日時か, それより後に退室したすべての従業員の従業員番号を表示する。 プログラム中の に入れる正しい答えを,解答群の中から選べ。

〔プログラム2〕

DATA  DIVISION.
FILE SECTION.
FD  LOG-FILE.
01  LOG-REC.
    02  L0G-EMP         PIC 9(8).
    02  LOG-CD          PIC 9(1).
        88  CD-ENTER      VALUE 1.
        88  CD-EXIT       VALUE 2.
    02  LOG-TIME        PIC X(14).
WORKING-STORAGE SECTION.
77  CNT                 PIC 9(3).
77  SRCH-FLAG           PIC X(1).
    88 SRCH-END           VALUE "E".
01  STAY-ROOM.
    02  EMP-NO          PIC 9(8) OCCURS 99.
LINKAGE SECTION.
01  PRM-TIME        PIC X(14).
PROCEDURE DIVISION  USING PRM-TIME.
MAIN-PROC SECTION.
    MOVE SPACE TO SRCH-FLAG.
    PERFORM VARYING CNT FROM 1 BY 1 UNTIL CNT > 99
       MOVE ZERO TO EMP-NO(CNT)
    END-PERFORM.
    OPEN INPUT LOG-FILE.
    READ LOG-FILE AT END SET SRCH-END TO TRUE.
    PERFORM UNTIL SRCH-END
       IF  THEN
          PERFORM PROC-DISP
          SET SRCH-END TO TRUE
       ELSE
          EVALUATE TRUE
             WHEN CD-ENTER PERFORM PROC-ENTER
             WHEN CD-EXIT  PERFORM PROC-EXIT
          END-EVALUATE
          READ LOG-FILE AT END SET SRCH-END TO TRUE
       END-IF
    END-PERFORM.
    CLOSE LOG-FILE.
    EXIT PROGRAM.
PROC-ENTER SECTION.
    PERFORM VARYING CNT FROM 1 BY 1 UNTIL 
       CONTINUE
    END-PERFORM.
    MOVE LOG-EMP  TO EMP-NO(CNT).
PROC-EXIT SECTION.
    PERFORM VARYING CNT FROM 1 BY 1 UNTIL 
       CONTINUE
    END-PERFORM.
    MOVE ZERO TO EMP-NO(CNT).
PROC-DISP SECTION.
    PERFORM VARYING CNT FROM 1 BY 1 UNTIL 
       IF EMP-NO(CNT) NOT = ZERO THEN
          DISPLAY EMP-NO(CNT)
       END-IF
    END-PERFORM.
c に関する解答群 ア LOG-TIME < PRM-TIME     イ LOG-TIME <= PRM-TIME

ウ LOG-TIME = PRM-TIME      エ LOG-TIME > PRM-TIME

オ LOG-TIME >= PRM-TIME

d 〜 f に関する解答群

ア CNT < 99         イ CNT > 99

ウ EMP-NO(CNT) = ZERO    エ LOG-EMP = EMP-NO(CNT)

オ LOG-EMP = ZERO      カ LOG-EMP NOT = EMP-NO(CNT)

L0G-EMP NOT = ZERO    ク SRCH-END

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

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

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

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


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