PR

ITパスポート 令和6年度 公開問題(過去問) 問85 解説

ITパスポート 令和6年度 公開問題(過去問) 問85 について解説します。

問題

問85 関数 binaryToInteger は、1桁以上の符号なし2進数を文字列で表した値を引数 binaryStr で受け取り、その値を整数に変換した結果を返り値とする。例えば、引数として “100” を受け取ると、4を返す。プログラム中の a, b に入れる字句の適切な組合せはどれか。

解説・解答

「2進数」とは?
2進数(にしんすう)とは、0と1の2つの数字だけで表す数のことです。たとえば、次のように変換されます。

2進数10進数(私たちが普段使う数)
11
102
113
1004
1015

2進数を10進数に直すには?
2進数を10進数に直すときは、右から順番に「2の何乗か」をかけて足していきます。
(例)「101」を10進数に直すには?
「101」は右から読むと「1, 0, 1」で、それぞれの位置に 2 の累乗をかけます。
 右から1番目: 1 × 2^0 = 1 × 1 = 1
 右から2番目: 0 × 2^1 = 0 × 2 = 0
 右から3番目: 1 × 2^2 = 1 × 4 = 4
合計: 1 + 0 + 4 = 5
つまり、2進数「101」は 10進数で「5」になります。

プログラムの流れ
プログラムの目的は、「文字列で渡された2進数」を「整数(10進数)」に直すことです。
(例)binaryStr = "100" の場合
ステップ1: integerNum = 0 に初期化
ステップ2: i = 1 から スタート(文字数の分だけ繰り返し)
binaryStr = “100” の長さは3文字 → i = 1~3 までループします
・i = 1 のとき(右端の文字「0」)
digitNum = 0(文字を数値に変換)
exponent = 2^(1 – 1) = 1
integerNum = 0 + 0 × 1 = 0
・i = 2 のとき(真ん中の文字「0」)
digitNum = 0
exponent = 2^(2 – 1) = 2
integerNum = 0 + 0 × 2 = 0
・i = 3 のとき(左端の文字「1」)
digitNum = 1
exponent = 2^(3 – 1) = 4
integerNum = 0 + 1 × 4 = 4
最終結果:integerNum = 4

aとbに入るのは何か?
上記のプログラムの流れでは、右から i 番目の桁は、指数 (i – 1) を使って 2^(i – 1) を2進数の指数部として exponent に格納しています。
そして、その桁の値 × 2^(i – 1) を integerNum に累積(加算)していくため、integerNum + digitNum × exponen をintegerNumに格納しています。
よって、aには「2 の (i – 1) 乗」、bには「integerNum + digitNum × exponent」が入ります。

以上により、この問題の解答は「エ」になります。