配列に要素を入れたり、消したりする回です。ここは書き方が2種類あって、混ざると読めなくなります。末尾に足すときだけ、専用の書き方があります。
第2部 定番処理の型 全26回
A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消すA3-12次元配列の走査A3-22次元配列の集計A4-1文字列を1文字ずつA4-2文字列照合A5-1交換して並べるA5-2挿入ソートA6分割して並べるA7-12分探索A7-2ハッシュ表探索A8-1再帰とはA8-2再帰のトレースA9スタックとキューA10-1リストを読むA10-2リストの挿入と削除A11木構造A12木の巡回A13グラフA14AI・データを題材にしたプログラムA15ファイル処理
まず、通しで見る
1分50秒ほどの動画です(音声つき)。なぜ「うしろから写す」のかが分かります。前半が正しい順、後半は同じことを前からやった場合で、まだ写していない値が1つずつ潰れていくのが見えます。この誤りは試験でそのまま選択肢に置かれます。一度見ておくと、選択肢を読んだ時点で外せます。
動画で追いかけるのは、このプログラムです。
整数型の配列: a ← {3, 5, 8, 9}
整数型: ireru ← 7
整数型: ichi ← 2
整数型: i
aの末尾 に ireruの値 を追加する
for (i を aの要素数 から ichi + 1 まで 1 ずつ減らす)
a[i] ← a[i - 1]
endfor
a[ichi] ← ireru
2番目に 7 を割り込ませて、a は {3, 7, 5, 8, 9} になります。
途中に入れる(2分8秒・音声つき)
再生できないときは、この下の図と説明で同じ内容を追えます。
ここから、同じ内容を1つずつ確かめていきます。
プログラムを、上から読む
まず、行ごとの役割です。途中に割り込ませる書き方は、いつもこの3段構えになります。
上から読む
-
整数型の配列: a ← {3, 5, 8, 9} 整数型: ireru ← 7 整数型: ichi ← 2 整数型: i材料を並べる。入れる先の配列a、入れたい値ireru(7)、入れる位置ichi(2番目)、番号を入れておく箱iです。 -
aの末尾 に ireruの値 を追加する
まず、箱を1つ増やす。末尾に足す専用の書き方です。これでaは5個ぶんの長さになります。 -
for (i を aの要素数 から ichi + 1 まで 1 ずつ減らす) a[i] ← a[i - 1] endfor
うしろへ送る。1つ前の値を写して、入れたい場所を空けます。1 ずつ減らすなのでうしろから進みます。なぜこの向きなのかは、このあとの節で見ます。 -
a[ichi] ← ireru
空いた場所に入れる。2番目が空いたので、そこへ 7 を入れます。ここまででaは {3, 7, 5, 8, 9} です。
末尾に追加は、専用の書き方がある
いちばんよく出てくるのがこれです。
整数型の配列: out ← {3, 5}
outの末尾 に 7 を追加する
out は 3, 5, 7 になります。実際の出題にも、この形がそのまま出てきます。outの末尾 に in[1]の値 を追加する のように使われます。
末尾に追加すると、うしろに1つ増える
整数型の配列: out ← {3, 5}
もとの並び
13
25
outの末尾 に 7 を追加する のあと
13
25
37
要素数も 2 → 3 に増える。場所を空ける手間は要らない
末尾だけは、専用の書き方でうしろに足せる
末尾に足すときは、何も準備が要らない
場所を空ける必要はありません。要素数も自動で1つ増えます。
だから、答えを1つずつ貯めていくときによく使われます。空の配列を用意しておいて、条件に合ったものだけ末尾に足していく ── これが定番の形です(A2-1)。
途中に入れるときは、うしろから空ける
途中に割り込ませる専用の書き方はありません。自分で場所を空けます。
空け方に順番があります。うしろの要素から動かしてください。
途中に入れるときは、うしろから写す
整数型の配列: a ← {3, 5, 8, 9} / [2] に 7 を入れたい
① aの末尾 に ireruの値 を追加する
13
25
38
49
57
[5] は場所を作るためだけ。この 7 は、すぐ上書きされる
② i = 5:a[5] ← a[4]
13
25
38
49
59
③ i = 4:a[4] ← a[3]
13
25
38
48
59
④ i = 3:a[3] ← a[2]
13
25
35
48
59
ここで [2] が空いた(もとの 5 は、もう [3] に写してある)
⑤ a[ichi] ← ireru
13
27
35
48
59
矢印はいつも右向き。まだ写していない値を、先に写した値で潰さない
擬似言語には要素を割り込ませる書き方が無いので、先に末尾へ1つ追加して伸ばしてから、うしろへ送ります。
1行目の aの末尾 に ireruの値 を追加する で足しているのは、入れたい値の 7 です。ただしこの 7 は、すぐあとの a[5] ← a[4] で 9 に上書きされます。ここでやりたいのは箱を1つ増やすことだけなので、足す値は何でも構いません。7 は最後にあらためて a[ichi] へ入れ直します。
整数型の配列: a ← {3, 5, 8, 9}
整数型: ireru ← 7
整数型: ichi ← 2
整数型: i
aの末尾 に ireruの値 を追加する
for (i を aの要素数 から ichi + 1 まで 1 ずつ減らす)
a[i] ← a[i - 1]
endfor
a[ichi] ← ireru
aの全要素の値を要素番号の順に空白区切りで出力する
「割り込ませる」を1行ずつ動かす
当サイトオリジナルの例題
ループ開始前
配列
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
出力は 3, 7, 5, 8, 9 です。for が ずつ減らす になっているところが要です。うしろの要素から順に写しています。
[2] の値を [3] へ写した時点で、[3] にあった値が消えます。次に [3] を [4] へ写すと、写るのはさっき上書きした値です。
結果、同じ値が並びます。これは試験でよく出る誤答です。
前から写すと、まだ写していない値が潰れる
for を「ichi + 1 から aの要素数 まで 1 ずつ増やす」に変えた場合
① i = 3:a[3] ← a[2]
13
25
35
49
57
もとの [3] にあった 8 が、ここで消えた
② i = 4:a[4] ← a[3]
13
25
35
45
57
写るのは、さっき上書きした 5
③ i = 5:a[5] ← a[4]
13
25
35
45
55
④ a[ichi] ← ireru
13
27
35
45
55
8 と 9 が消えて、5 で埋まった
これが、試験でよく置かれている誤答
覚え方
入れるときは、うしろから。まだ写していない値を、先に写した値で潰さないためです。
消すときは、前から詰める
消すほうも専用の書き方はありません。うしろの要素を前へ詰めます。
消すときは、前から詰める
整数型の配列: a ← {3, 5, 8, 9} / [2] の 5 を消したい
① もとの並び
13
25
38
49
[2] の 5 を消したい
② i = 2:a[2] ← a[3]
13
28
38
49
③ i = 3:a[3] ← a[4]
13
28
39
49
④ kazu ← aの要素数 - 1
13
28
39
49
最後の1つが余る。以降は先頭から kazu(=3)個だけを見る
矢印はいつも左向き。うしろの番号が1つずつ前へずれる
入れるときと向きが逆です。詰めるときは前から順に写します。こちらは、写す先がすでに要らない値なので、潰しても構いません。
整数型の配列: a ← {3, 5, 8, 9}
整数型: kesu ← 2
整数型: i, kazu
for (i を kesu から aの要素数 - 1 まで 1 ずつ増やす)
a[i] ← a[i + 1]
endfor
kazu ← aの要素数 - 1
a は 3, 8, 9, 9 になり、kazu は 3 です。以降は先頭から kazu 個だけを見ます。
詰め終わると、いちばんうしろに同じ値が2つ残ります。擬似言語には要素を減らす書き方が無いので、上のプログラムの kazu のようにいま何個あるかを別の変数で持っておき、そこまでしか見ないという形が使われます。
消したあとに必ず起きること
うしろの要素の番号が、1つずつ前へずれます。消した位置より後ろを指していた変数は、そのままでは1つずれた要素を指します。
ここはくり返しの中で消すときにとくに効きます。消したのに i を進めると、1つ飛ばしてしまいます。
つまずきポイントまとめ
| まちがえ方 | 正しい読み方 |
|---|---|
| 途中に入れるのにも専用の書き方があると思う | 末尾だけ。途中は自分でずらす |
| 入れるときに前から写す | うしろから。前からだと同じ値で埋まる |
| 消すときにうしろから写す | 前から詰める。向きが逆 |
| 消したら要素数が減ると思う | 減らす書き方は無い。最後の1つが余る |
| 消したあとも同じ番号を指す | うしろは1つずつ前へずれる |
次に読む
| A3-1 | 2次元配列の走査 ─ 行と列で場所が決まる |
| A2-3 | 配列から探す ─ 線形探索と「見つからなかったとき」 |
| G4-2 | 配列の読み書き ─ 要素に入れる、取り出す |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
この記事で引用した資料
- 情報処理技術者試験 試験要綱 Ver5.6(2026年7月6日)
- 基本情報技術者試験 シラバス Ver9.2(2026年1月8日)
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
本文の例題は当サイトのオリジナルです。
