ITパスポート 令和6年度 問85
アルゴリズムとプログラミング
基数に関する問題
関数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
| a | b | |
|---|---|---|
| ア | (2 の i 乗)− 1 | integerNum × digitNum × exponent |
| イ | (2 の i 乗)− 1 | integerNum + digitNum × exponent |
| ウ | 2 の(i − 1)乗 | integerNum × digitNum × exponent |
| エ | 2 の(i − 1)乗 | integerNum + digitNum × exponent |
- ア (2 の i 乗)− 1 integerNum × digitNum × exponent
- イ (2 の i 乗)− 1 integerNum + digitNum × exponent
- ウ 2 の(i − 1)乗 integerNum × digitNum × exponent
- エ 2 の(i − 1)乗 integerNum + digitNum × exponent
答えと解説
✓ これが正解エ 2 の(i − 1)乗 integerNum + digitNum × exponent
解説
末尾から数えた桁の重みを掛けて、順に足していきます。
2進数を十進数に直すのは、基数が二である数の読み替えです。引数は文字列として渡されるので、一文字ずつ数に直して扱います。直すには、それぞれの桁の数字に、その桁の重みを掛けて足し合わせます。重みは末尾から数えて一つ目が一、二つ目が二、三つ目が四というように、二を掛けながら大きくなります。変数は末尾から数えた位置を表しているので、その位置が一のときに重みが一になる必要があります。よって重みは二の、位置から一を引いた乗になります。そして、その桁の数字と重みを掛けたものをそれまでの合計に足し込みます。よって合計に掛けるのではなく足す形が入ります。合計に掛けてしまうと、最初が零なので何を掛けても零のままになります。
ほかの選択肢の解説
- ア (2 の i 乗)− 1 integerNum × digitNum × exponent:重みを二の乗から一を引いたものとし、さらに合計へ掛け算で足し込むとしています。重みの作り方も足し込み方も誤っており、最初が零なので結果は必ず零になります。二か所とも取り違えた形です。
- イ (2 の i 乗)− 1 integerNum + digitNum × exponent:足し込み方は正しいのですが、重みを二の乗から一を引いたものとしています。末尾の桁では二の一乗から一を引いて一になり合いますが、その次の桁では二の二乗から一を引いて三になり、二であるべき重みと合いません。末尾から二つ目の桁で確かめれば見つかります。
- ウ 2 の(i − 1)乗 integerNum × digitNum × exponent:重みの作り方は正しいのですが、合計へ掛け算で足し込むとしています。合計は最初が零なので、何を掛けても零のままとなり、答えにたどり着けません。初期値を見れば成り立たないと分かります。
関連用語
- 2進数小数点より左の桁の重みが、一、二、四と倍になっていく数の表し方です。
- 引数呼び出す側と呼び出される側の間で受け渡すデータです。
- 組合せいくつかの中から、向きや順を区別せずに何個かを選ぶ選び方の数です。
出典:令和6年度 ITパスポート試験 問85(改変:原典の図表をテキストに書き起こした)
解説は当サイト独自のもので、IPA(独立行政法人情報処理推進機構)とは関係ありません。
関連問題
- 令和8年度 問74:
表計算に 関する 問題 (2進数) - 令和8年度 問67:
整列に 関する 問題 (引数) - 令和8年度 問85:
素数に 関する 問題 (引数) - 令和6年度 問62:
配列に 関する 問題 (引数) - 令和3年度 問66:
RGBに 関する 問題 (2進数)
同じ分野の問題
誤りを見つけたら報告する