ITパスポート|アルゴリズムとプログラミング 問8
関数 binaryToInteger は、1桁以上の符号なし2進数を文字列で表した値を引数 binaryStr で受け取り、その値を整数に変換した結果を戻り値とする。例えば、引数として“100”を受け取ると、4を返す。プログラム中の a、b に入れる字句の適切な組合せはどれか。
〔プログラム〕
○整数型: binaryToInteger(文字列型: binaryStr)
整数型: integerNum, digitNum, exponent, i
integerNum ← 0
for (i を 1 から binaryStr の文字数 まで 1 ずつ増やす)
digitNum ← binaryStr の末尾から i 番目の文字を整数型に変換した値
// 例: 文字“1”であれば整数値1に変換
exponent ← [ a ]
integerNum ← [ b ]
endfor
return integerNum正解:エ
解説
2 進数を 10 進数にするには、各桁の数字(0 か 1)に、その桁の重みを掛けて、全部を足し合わせます。重みは、末尾から 1 番目が 1(2 の 0 乗)、2 番目が 2(2 の 1 乗)、3 番目が 4(2 の 2 乗)です。
- a
- 2 の (i − 1) 乗。末尾から i 番目の桁の重みです。
- b
- integerNum + digitNum × exponent。桁の数字に重みを掛けた値を、合計に足していきます。
- “100”で確認
- i = 1:0 × 1 = 0、i = 2:0 × 2 = 0、i = 3:1 × 4 = 4。合計は 4 で、例と一致します。
- ア 重みが誤っています。また、掛け算で合計していくと、最初の integerNum が 0 なので、結果は常に 0 になります。
- イ (2 の i 乗) − 1 は、1、3、7 となり、桁の重みになりません。“100”では 1 × 7 = 7 になってしまいます。
- ウ 掛け算で合計していくと、最初の integerNum が 0 なので、結果は常に 0 になります。
- エ 正解。a は 2 の (i − 1) 乗、b は integerNum + digitNum × exponent です。
出典:令和6年度 ITパスポート試験 公開問題 問85(読点「,」を「、」に改変)