問題

(出典:日本技術士会のホームページ 過去問題(第一次試験) 基礎科目 令和4年度)
コーチング対話解答
ツトムさんこの問題は令和2年のI-2-5とほぼ同じですね。
また、\(n\)進数の変換問題も良く問われますね。



今回は、2進数を10進数に変換するアルゴリズムの流れを読み取り、途中の値を求める問題になっています。



単純に各桁へ2のべき乗を掛ける方法ではなく、
\[s←2\times s+a_i\]
を繰り返す方法ですね。



そうですね。
これは、多項式を効率よく計算するホーナー法と同じ考え方です。
情報処理では、アルゴリズムやフローチャートの読解問題としてよく出題されます。
2進数は
\[
a_{n} a_{n-1}…a_{1} a_{0}
\]
となっているので、一番左の数字が\(n\)で、右に行くにしたがって1ずつ減り、一番右が0になっています。
フローチャートに従って、値を入れて行ってみてください。





最初のビットは、そのまま\(s\)に代入されるので、
開始直後は\(s\)には1が代入されます。
次の比較式は\(n\)を一つずつ減らしていく作業ですね。
その次の分岐は\(i\)と0を比較して、
\(i\)が0以上なら計算を続け、
\(i\)が0未満というのは、\(i\)が-1になったら終わりということですね。



そうです。
その次の計算式の意味は分かりますか?



\[s←2\times s+a_i\]
のことですね。
2進数で一桁左にずらすことは、値を2倍することだからですね。
そして新しい最下位ビット\(a_i\)を加えています。



その通りです。
例えば2進数の11に次のビット0を追加すると110になります。
10進数では
\[3×2+0=6\]
となりますね。
今回の場合は、初期値は\(a_n\)は1なので、
\[s=1\]
でした。ループを1回回すとどうなりますか?



\[s=2×1+1=3\]
になります。





次はどうなりますか?



次のビットは0ですので、
\[s=2×3+0=6\]
になります。



そうですね。
ここまでは問題文に示されていますね。
次を進めてみましょう。



次のビットも0ですので、
\[s=2×6+0=12\]
になります。
よって、アは12です。



その調子で進めていきましょう。



次のビットは1で、
\[s=2×12+1=25\]
となりますので、イは25です。
次は0で、
\[s=2×25+0=50\]
となりますので、ウは50です。
次は1で、
\[s=2×50+1=101\]
となりますので、エは101です。
次は最後になりますが1で、
\[s=2×101+1=203\]
となりますので、問題文に与えられている203と一致しました。
よって、ア=12、イ=25、ウ=50、エ=101となり、
答えは⑤ です。



そうですね。
今回の問題は2進数を10進数に変換する方法を知らなくても、フローチャートに従って計算すると答えが求められるようになっていましたが、今回のような方法も知っておいた方がいいですよ。



10進法も同じように数字列から計算することができるのですね。
\[s←10×s+a_i\]
となりますからね。

