基本情報技術者試験の公開問題を解こう!(令和6年度・科目B)(2)「2進数と解釈した文字列を整数値に変換」

スポンサーリンク
コンピューター IT系

基本情報技術者試験の令和6年度の公開問題(科目B)を解いてみよう。

テキスト  AI によって生成されたコンテンツは間違っている可能性があります。

正解:エ

この問題は、2進数の文字列を10進数に変換する処理を行う関数 convDecimal において、ループ内でどのように計算すればよいかを問う問題である。


まず問題の目的を整理しよう

入力の例

“10010”

これは 2進数 である。10進数で表すと、
1×2⁴ + 0×2³ + 0×2² + 1×2¹ + 0×2⁰ = 16 + 0 + 0 + 2 + 0 = 18
となる。


プログラムの流れを見てみよう

○整数型: convDecimal(文字列型: binary)  
整数型: i, length, result ← 0
  length ← binaryの文字数
  for (i を 1 から length まで 1 ずつ増やす)
    result ← □
  endfor
  return result

ここで result ← □ に入るべき式を選ぶことになる。


2進数 → 10進数 の計算方法の基本

一般的に、左から右に順に見ていく場合、次のように計算する。

例:binary = “10010”

処理の流れ
1. 初期値: result = 0
2. ‘1’ → result = 0×2 + 1 = 1
3. ‘0’ → result = 1×2 + 0 = 2
4. ‘0’ → result = 2×2 + 0 = 4
5. ‘1’ → result = 4×2 + 1 = 9
6. ‘0’ → result = 9×2 + 0 = 18

これを見ると、「result × 2 + 現在の文字の数値(0または1)」という形で計算していることがわかる。


それでは、各選択肢を確認しよう

:result + int(binary の (length - i + 1)文字目の文字)
 → 単なる足し算。×(不正解)

:result + int(binary の i文字目の文字)
 → 単なる足し算。×(不正解)

:result × 2 + int(binary の (length - i + 1)文字目の文字)
 → 正しい式だが、右から左(下位桁から)処理する形になっている。
プログラムは i = 1 to length(つまり左から)なので、順序が合っていない。×(不正解)

:result × 2 + int(binary の i文字目の文字)
 → 正しい式で、左から順に処理する形にも合っている。(正解)


したがって、正しい選択肢は、
result × 2 + int(binary の i文字目の文字)
である。

コメント

タイトルとURLをコピーしました