科目B
令和6年度 基本情報技術者試験 科目B 公開問題 問2
次のプログラム中の に入れる正しい答えを,解答群の中から選べ。
関数 convDecimal は,引数として与えられた,“0”と“1”だけから成る,1 文字以上の文字列を,符号なしの 2 進数と解釈したときの整数値を返す。例えば,引数として“10010”を与えると 18 が返る。
関数 convDecimal が利用する関数 int は,引数で与えられた文字が“0”なら整数値 0 を返し,“1”なら整数値 1 を返す。
〔プログラム〕
○整数型: convDecimal(文字列型: binary)
整数型: i, length, result ← 0
length ← binaryの文字数
for (i を 1 から length まで 1 ずつ増やす)
result ←
endfor
return result
答えを選ぶ
出典:令和6年度 基本情報技術者試験 科目B 公開問題 問2(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:エ
覚える知識
2進数文字列の10進変換(左から result×2+桁)
n 進数の文字列を左から読み、「それまでの値×n+次の桁」をくり返すと 10 進の値になる。桁ごとの重み(2 のべき)を別に計算しなくてよい。
この問題で必要なこと
左の桁から順に読み、そこまでの値を 2 倍して次の桁を足していく(ホーナー法)。"10010" をトレースすると、0→1→2→4→9→18 となり 18 が返る。i は 1 から増えるので、i 文字目=左から順に読むことになる。正解は エ「result × 2 + int(binary の i文字目の文字)」。
ひっかけ
ア・イ は 2 倍しないので、1 の個数を数えるだけになる("10010"→2)。ウ は右の桁から読んで ×2 するので、桁の並びが逆の数になる("10010"→9)。