出典:令和8年度 ITパスポート試験(IP) 問67
予備知識
| 用語 | 意味 |
|---|---|
| 関数 | 処理のまとまり。何かを入れると何かを計算して何かを返してくれるやつ |
| 引数 | 関数に入れる値 |
| 変数 | プログラミング言語における「値を入れておく箱」 |
| 配列 | 複数の変数がくっついたもの |
| 配列の要素 | 配列の中身の変数ひとつひとつ |
| 配列の要素数 | 配列の中にある変数の数 |
| 整数型 | 変数の種類のひとつで「その箱には(桁数の大きくない)整数を入れていいよ」な決まり |
| 昇順 | 1、2、3、4、5……のように、最初が一番小さくて、徐々に大きくなる順番 |
問題
| 問題文 |
|---|
| 手続sortは,要素数が2以上の整数型の配列を引数numberArrayで受け取り,その要素を昇順に並べ替えた結果を出力する。手続sortの動作確認のために,処理の途中でjの値とworkArrayの全ての要素を出力する。配列numberArrayを{3,5,1,2,4}とし,手続sortをsort(numberArray)として呼び出したとき,jの値が3と出力された直後のworkArrayの全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。 [プログラム] 〇sort(整数型の配列: numArray) 整数型: minIndex, j, k 整数型の配列: workArray ← numArray // 配列の複製を作る for(jを1から(workArrayの要素数-1)まで1ずつ増やす) // j番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を // 一つ求める minIndex ← j for(kを(j+1)からworkArrayの要素数まで1ずつ増やす) if(workArray[k]がworkArray[minIndex]より小さい) minIndex ← k endif endfor workArray[j]とworkArray[minIndex]の値を入れ替える // 動作確認のために,jの値とworkArrayの全ての要素を出力する jの値を出力する workArrayの全ての要素を先頭から順にコンマ区切りで出力する endfor workArrayの全ての要素を先頭から順にコンマ区切りで出力する |
| ピヨ意訳:以下の処理において、最初の配列が「numberArray{3,5,1,2,4}」だったとき、jの値が3と出力された直後のworkArrayの中身は、どうなっている? [プログラム] 〇sort(整数型の配列: numArray) 整数型: minIndex, j, k 整数型の配列: workArray ← numArray // 配列の複製を作る for(jを1から(workArrayの要素数-1)まで1ずつ増やす) // j番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を // 一つ求める minIndex ← j for(kを(j+1)からworkArrayの要素数まで1ずつ増やす) if(workArray[k]がworkArray[minIndex]より小さい) minIndex ← k endif endfor workArray[j]とworkArray[minIndex]の値を入れ替える // 動作確認のために,jの値とworkArrayの全ての要素を出力する jの値を出力する workArrayの全ての要素を先頭から順にコンマ区切りで出力する endfor workArrayの全ての要素を先頭から順にコンマ区切りで出力する |
| 解答選択肢 | |
|---|---|
| ア | 1,2,3,4,5 |
| ピヨ意訳:- | |
| イ | 1,2,3,5,4 |
| ピヨ意訳:- | |
| ウ | 4,5,3,2,1 |
| ピヨ意訳:- | |
| エ | 5,4,3,2,1 |
| ピヨ意訳:- | |

正解
| 正解 | |
|---|---|
| イ | 1,2,3,5,4 |
| ピヨ意訳:- | |
ピヨピヨ解説
「配列numberArrayを{3,5,1,2,4}」なので、workArrayは最初の時点で{3,5,1,2,4}です。
「jの値が3と出力された直後の」なので「for(jを1から(workArrayの要素数-1)まで1ずつ増やす)」の中の処理を3回やった時点の出力です。
minIndex ← j
for(kを(j+1)からworkArrayの要素数まで1ずつ増やす)
if(workArray[k]がworkArray[minIndex]より小さい)
minIndex ← k
endif
endfor
workArray[j]とworkArray[minIndex]の値を入れ替える
の部分は、ゴチャゴチャ書いてありますが
(jより大きい要素番号で)値が一番小さい要素をworkArray[j]と入れ替える
と言っています。
for(kを(j+1)からworkArrayの要素数まで1ずつ増やす)
if(workArray[k]がworkArray[minIndex]より小さい)
minIndex ← k
endif
endfor
の部分は、要素番号「k」のやつの値が要素番号「minIndex」のやつの値より小さかったら要素番号「k」を要素番号「minIndex」にするよ!と言っています。
つまり、一番値が小さい要素の要素番号を「minIndex」に設定するように頑張っているわけです。
だから、for文内の処理を1回やると
{3,5,1,2,4}
は
{1,5,3,2,4}
になります。
一番左にあった要素と値が一番小さい要素を入れ替えました。
for文内の処理を、もう一度やると
{1,5,3,2,4}
は
{1,2,3,5,4}
になります。
左から2番目にあった要素と残りの要素の中で値が一番小さい要素を入れ替えました。
for文内の処理を、もう一度やると
{1,2,3,5,4}
は
{1,2,3,5,4}
になります。
左から3番目にあった要素と残りの要素の中で値が一番小さい要素を入れ替えました……と言いたいところですが、左から3番目にあった要素が値が一番小さい要素なので、そのままです。
これで処理が3回終わりました。
この時点で「j」の値は「3」になっています。
ということで「イ:1,2,3,5,4」が正解です。






