分類テクノロジ系 » アルゴリズムとプログラミング » アルゴリズムとプログラミング新しい試験範囲外(2027年度からの新しい試験には出ない分野)年度令和5年度の100問の一覧
手続printArrayは,配列integerArrayの要素を並べ替えて出力する。手続printArrayを呼び出したときの出力はどれか。ここで,配列の要素番号は1から始まる。
〔プログラム〕
○printArray()
整数型: n, m
整数型の配列: integerArray ← {2, 4, 1, 3}
for (n を 1 から (integerArray の要素数 - 1) まで 1 ずつ増やす)
for (m を 1 から (integerArray の要素数 - n) まで 1 ずつ増やす)
if (integerArray[m] > integerArray[m + 1])
integerArray[m] と integerArray[m + 1] の値を入れ替える
endif
endfor
endfor
integerArray の全ての要素 を先頭から順にコンマ区切りで出力する
正解と解説
正解:ア
ア○ 正解 隣どうしで左が大きいときに入れ替えるので、最後は小さい順の 1,2,3,4 になります。
イ× 1,3,2,4 は 3 と 2 が逆の並びです。途中の並びは 2,1,4,3 → 2,1,3,4 → 1,2,3,4 で、この並びは一度も出てきません。
ウ× 値 1,2,3,4 が元の配列で何番目にあったか(1は3番目、2は1番目、3は4番目、4は2番目)を並べたものです。出力するのは要素番号ではなく値です。
エ× 大きい順の並びです。左が小さいときに入れ替える条件ならこうなりますが、このプログラムは左が大きいときに入れ替えます。
解説
このプログラムは、隣どうしの要素を比べて、左が右より大きければ入れ替えます。内側の for を1周すると、まだ並んでいない範囲で最も大きい値が右端まで運ばれます。外側の for で範囲を1つずつ縮めながらこれを繰り返す並べ替えを、バブルソートと呼びます。1周ごとに残りの最大値が右端に決まっていくので、最後は小さい順に並ぶことになります。
実際に追うと次のとおりです。
初め:2,4,1,3 n=1(m は 1〜3) m=1:2 と 4 → そのまま → 2,4,1,3 m=2:4 と 1 → 入れ替え → 2,1,4,3 m=3:4 と 3 → 入れ替え → 2,1,3,4 n=2(m は 1〜2) m=1:2 と 1 → 入れ替え → 1,2,3,4 m=2:2 と 3 → そのまま → 1,2,3,4 n=3(m は 1 だけ) m=1:1 と 2 → そのまま → 1,2,3,4 出力:1,2,3,4
if の比較が「左>右なら入れ替える」なので、並びは小さい順(昇順)になります。
教科書 g37この問題の知識
アルゴリズムは問題を解くための手順で、順次・選択・繰返しの3つで組み立てます。流れ図と擬似言語の読み方、変数の値を書き出すトレース、空欄の埋め方、線形探索と2分探索、選択ソート・バブルソート・クイックソートと併合までを、公開問題を解ける形でまとめます。
Udemy の ITパスポート講座を、受講者数・★評価・口コミで比べたページです(広告を含みます)。
過去問教科書の一覧(現行の試験の順)教科書の一覧(新しい試験の順)
出典:IPA「ITパスポート試験 公開問題」令和5年度 問60。問題文と選択肢は改変せずに引用しています(表・図は文字に書き起こしたもの)。正解は IPA 公表の解答例によります。

