配列に入れる・消す|末尾への追加とずらし方【基本情報技術者試験 科目B】

現行FE シラバス Ver9.2 準拠擬似言語の記述形式は2022年から変更なし最終更新 2026-08-28

配列に要素を入れたり、消したりする回です。ここは書き方が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段構えになります。

上から読む

  1. 整数型の配列: a ← {3, 5, 8, 9}
    整数型: ireru ← 7
    整数型: ichi ← 2
    整数型: i
    材料を並べる。入れる先の配列 a、入れたい値 ireru(7)、入れる位置 ichi(2番目)、番号を入れておく箱 i です。
  2. aの末尾 に ireruの値 を追加する
    まず、箱を1つ増やす。末尾に足す専用の書き方です。これで a は5個ぶんの長さになります。
  3. for (i を aの要素数 から ichi + 1 まで 1 ずつ減らす)
      a[i] ← a[i - 1]
    endfor
    うしろへ送る。1つ前の値を写して、入れたい場所を空けます。1 ずつ減らすなのでうしろから進みます。なぜこの向きなのかは、このあとの節で見ます。
  4. 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 個だけを見ます。

最後の1つが余る

詰め終わると、いちばんうしろに同じ値が2つ残ります。擬似言語には要素を減らす書き方が無いので、上のプログラムの kazu のようにいま何個あるかを別の変数で持っておき、そこまでしか見ないという形が使われます。

消したあとに必ず起きること

うしろの要素の番号が、1つずつ前へずれます。消した位置より後ろを指していた変数は、そのままでは1つずれた要素を指します。

ここはくり返しの中で消すときにとくに効きます。消したのに i を進めると、1つ飛ばしてしまいます。

つまずきポイントまとめ

まちがえ方 正しい読み方
途中に入れるのにも専用の書き方があると思う 末尾だけ。途中は自分でずらす
入れるときに前から写す うしろから。前からだと同じ値で埋まる
消すときにうしろから写す 前から詰める。向きが逆
消したら要素数が減ると思う 減らす書き方は無い。最後の1つが余る
消したあとも同じ番号を指す うしろは1つずつ前へずれる

次に読む

A3-1 2次元配列の走査 ─ 行と列で場所が決まる
A2-3 配列から探す ─ 線形探索と「見つからなかったとき」
G4-2 配列の読み書き ─ 要素に入れる、取り出す
目次 基本情報技術者試験 科目B 攻略ガイド

この記事で引用した資料

いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。

本文の例題は当サイトのオリジナルです。

Copied title and URL