「みちともデジタル」は、ITパスポート試験の合格を目指す方を応援する無料学習サイトです。

【擬似言語問題の解き方】ITパスポート過去問 令和8年問67解説

ITパスポート擬似言語(疑似言語)問題解説(令和8年問67) 特集
スポンサーリンク

問題(令和8年 問67)

手続sortは,要素数が2以上の整数型の配列を引数numberArrayで受け取り,その要素を昇順に並べ替えた結果を出力する。手続sort の動作確認のために,処理の途中でjの値とworkArrayの全ての要素を出力する。配列numberArrayを{3, 5, 1, 2,4}とし,手続sortをsort(numberArray)として呼び出したとき, jの値が3と出力された直後のworkArrayの全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。

{プログラム}説明
〇sort (整数型の配列: numberArray)
整数型: minIndex, j, k変数として minlndex, j, kを使う
整数型の配列: workArray← numberArray // 配列の複製を作る
for (j を1から(workArrayの要素数ー1)まで1ずつ増やす)workArrayの要素が5個あるので、j=1から4まで繰り返す
// j番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を
//一つ求める
繰り返し処理で行う処理の説明
minlndex← jjの値をminlndexに代入する
for (kを(j+ 1)から workArrayの要素数まで 1ずつ増やす)workArrayの要素が5個あるので、k=j+1から5まで繰り返す
if (workArray[k]がworkArray[minlndex]より小さい)workArray[k]がworkArray[minlndex]より小さいとき
minlndex← k kの値をminlndexに代入する
end if判別処理の終了
end for繰返し処理の終了
workArray[j]とworkArray[minlndex]の値を入れ替える
//動作確認のために, jの値とworkArrayの全ての要素を出力する途中経過確認の処理を説明
jの値を出力する繰返し処理の段階を示している
workArrayの全ての要素を先頭から順にコンマ区切りで出力するworkArrayの出力(途中経過)
end for繰返し処理の終了
workArrayの全ての要素を先頭から順にコンマ区切りで出力するworkArrayの出力(最終結果)
 1, 2, 3, 4, 5
 1, 2, 3, 5, 4
 4, 5, 3, 2, 1
 5, 4, 3, 2, 1
 

解き方(令和8年 問67)

問題の要点を読み取る

はじめに、問題文から、次のことを読み取ります。

問題文読み取れること
手続sortは,要素数が2以上の整数型の配列を(2)引数numberArrayで受け取り,(1)その要素を昇順に並べ替えた結果を出力する。手続sort の動作確認のために,処理の途中でjの値と(3)workArrayの全ての要素を出力する。配列(4)numberArrayを{3, 5, 1, 2,4}とし,手続sortをsort(numberArray)として呼び出したとき,(5) jの値が3と出力された直後のworkArrayの全ての要素の出力はどれか。ここで,配列の要素番号は1から始まる。(1)手続sort:
入力した数字の並びを、昇順(小→大)に並べ替えて出力するプログラム
(2)手続sortの入力(引数):
numberArray
(3)手続sortの出力(戻り値):
workArray
(4)(5)この問題で求めるもの:
入力{3, 5, 1, 2,4}について、
j=3のときの、workArrayの数字の並び

(ただし、jが何を示すか、問題文に説明なし)


プログラム処理のおおよそをつかむ

次に、プログラムが何をしているのか、処理のおおよそをつかみましょう。

プログラム中のfor~end for、出力などの用語を手がかりにして、かんたんな図で表すと、処理がわかりやすくなります。

図から「j は、並べ替えのために繰り返す回数」と読み取れます。

{プログラム}令和8年問67 手続きsortイメージ
〇sort (整数型の配列: numberArray)
整数型: minIndex, j, k
整数型の配列: workArray← numberArray // 配列の複製を作る
for (j を1から(workArrayの要素数ー1)まで1ずつ増やす)
// j番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を
//一つ求める
minlndex← j
for (kを(j+ 1)から workArrayの要素数まで 1ずつ増やす)
if (workArray[k]がworkArray[minlndex]より小さい)
minlndex← k
end if
end for
workArray[j]とworkArray[minlndex]の値を入れ替える
//動作確認のために, jの値とworkArrayの全ての要素を出力する
jの値を出力する
workArrayの全ての要素を先頭から順にコンマ区切りで出力する
end for
workArrayの全ての要素を先頭から順にコンマ区切りで出力する

手続 sortの動作をイメージする

さらに、詳しくプログラムを見ると、2つのfor~end for(背景色:黄と背景色:青)とIF文(背景色:赤)があることに気が付きます。

頭の中で、動画のような動作をイメージしましょう。

問題演習を重ねると、頭の中でイメージできるようになります。

プログラムの確認

手続 sortについて、おおよそのイメージがわかったので、プログラムを一行ごとに確認しましょう。

プログラム説明
〇sort (整数型の配列: numberArray)手続sortに配列numberArrayを入力する
整数型: minIndex, j, k変数として minlndex, j, kを使う
整数型の配列: workArray← numberArray // 配列の複製を作るnumberArrayの値をworkArrayにコピーする
for (j を1から(workArrayの要素数ー1)まで1ずつ増やす)workArrayの要素が5個あるので、j=1から4まで繰り返す
// j番目から末尾までの要素の中で最も小さい値をもつ要素の要素番号を
//一つ求める
繰り返し処理で行う処理の説明
minlndex← jjの値をminlndexに代入する
for (kを(j+ 1)から workArrayの要素数まで 1ずつ増やす)workArrayの要素が5個あるので、k=j+1から5まで繰り返す
if (workArray[k]がworkArray[minlndex]より小さい)workArray[k]がworkArray[minlndex]より小さいとき
minlndex← k kの値をminlndexに代入する
end if判別処理の終了
end for繰返し処理の終了
workArray[j]とworkArray[minlndex]の値を入れ替える
//動作確認のために, jの値とworkArrayの全ての要素を出力する途中経過確認の処理を説明
jの値を出力する繰返し処理の段階を示している
workArrayの全ての要素を先頭から順にコンマ区切りで出力するworkArrayの出力(途中経過)
end for繰返し処理の終了
workArrayの全ての要素を先頭から順にコンマ区切りで出力するworkArrayの出力(最終結果)

プログラムを追って、出力を確認する

最後に、プログラムを追って出力を確認します。

j=1のとき

jkminlndex条件:workArray[k]workArray[minlndex]より小さい
12
(j+ 1から
始める)
1
(minlndex← j
から始める)

要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
3(小)5(大)124
← 偽 →
13
(kを1増やした)
1
要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
3(大)51(小)24
←――― 真 ―――→
14
3
(minlndex← k
を実行した)
14
(kを1増やした)
3
要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
351(小)2(大)4
← 偽 →
15
(kを1増やした)
3
要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
351(小)24(大)
← ―――偽 ―ー-→
153
要素を
入替
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
3

1
51

3
24
153途中経過
出力
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
15324

jは1なので1を足して、もう一度、for~end for(背景色:青)実行します。

j=2のとき

jkminlndex条件:workArray[k]workArray[minlndex]より小さい
23
(j+ 1から
始める
2
(minlndex← j
から始
る)

要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
15(大)3(小)24
← 真 →
33
(minlndex← k
を実行した)
4
(kを1増やした)
3
要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
153(大)2(小)4
← 真 →
244
(minlndex← k
を実行した)
5
(kを1増やした)
4
要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
1532(小)4(大)
← 偽 →
254
要素を
入替
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
15

2
32

5
4
254途中経過
出力
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
12354

jは2なので1を足して、さらに、for~end for(背景色:青)実行します。

j=3のとき

jkminlndex条件:workArray[k]workArray[minlndex]より小さい
34
(j+ 1から
始める)
3
(minlndex← j
から始める)

要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
123(小)5(大)4
← 偽 →
35
(kを1増やした
3
要素を
比較
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
123(小)54(大)
←――― 偽 ―――→
353
要素を
入替
(変化なし)
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
123

3
54
353途中経過
出力
workArray[1]workArray[2]workArray[3]workArray[4]workArray[5]
12354

jの値が3と出力されました。

求めるのは、このときのworkArrayの値です。

よって、正解は  です。

コメント

タイトルとURLをコピーしました