分類テクノロジ系 » アルゴリズムとプログラミング » アルゴリズムとプログラミング新しい試験範囲外(2027年度からの新しい試験には出ない分野)年度令和6年度の100問の一覧
関数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 の (2 の i 乗)-1 は 1、3、7、… となり、桁の重み 1、2、4、… と合いません。b も、integerNum は 0 から始まるので、かけ算では最後まで 0 のままです。
イ× b の足し込み方は合っていますが、a の (2 の i 乗)-1 では重みが 1、3、7 になり、“100” は 1×7=7 になって例の 4 と合いません。
ウ× a の 2 の (i-1) 乗は桁の重みとして合っていますが、b がかけ算なので、integerNum は 0 から変わらず、どの入力でも 0 を返します。
エ○ 正解 a で右から i 番目の桁の重み 2 の (i-1) 乗を求め、b でその桁の数字×重みを合計に足していきます。“100” では 0+0+1×4=4 になり、例と合います。
解説
2進数の各桁には、右端から順に 1、2、4、8、… という重みがあります。右から i 番目の桁の重みは 2 の (i-1) 乗です。2進数を整数に直すには、各桁の数字(0か1)にその桁の重みをかけ、全部を足します。プログラムは、文字列の末尾(右端)から1文字ずつ取り出し、digitNum にその桁の数字、exponent にその桁の重みを入れて、integerNum に足し込んでいく形です。
a には右から i 番目の桁の重み、b には「これまでの合計+この桁の数字×重み」が入ります。例の “100” でたどると、4 が返ることを確かめられます。
i=1:末尾から1番目“0” digitNum=0 exponent=2の0乗=1 integerNum=0+0×1=0 i=2:末尾から2番目“0” digitNum=0 exponent=2の1乗=2 integerNum=0+0×2=0 i=3:末尾から3番目“1” digitNum=1 exponent=2の2乗=4 integerNum=0+1×4=4 a が (2 の i 乗)-1 のとき:exponent は 1,3,7 → “100” は 7(例と合わない) b が積のとき:integerNum は 0 から始まるので、何をかけても 0 のまま
教科書 g37この問題の知識
アルゴリズムは問題を解くための手順で、順次・選択・繰返しの3つで組み立てます。流れ図と擬似言語の読み方、変数の値を書き出すトレース、空欄の埋め方、線形探索と2分探索、選択ソート・バブルソート・クイックソートと併合までを、公開問題を解ける形でまとめます。
Udemy の ITパスポート講座を、受講者数・★評価・口コミで比べたページです(広告を含みます)。
過去問教科書の一覧(現行の試験の順)教科書の一覧(新しい試験の順)
出典:IPA「ITパスポート試験 公開問題」令和6年度 問85。問題文と選択肢は改変せずに引用しています(表・図は文字に書き起こしたもの)。正解は IPA 公表の解答例によります。

