基本情報技術者過去問題 平成27年秋期 午後問9

問9 

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

〔プログラムの説明〕
 入退室が制限されているエリア(以下,制限エリアという)の入退室の状況を記録したファイルを読み込んで,入退室状況を印字するプログラムである。
 X社では,ICカードを用いた入退室システムを導入して,制限エリアの入退室を管理している。図1に,X社の制限エリアのレイアウトを示す。ドアは5か所(ドア番号11,12,21,22,31)あり,各ドアの内外にカードリーダが設置されている。入室時と退室時には,カードリーダにICカードをかざしてドアを開錠する。各ドアのカートリーダにICカードをかざす都度,その入退室の状況を記録した1行の入退室レコードが 入退室ログに書き込まれる。
 制限エリアには,機密度に応じたレベルが設定されている。レベルは,外部からその部屋へ入るまでに開錠して通過する必要があるドアの数で表す。ドア番号は,10の位がレベルを表す。入退室できるレベルは,ICカードごとに設定されている。
  • 入退室レコードは33桁の固定長の文字列で,次に示す項目から成る。
    1. カードIDは,ICカードを識別するIDであり,英数字から成る。
    2. 日付と時刻は,カードリーダにICカードをかざした日付と時刻である。
    3. 入退は,"I"(入室)又は"O"(退室)である。
    4. 可否は,"A"(開錠)又は"R"(拒否)である。
    5. 名前は,ICカードの使用者を識別する名前であり,英数字と空白から成る。
    6. レコードの終端には,改行文字が付いている。
  • 入退室ログから印字したい日付・時間帯の入退室レコードを抽出し,カードID,日付及び時刻(先頭の18桁)で昇順に整列したファイルを Access.Log とする。図2に,Access.Log のレコードの例を示す。
  • Access.Log から読み込んだ1レコードごとに,カードID,名前,日時,ドア番号,入退,可否から成る1行を,図3に示す様式で印字する。日時以降の項目は,ICカードをかざしたドアのレベルに応じて19,39,59桁目のいずれかから印字する。
    1. カードID及び名前は,同一カードIDが続くとき,先頭の行だけに印字する。
    2. 日時は,"月 - 日 時:分"の形式で印字する。
    3. 入退は,"I"なら"IN"と,"O"なら"OUT"と印字する。
    4. 可否は,"A"なら何も印字せず,"R"なら"IN"又は"OUT"の直前に"(R)"を印字する。
  • ライブラリ関数 strcmp(s1,s2) は,文字列 s1 と s2 を比較し,s1<s2 のとき負の値を,s1=s2 のとき0を,s1>s2 のとき正の値を,それぞれ返す。また,ライブラリ関数 strcpy(s1,s2) は,文字列 s2 を s1 に複写する。

設問1

プログラム中の に入れる正しい答えを, 解答群の中から選べ。
a,b に関する解答群
  • cardID = lastID
  • lastID = cardID
  • logEOF = 0
  • logEOF = EOF
  • strcpy(cardID,"  ")
  • strcpy(cardID,lastID)
  • strcpy(lastID,"  ")
  • strcpy(lastID,cardID)
c に関する解答群
  • door[0] − '0'−1
  • door[0] − '0'
  • door[0] − '0'+1
  • door[0] − '3'

解答選択欄

  • a:
  • b:
  • c:

解答

  • a=
  • b=
  • c=

解説

この設問の解説はまだありません。

設問2

次の記述中の に入れる正しい答えを,解答群の中から選べ。

 プログラムを変更して,入退室順序の整合性を検査する処理を追加する。
 各入退室者は,最初は外部(レベル0)にいて,最後は外部に出るものとする。正しく入退室していれば,制限エリアのレベルは0から始まり,ドアを通過する都度,レベルが1ずつ変化し,最後は0に戻るはずである。しかし,抽出した日付・時間帯よりも前(後)に入室(退室)している場合や,ICカードをかざさずに人の後についてドアを通過した場合などには,順序の不整合が起きる。
 なお,カードリーダにICカードをかざしてドアが開錠した場合は,必ず入退室するものとする。
  • 順序の不整合が起きた場合は,本来入退室の記録があるべき行のレベル1の印字位置に "***** Level x-->y"と印字する。これは,入退室者がこの前後にレベルxからyヘ移動したはずであるが,その記録がないことを意味する。
  • 図4に,不整合がある入力レコードの例を示す。図4のレコードを用いて変更後のプログラムを実行すると,印字結果は,図5のようになる。
pm09_6.gif/image-size:460×344
 プログラムを,次のように変更する。
  • プログラムに,次の文を追加する。
    pm09_7.gif/image-size:314×170
  • プログラムの末尾に,次の二つの関数を追加する。
    pm09_8.gif/image-size:364×455
d,e に関する解答群
  • 行B
  • 行C
  • 行D
  • 行E
  • 行F
  • 行G
f,g に関する解答群
  • afterLevel
  • beforeLevel
  • doorLevel
  • level

解答選択欄

  • d:
  • e:
  • f:
  • g:

解答

  • d=
  • e=
  • f=
  • g=

解説

この設問の解説はまだありません。
【27年秋期 午後問題】
 問1 問2 問3 問4 問5 問6 問7 問8 問9 問10 問11 問12 問13
© 2010-2019 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop