令和4年度技術士第一次試験:I 基礎科目:I-2-5

令和4年度技術士試験問題
目次

問題

(出典:日本技術士会のホームページ 過去問題(第一次試験) 基礎科目 令和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になっています。
フローチャートに従って、値を入れて行ってみてください。

Technology-Coaching-refreshu
ツトムさん

最初のビットは、そのまま\(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\]
になります。

Technology Coaching refresh
マナブ先生

次はどうなりますか?

ツトムさん

次のビットは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\]
となりますからね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次