2016年12月28日水曜日

[平成26年度秋] 午後 問9解説

[問題文・解答]


平成26年度10月に実施された基本情報技術者試験の午後試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)

[問題概要]


この問題は、選択問題で問9〜問13のうち1問を選択する必要があります。
出題分野はソフトウェア開発(C)で、問題の利用者IDの管理状況の確認です。
利用者ID一覧情報が保存された新旧2つのファイルを比較し、差分を表示するCプログラムについて問われます。C言語の文字列処理やビット演算の基礎知識が必要となる問題です。

[設問1]


プログラムの大まかな処理の流れは以下の通りです。
①新旧の2ファイルを開いてそれぞれ1行目を読み込む。
②両ファイルがファイル末尾まで来ているか判断し、いずれかのファイルが末尾でないならばwhileループ③へ。両ファイルとも末尾ならばファイルを閉じて終了。
③読み込んだ新旧のIDを比較し、同じならば④へ。異なるならば⑤へ。
④新旧の属性を特権S及びOについて比較し、差分がある場合は利用者ID、利用者名及び特権の変更情報を印字する。その後、各ファイルから次の行を読み込んで②へ戻る。
⑤新ファイルで読み込んだIDが旧ファイルで読み込んだIDよりも若番ならば⑥へ。老番ならば⑦へ。
⑥新ファイルのIDについて利用者ID、利用者名と「利用者ID追加」を印字し、特権S及びOの有無を確認し、特権がある場合は情報を印字する。その後、新ファイルから次の行を読み込んで②へ戻る。
⑦旧ファイルのIDについて利用者ID、利用者名と「利用者ID追加」を印字し、特権S及びOの有無を確認し、特権がある場合は情報を印字する。その後、旧ファイルから次の行を読み込んで②へ戻る。

a) aの行は上記の処理②のwhile文の判定部分に当たります。新旧両方ファイルが末尾(EOF)かどうかを判定する部分です。(両ファイル共に末尾なら偽、そうでないなら真となる条件判定)
従って、「イ」の「(NewEoF != EOF) || (OldEoF != EOF)」が適切です。

b) bの行は上記の処理④の新旧の特権情報に差分があるかどうかを判定する部分です。(差分がある場合に真、無い場合に偽となる条件判定)
従って、「ウ」が適切です。

c) cの行は上記の処理④の各ファイルから次の行を読み込む部分に当たるため、「イ」が正解です。

d) dの行は上記の処理⑤の新旧の利用者IDのいずれが若番かを判定する部分です。(新ファイルのIDが若番の場合に真、老番の場合に偽となる条件判定)
従って、「ウ」が正解です。

[答] a) イ b) ウ c) イ d) ウ

[設問2]


e) eには"現在使用不可"の条件、つまり設問中の(2)①に記載されているように新ファイルのIDに対する属性rのビットが1であるかどうかの判定が入ります。P.47(2)②より、属性rのビットは最下位ビットであり、P.49のプログラムの冒頭でBitR=0x01と定義されていることから、eには「イ」の「(NewAttr & BitR) == BitR」が適切です。

f) fには"期間中未使用"の条件、つまり設問中の(2)②に記載されているように新旧両ファイルに利用者IDがあって、かつ最終使用日の値が等しいかどうかの判定が入ります。従って、「カ」が適切です。

[答] e) イ f) カ

上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。


0 件のコメント:

コメントを投稿