配列要素の右シフトと末尾要素の先頭移動

正解は「エ」です。 本プログラムは、配列 `data` の末尾要素の値を先頭に移動させ、それ以外の全要素を1つずつ右(後方)へシフトさせる巡回シフト処理を行っています。 1. 要素の代入順序: 配列の各要素を右へシフトさせる際、もし添字の小さい方(前)から順に `data  i  ← data[i - 1]` を実行すると、例えば `data  2  ← data  1  ` を実行した時点で元の `data  2  ` の値が上書きされて失われてしまい、以降の要素がすべて `data  1  ` の値で埋め尽くされてしまいます。 したがって、**末尾(後ろ)側から前側へ向かって順番に代入処理を行う**必要があります。 2. ループ範囲の検証: ・末尾要素 `data  len  ` には直前の `data[len - 1]` を格納するため、最初のループでは `i = len` となる必要があります。 ・最後にシフトされる要素は `data  2  ← data  1  ` であるため、ループ終了時の添字は `i = 2` となります。 ・直前の値 `data[i - 1]` を後ろにコピーしながら添字を1ずつ減らしていくため、ループ条件は「`len から 2 まで 1 ずつ減らす`」となります。 ループ終了後、事前に退避しておいた末尾の値 `top` を `data  1  ` に格納することで、正しい巡回移動が完了します。 2から増やしていくと、更新前の値が次々に失われてしまい正しいシフトができません。 先頭側から増やしていくと値が上書きされるため不適切です。 開始が `len - 1` だと、末尾要素 `data  len  ` へのコピーが行われず値が欠落してしまいます。

次のプログラム中の  a  に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1 から始まる。

次のプログラムは,整数型の配列data の末尾の要素の値を先頭の要素に移動する。この際,末尾以外の各要素の値は,一つずつ後ろの要素に移動する。

〔プログラム〕

整数型の配列: data ← {1, 2, 3, 4, 5, 6, 7, 8, 9}
整数型: top, i
整数型: len ← dataの要素数
top ← data[len]
for (i を [ a ] )
  data[i] ← data[i - 1]
endfor
data[1] ← top
出典令和8年度 基本情報技術者試験 科目B 問1
ア
2 から len - 1 まで 1 ずつ増やす
イ
2 から len まで 1 ずつ増やす
ウ
len - 1 から 2 まで 1 ずつ減らす
エ
len から 2 まで 1 ずつ減らす