[基本情報技術者試験]H30春の問題解いてみた(午前問題復習)

つまづいた午前問題をじっくり復習

問1.2進数

[問題]

ある整数値を、負数を2の補数で表現する2進表記法で表すと最下位2ビットは”11″であった。
10進表記法の下で、その整数値を4で割ったときの余りに関する記述として、適切なものはどれか。
ここで、除算の商は、絶対値の小数点以下を切り捨てるものとする。

[回答選択肢]

ア その整数値が正ならば3
イ その整数値が負ならば-3
ウ その整数値が負ならば3
エ その整数値の正負にかかわらず0

[解く]

対象のビット列は「?????11」

正の場合は「?????11」となり、
負の場合は「?????01」となる。

とりあえず4ビットまで確認してみる(負は補正前のビット列を表示)

ビット列 10進数
0011 0+0+(2+1)
0111 0+4+(2+1)
1011 8+0+(2+1)
1111 8+4+(2+1)
0001 -1*{0+0+(0+1)}
0101 -1*{0+4+(0+1)}
1001 -1*{8+0+(0+1)}
1101 -1*{8+4+(0+1)}

なんとなく法則性が見えてきた。
下位から3ビットより上位は必ず4の倍数になる(22、23、24、、)ので、
値があろうがなかろうが4で割れば余りは0になるので、考えなくてよい。
下位2ビットをみると、正の場合は”3″になり、負の場合は”1″になることがわかる。
これが4で割った余りとなるので、正しいことを言っているのは”ア”になる。

 

問2.最短経路

[問題]

図の線上を、点Pから点Rを通って、点Qに至る最短経路は何通りあるか。

[回答選択肢]

ア 16
イ 24
ウ 32
エ 60

[解く]

最終的な答えは
「P点→R点の最短経路パターン数」×「R点→Q点の最短経路パターン数」で求まる(のは分かる)。

問題は「2点の最短経路パターン数」をどうやって求めればいいか(P点→R点もR点→Q点も同じ考え方のはず)。

上移動2回、右移動2回なので、べたに洗い出せば

①↑↑→→
②↑→↑→
③↑→→↑
④→↑→↑
⑤→↑↑→
⑥→→↑↑

の6通りとなる。
この際「”↑”を2回使うと、後は”→”しか使えない」または「”→”を2回使うと、後は”↑”しか使えない」の制約があることに気づく。

これをどう考えるか?だが、どうやら「4つの中から2つを選ぶ組合せ数と同様」らしい。が、ピンとこない。

今までは「玉が4つあり、2つ選ぶ」という考え方が「組み合わせ(C)」だった。

e.g.
[①②③④]
[②③④] →[①] ・・・①を選んだ
[②④]  →[①③]・・・③を選んだ

今回は「穴が4つあり、2つ埋める」と考えればいいか?

e.g.
[①②③④]
[↑②③④]・・・①に”↑”を埋めた
[↑②↑④] ・・・③に”↑”を埋めた
※残りの②④は必然的に”→”となり、[↑→↑→]となる。
※「4つの順番から2つ選択する」と考えればよく、選択するのは”↑”でも”→”でもどちらでもよい。

なんとなくわかったような気もする。

ということで「P点→R点の最短経路パターン数」は「4C2=6」となる。

同様に「R点→Q点の最短経路パターン数」は「5C2=10」となり、
「P点→R点の最短経路パターン数」×「R点→Q点の最短経路パターン数」は「6×10=60」となる。

※ちなみに、「R点→Q点」で「5C2」としたがこれは”↑”の順番を選択した場合。”→”を選択すると「5C3」となるが、答えは同じく「10」。

 

問4.オートマトン

[問題]

入力記号、出力記号の集合が{0, 1}であり、状態遷移図で示されるオートマトンがある。0011001110を入力記号とした場合の出力記号はどれか。ここで、S1は初期状態を表し、グラフの辺のラベルは、入力/出力を表している。

[回答選択肢]

ア 0001000110
イ 0001001110
ウ 0010001000
エ 0011111110

[解く]

まずオートマトンとは何だ

<オートマトン>
現在の状態と入力信号の組み合わせだけによって次に遷移する状態が決まるモデル。
ラベルの入力は遷移条件、最終的な結果はラベルの出力の累積となる。

オートマトンとフローチャートを対比してみる。

このモデルの場合、入力が”01011″だと、出力は”10100″となる。(順に辿ればいいだけだね。)

問題は、入力が”0011001110″なので、出力は”0001000110″となる。

※設問中にある”グラフ”とは「点と辺の集まりのこと」を言っている。

 

問23.論理回路

(問題はネットで探して)

[解く]

回路の種類は先頭ページに記載しているので、順番に当てはめていけばわかる。

答えは「ア」
※解いたときは最初は最後の回路に○が付いている NOT なのを見逃して、まちがえてしまった。

 

問32.サブネットマスク

[問題]

次のネットワークアドレスとサブネットマスクをもつネットワークがある。このネットワークをあるPCが利用する場合、そのPCに割り振ってはいけないIPアドレスはどれか。

ネットワークアドレス:200.170.70.16
サブネットマスク:  255.255.255.240

[回答選択肢]

ア 200.170.70.17
イ 200.170.70.20
ウ 200.170.70.30
エ 200.170.70.31

[解く]

ネットワークアドレスとサブネットマスクの下位8ビットをビットで表示してみる。

(16)10 =(00010000)2
(240)10=(11110000)2

下位4ビットがホストアドレス、つまり上位28ビットがネットワークアドレスとして固定される。
つまりホストアドレスは「=(00010000)2=(16)10」~「(00011111)2=(31)10」までとなるが、このうち、ホスト部がすべて’0’はネットワークアドレスを表し、すべて’1’はブロードキャストアドレスを表すため使用できない。
つまり使用可能なホストアドレスは「(00010001)2=(17)10」~「(00011110)2=(30)10」となる。
よって「エ」の「200.170.70.31」は割り振ってはいけない。

※ブロードキャストアドレス・・・ネットワーク内のすべての端末にデータを送信するために使われる特殊なアドレス

 

問44.SMTPの仕組み

[問題]

社内ネットワークとインターネットの接続点に、ステートフルインスペクション機能をもたない、静的なパケットフィルタリング型のファイアウォールを設置している。このネットワーク構成において、社内のPCからインターネット上のSMTPサーバに電子メールを送信できるようにするとき、ファイアウォールで通過を許可するTCPパケットのポート番号の組み合わせはどれか。ここで、SMTP通信にはデフォルトのポート番号を使うものとする。

 

[回答選択肢]

[解く]

以下決まり事をおぼえる。
(1) SMTPは電子メールを転送するプロトコルで通信にTCP/25ポートを使用する。
(2) 電子メールを送信するのに必要な通信は「①発信パケット(PCからSMTPサーバ)」と「②応答パケット(SMTPサーバからPC)」。
(3) PCはwell-knownポート以外の1024番以降のポートを通信に使用する。
※well-knownポート・・・0番から1023番のポート。著名なサービスやプロトコルで利用するために予約されている。

以上から通信に使用されるポートは「SMTPが25」、「PCが1024以上」となり、
この組み合わせの通信を許可すればよいことになり、この組み合わせは「ウ」となる。

※TCP/110ポートはPOPで使用される。

 

問53.3乗根

[問題]

システム開発において、工数(人月)と期間(月)の関係が次の近似式で示されるとき、工数が4,096人月のときの期間は何か月か。

期間 = 2.5 × 工数1/3

[回答選択肢]

ア 16
イ 40
ウ 64
エ 160

[解く]

1/3のべき乗(3乗根)を知っていれば解ける。

3乗根は3乗してその数値になる値、「工数1/3」は「3√工数」とも表現する。

工数が4,096なので、あたりをつけるために以下を考える。
103=1,000
203=8,000

以上から、「工数1/3」は「10から20の間」と目星がつく。
なので、期間は「25から50の間」となり、
答えは「イ」となる。

《別の解法》
「4,096」ってなんかPC周りでよく見る数字じゃね?ということで2進数変換。
「(4096)10=(1000000000000)2」。ここで「(4096)10=(212)10」であることに気づく。
「工数1/3」は「212*(1/3)」となるので、「24」となり、「工数1/3=16」であることがわかる。
なので、期間は「2.5×16=40」となる。

ついでに、平方根やlogを整理。

平方根 「√a = b」
平方(2乗)するとaになるb。(b2 = a)
3乗根 3√a = b」
3乗するとaになるb。(b3 = a)
分数乗 「a(1/2) = √a」
1/2乗は平方根と同じ。
「a(1/3) = 3√a」
1/3乗は3乗根と同じ。
※「a(1/2)」を2乗するとaになる(平方根と同じ)。
「a(1/2)*2 = a1 = a」
マイナス乗 「a-2 = 1/a2
a2の逆数。
※乗数が1増えると掛ける回数が1増える。
逆に考えると乗数が1減ると割る回数が1増えると考えてみる。

  • a2 = a*a
  • a1 = a
  • a0 = 1
  • a-1 = 1/a
  • a2 = 1/(a*a)
log 「loga(b) = c」
aをbにする乗数はc。
関係性を乗数で表すと「ac = b」。
「b = a(1/2) = √a」 → 「loga(b) = 1/2」