基本情報技術者試験な備忘録(午後・アルゴリズム・論理積・論理和)

パソコン素人です。
アルゴリズム素人です。

 

基本情報技術者試験の問題・テキスト等を見て気になったメモです。
間違っているのであまり見ないで下さい。すみません。

 

試験は選択肢があるから、何割かはあてずっぽうでも当たると思ったが、
分かっていても、うっかりミスで、何割かは落とすので、
結局、実力なのかなと思う。
また、時間配分とかで結果は違ってきそう。


基本情報技術者過去問題 平成24年春期 午後問8
(設問1のみ記載しました。引用:基本情報技術者試験ドットコム様(感謝))

 

問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個以上あるものとする。

 

返却値
0:検査した全てのビットが0
1:検査したビット中に0と1が混在
2:検査した全てのビットが1

 

 例えば,図1の例1では,Mask のビット番号7~5の3ビットが1であるので,
Data のビット番号7~5の3ビットの値を検査し,0と1が混在しているので返却値1を返す。 
例2では,Mask のビット番号4と0の2ビットが1であるので,Data のビット番号4と0の2ビットの値を検査し,
どちらも1であるので返却値2を返す。



a,bを当てるのだが、これも段取り良く考えないと解けない。
実際に、プログラムを書いて、実行すれば簡単なのに、試験だとややこしい。

多分、DataとMaskというセット「BitTest」がある。
(2ビットで考える。)

 

こんな感じ。
例には、Maskに0が含まれているが、Maskが1の時だけ、処理するので、とりあえずMaskは、
11にしている。
で、アルゴリズムを見ると、if文で表せるような内容になっている。

 

こんな感じ。
aについて、考える。
2:検査した全てのビットが1
ここで、選択肢から当たりを付ける(しかない?)。

「Data & Mask」と「Data | Mask」がある。
説明があるが、
Data & Maskは、論理積




 

Data | Maskは、論理和



 

(「|」なんてパイプとして、コマンドプロンプトでしか使ってなかった・・・。)




上記からaについて
2:検査した全てのビットが1
の条件を考え

上記からaについて
2:検査した全てのビットが1
の条件を考えると、

パターン1



なのかもしれない・・・。


上記からbについて
RC =
の条件を考えると、うーん。
検査するのは、Maskが1なので、

パターン2



が近い感じ。
で、

を選ぶ。

この考え方でいいのかな。
時間がないから仕方ないか。



アルゴリズムというより、論理演算とかベン図が分からないといけない。
2023年度から試験が変わるのでどうなるのか分からないが、
設問2,3も従来はあった・・・ややこしい。