「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

出典:令和8年度 ITパスポート試験(IP) 問67

difficulty難易度設定
スポンサーリンク

予備知識


用語意味
関数処理のまとまり。何かを入れると何かを計算して何かを返してくれるやつ
引数関数に入れる値
変数プログラミング言語における「値を入れておく箱」
配列複数の変数がくっついたもの
配列の要素配列の中身の変数ひとつひとつ
配列の要素数配列の中にある変数の数
整数型変数の種類のひとつで「その箱には(桁数の大きくない)整数を入れていいよ」な決まり
昇順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」が正解です。


スポンサーリンク
書籍画像038
書籍画像011

書籍画像
わわわ説明術コラム
宣伝だよ
つくって、壊して、直して学ぶ Git&GitHub 入門
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践