パソコン素人です。
アルゴリズム素人です。
基本情報技術者試験の問題・テキスト等を見て気になったメモです。
間違っているのであまり見ないで下さい。すみません。
試験は選択肢があるから、何割かはあてずっぽうでも当たると思ったが、
分かっていても、うっかりミスで、何割かは落とすので、
結局、実力なのかなと思う。
また、時間配分とかで結果は違ってきそう。
基本情報技術者過去問題 平成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も従来はあった・・・ややこしい。