![]()
平成24年 春期 基本情報技術者 午後 問08
問08 必須問題問8 次のプログラムの説明及びプログラムを読んで,設問1〜3に答えよ。 整数型関数 BitTest は,8ビットのデータ中の指定したビット位置にあるビットの値を 検査して,結果を返す。整数型関数 BitCount は,8ビットのデータ中にある1のビットの個数を返す。 なお,本問において,演算子“&”,“|”は,二つの8ビット論理型データの 対応するビット位置のビット同士について,それぞれ論理積,論理和を求め,8ビット論理型で 結果を得るものとする。また,“〜”B という表記は,8ビット論理型定数を表す。 〔プログラム1の説明〕 整数型関数 BitTest を,次のとおりに宣言する。 ○整数型関数:BitTest(8ビット論理型:Data,8ビット論理型:Mask ) 検査される8ビットのデータは入力用の引数 Data に,検査をするビット位置の情報は 入力用の引数 Mask に,それぞれ格納されている。 Mask 中のビットの値が 1 であるビット位置に 対応した Data 中のビットを検査して,次の返却値を返す。ここで, Mask 中には 1 のビットが 1 個以上あるものとする。
1:検査したビット中に 0 と 1 が混在 2:検査した全てのビットが 1
![]() 図1 BitTest の実行例 〔プログラム1〕 ![]() 〔プログラム2,3の説明〕 整数型関数 BitCount を,次のとおりに宣言する。 ○整数型関数:BitCount(8ビット論理型:Data) 検査される8ビットのデータは入力用の引数 Data に格納されている。 このためのプログラムとして,基本的なアルゴリズムを用いたプログラム2と, 処理効率を重視したプログラム3を作成した。 プログラム2,3中の各行には,ある処理系を想定して,プログラムの各行を1回 実行するときの処理量( 1,2,…)を示してある。選択処理と繰返し処理の終端行の 処理量は,それぞれの開始行の処理量に含まれるものとする。 なお,演算子“−”は,両オペランドを8ビット符号なし整数とみなして,減算を行うものとする。 〔プログラム2〕 (処理量) ![]() (処理量) ![]()
設問1 プログラム1中の 解答群 ウ (Data & Mask) = Mask エ (Data | Mask) = "00000000"B オ (Data | Mask) = Mask
設問2 次の記述中の ![]()
プログラム1は,Mask 中に 1 のビットが1個以上あることを前提としている。
ここで,この前提を取り除いて,Mask 中の 1 のビットが 0 個の場合は返却値 0
を返すようにしたい。そのために,プログラム1の処理部分について,
次の修正案@〜Bを考えた。ここで,修正案@は,プログラム1のままで何も変更しない。
また,
![]()
これらの修正案のうち,正しく動作するのは 解答群 エ 修正案@及びA オ 修正案@及びB カ 修正案A及びB
設問3 次の記述中の ![]() プログラム2,3の処理効率について考えてみる。表1にプログラム2,3の処理量の比較結果を示す。
プログラム3では,αの行での変数 Work の更新において効率の良いアルゴリズムが
使われている。例えば,プログラム3で引数 Data の内容が "01101010"B であったとき,
繰返し処理においてαの行の2回目の実行が終了した時点で変数 Work の内容は,
" d に関する解答群 e に関する解答群 f に関する解答群 エ 01010000 オ 01100000 カ 10100000
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2024 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| |||||||||