![見出し画像](https://assets.st-note.com/production/uploads/images/106698300/rectangle_large_type_2_5d6c668e053963cd5673af510a5a9106.png?width=800)
!T-28(基本情報技術者試験5問)
▶️問題1
・負数を2の補数で表すとき,8ビットの2進正数nに対し-nを求める式はどれか。ここで,+は加算を表し,ORはビットごとの論理和,XORはビットごとの排他的論理和を表す。
ア(n OR 10000000)+00000001
イ(n OR 11111110)+11111111
ウ(n XOR 10000000)+11111111
エ(n XOR 11111111)+00000001
▶️回答
・負数→負の数
・補数→負の数を表現する方法
・ある正数に対応する2の補数に求めるには、
すべてのビットを反転して1を加える必要がある。
・反転する方法は?
→全ビットを反転するときに使われる論理演算が排他的論理和(XOR)である。
・どうやって?
「XOR 0」の結果は元のビットそのまま。
「XOR 1」の結果は元のビットを反転したビットとなる
(0なら→1へ、1なら→0へ)
ここまでで、ウかエになる。
2進正数nから2の補数表現の-n(負数)を得るには、
nの全ビットを反転する ⇒ n XOR 11111111
→8bitなので、11111111で8つかく。反転させるので「1」を使う。
①の結果に1を加算する ⇒ +00000001
ということで、エが回答になる。
▶️問題2
次の流れ図は,10進整数j(0<j<100)を8桁の2進数に変換する処理を表している。2進数は下位桁から順に,配列の要素NISHIN(1)からNISHIN(8)に格納される。流れ図のa及びbに入れる処理はどれか。ここで,j div 2はjを2で割った商の整数部分を,j mod 2はjを2で割った余りを表す。
![](https://assets.st-note.com/production/uploads/images/107530705/picture_pc_eb96520514cf9ab692a27a1ce8c27a19.gif)
![](https://assets.st-note.com/production/uploads/images/107530795/picture_pc_0a85d8654c9f462da4c4d134a0e56817.gif)
▶️回答
10進数を2進数に変えるときには、どういうことをしたか。
例として j=50 のときに各配列要素に格納される値の違いを見ていきましょう。NISHIN[1] が最下位ビット(一番右)、NISHIN[8] が最上位ビット(一番左)で下位ビットから順番に値を格納していきます。
10進数 50 は「32+16+2=25+24+21」であるので、
2進数8ビットだと 0011 0010 と表せます。
正しい処理です。最後まで流れを見ていきましょう。
[a] 50 mod 2 = 0 → NISHIN[1]
[b] 50 div 2 = 25 → j
[a] 25 mod 2 = 1 → NISHIN[2]
[b] 25 div 2 = 12 → j
[a] 12 mod 2 = 0 → NISHIN[3]
[b] 12 div 2 = 6 → j
[a] 6 mod 2 = 0 → NISHIN[4]
[b] 6 div 2 = 3 → j
[a] 3 mod 2 = 1 → NISHIN[5]
[b] 3 div 2 = 1 → j
[a] 1 mod 2 = 1 → NISHIN[6]
[b] 1 div 2 = 0 → j
[a] 0 mod 2 = 0 → NISHIN[7]
[b] 0 div 2 = 0 → j
[a] 0 mod 2 = 0 → NISHIN[8]
[b] 0 div 2 = 0 → jこの時点で k が8になりループが終了します。NISHIN(1)が最下位桁、NISHIN(8)が最上位桁ですから、上位桁から順番に 0011 0010 が格納されていることになります。
手順1: 変換する10進数を2で割ります。
手順2: 商と余りを求めます。商は次のステップで使用するため、保存しておきます。
手順3: 余りを下から上に順番に並べていきます。これが2進数の桁になります。
手順4: 商が0になるまで手順1から手順3を繰り返します。
以上の手順でOKなので、エが正解になる。
![](https://assets.st-note.com/production/uploads/images/107532314/picture_pc_4d278170908475d003c1d938fa44b701.gif)
▶️問題3
P,Q,Rはいずれも命題である。
命題Pの真理値は真であり,命題 (not P) or Q 及び
命題 (not Q) or R のいずれの真理値も真であることが分かっている。
Q,Rの真理値はどれか。
ここで,X or Y は X と Y の論理和,not X は X の否定を表す。
![](https://assets.st-note.com/production/uploads/images/107532410/picture_pc_8ac9fec5600fa2d98af5dc6c0ba6f611.gif)
Pが真→notPは偽である。それとQがorで真なので、Qは偽である。
よって、notQ→真であるので、Rは真となる。
よって、Q,R→偽,真と言える。回答はイか、と思ったら違う。
▶️回答
命題Pが真とわかってるので、まずPが含まれている「(not P) or Q=真」について考えます。
Pが真なので「not P=偽」
よって、この命題は「偽 or Q=真」と書き換えることができます。論理和演算(or演算)の特徴を考えると「偽 or Q=真」を満たすためにはQが真でなければならないので、命題Qは真ということがわかります。
さて、「偽 or Q=真」を満たすためにはQが真でなければならない
ここがわからなかった。
論理和演算は、
少なくとも1つの条件が真である場合に真を返し、
それ以外の場合は偽を返します。
ここが大事な部分だった。つまり、Qが偽になってしまうと「偽 or Q=真」にはならないということだった。
次に「(not Q) or R=真」について考えます。Qが真なので「not Q=偽」になり、この命題は「偽 or R=真」と書き換えることができます。先程と同様に論理和演算の特徴から、この命題を満たすためには命題Rは真でなくてはなりません。よって、エが正解になる。
▶️問題4
入力記号,出力記号の集合が{0,1}であり,状態遷移図で示されるオートマトンがある。0011001110 を入力記号とした場合の出力記号はどれか。ここで,入力記号は左から順に読み込まれるものとする。また,S1は初期状態を表し,遷移の矢印のラベルは,入力/出力を表している。
![](https://assets.st-note.com/production/uploads/images/107533307/picture_pc_53bd19184cfa3c4858b32f7e2cac80ab.gif)
・ア 0001000110
・イ 0001001110
・ウ 0010001000
・エ 0011111110
▶️回答
オートマトンは、
現在の状態と入力信号の組合せのみによって次に遷移する状態が決まるモデルです。
設問の図の初期状態S1を例にすると、入力信号が0であれば再度S1に遷移し、入力信号が1であればS2に遷移するといった具合です。
![](https://assets.st-note.com/production/uploads/images/107533647/picture_pc_a55bd5a7540d72450767d30e26be6b1d.gif)
0011001110より、0001000110となる。
たどった順に遷移するときの出力(a/bの右側)を順に並べると、0001000110 になります。したがって「ア」が正解。
▶️問題5
2分探索木になっている2分木はどれか。
![](https://assets.st-note.com/production/uploads/images/107591114/picture_pc_857df64294f0b47573959261967b1115.gif)
![](https://assets.st-note.com/production/uploads/images/107591113/picture_pc_a73670003ea747a111acd67b8256532b.gif)
![](https://assets.st-note.com/production/uploads/images/107591111/picture_pc_d5635cdbc74c074dff647a400033cce3.gif)
![](https://assets.st-note.com/production/uploads/images/107591112/picture_pc_26842c2c106754b2018d49a8239ee99f.gif)
▶️回答
2分探索木は、2分木(各節からでる枝の数が2本以下になっている木)の
各節にデータをもたせることで探索を行えるようにした木です。
各節がもつデータは
「その節から出る左部分木にあるどのデータよりも大きく、
右部分木のどのデータよりも小さい」という条件があります。
→左が最も小さく、右が最も大きくなる!!
そう考える。よって、ウ
どの部分を見ても「左<中<右」の関係を満たしていれば2分探索木といえる。
最も簡単に見分ける方法は、図示されている木構造の各節点を左から順にならべて昇順になっているか否かを確認することです。
少しずつですが、投稿をしております。 noteで誰かのためになる記事を書いています。 よろしくおねがいします。