FE22春後問10

FE22春後問10

基本情報技術者試験平成22年度春午後問10


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


プログラム 1 の説明〕

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

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

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

図 1 パラメタの形式

[1] 処理コードには,入室時には 1 が,退室時には 2 が設定される。
[2] 結果コードには,入室時に入室を許可する場合は 0 を,許可しない場合は,事象に対応するコードを設定する。退室時には 0 を設定する。

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

従業員番号
8 けた
職級
1 けた
資格
1 けた

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

[1] 従業員番号には,従業員に対して一意に割り振られた 8 けたの数字が設定される。ただし,従業員番号 0 の従業員はいない。
[2] 職級には,当該従業員の職級が設定される。一般社員,係長,課長,部長に対応する値として,それぞれ 1,2,3,4 が設定される。
[3] 一般社員及び係長の資格には,入室許可申請によって入室を許可された場合には 1 が,許可されていない場合には 0 が設定される。課長及び部長の資格に格納される値は不定である。

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

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

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

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

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

[1] 入退室コードには,入室記録の場合は 1 が,退室記録の場合は 2 が設定される。
[2] 入退室日時には,西暦の日付と 24 時間表記の時刻を格納する。この情報は,組込み関数 CURRENT-DATE の関数値の先頭 14文字を使用する。
[3] レコードは,入退室処理時に出力する。したがって,このファイル中の全レコードは,入退室日時の昇順に整列されている。
[4] セキュリティルームを管理するシステムは,メンテナンスのため月末の深夜に一時運用を停止して,入退室ログファイルを新しいファイルに切り換える。
 なお,メンテナンス開始時はセキュリティルーム内を無人にし,完了するまで入室を禁止する。したがって,同一人物による入室と退室のレコードは必ず対で格納される。

(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-N0.
  READ EMPLOYEE
   INVALID KEY
    MOVE 2 TO PRM-RTN
   NOT INVALID KEY
    EVALUATE TRUE
     WHEN [      a      ]
      MOVE 3 TO PRM-RTN
     WHEN CNT >= 99
      MOVE 4 TO PRM-RTN
     WHEN OTHER
      PERFORM REC-LOG
      [      b      ]
    END-EVALUATE
  END-READ.
  CLOSE EMPLOYEE.
REC-LOG SECTION.
  0PEN EXTEND LOG-FILE.
  MOVE PRM-EMP TO LOG-EMP.
  MOVE PRM-CD TO LOG-CD.
  MOVE FUNCTION CURRENT-DATE TO LOG-TIME.
  MRITE LOG-REC.
  CLOSE LOG-FILE.

設問1

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

a に関する解答群
ア EMP-CLASS <= 2
イ EMP-CLASS <= 2 AND EMP-QUAL = 0
ウ EMP-CLASS <= 2 0R 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

設問2

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

解答群
ア 1
イ 2
ウ 3
エ 4

設問3

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

プログラム 2〕
DATA DIVISION.
FILE SECT工ON.
FD LOG-FILE.
01 LOG-REC.
  02 LOG-EMP    PIC9(8).
  02 LOG-CD     PIC9(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-R00M.      PIC 9(8) OCCURS 99.
  02 EMP-NO
LINKAGE SECTION.
01 PRM-TIME     PIC X(14).
PROCEDURE DIVISION  USING PRM-TIME.
MAIN-PROC SE(TION.
  MOVE SPACE TO SRCH-FLAG.
  PERFORMVARYING 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 [ C ] 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.
  PERFORMVARYING CNT FROM 1 BY I UNTIL [ d ] 
    CONTINUE
  END-PERFORM.
  MOVE LOG-EMP TO EMP-NO(CNT).
PROC-EXIT SECTION.
  PERFORMVARYING CNT FROM 1 BY 1 UNTIL [ e ] 
    CONTINUE
  END-PERFORM.
  MOVE ZERO TO EMP-NO(CNT).
PROC-DISP SECTION.
  PERFORMVARYING CNT FROM 1 BY 1 UNTIL [ f ] 
    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)
キ LOG-EMP NOT = ZERO
ク SRCH-END


問題掲載者による注意書き

  • 実際の問題文をテキスト化するにあたり,表記の難しい部分を以下のように置き換えている。
    • 丸 1,丸 2 (○の中に数字が入っている)で表記されていた文字は,機種依存文字のため, [1] ,[2] の様に置き換えた。(下線 [1],[2]等)
    • 空欄[ a ][ b ][ c ]等は,実際の問題文中では,四角で囲まれた,a,b,c だったが,[ ]で置き換えた。