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

基本情報技術者試験

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

配列に要素を入れたり、消したりする回です。ここは書き方が2種類あって、混ざると読めなくなります。末尾に足すときだけ、問題文に決まった書き方が出てきます。

期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円2,600円中身を見る ›

プログラムを、上から読む

まず、行ごとの役割です。途中に割り込ませる書き方は、いつもこの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つずつ貯めていくときによく使われます。空の配列を用意しておいて、条件に合ったものだけ末尾に足していく ── これが定番の形です。

途中に入れるときは、うしろから空ける

問題文には「〜の末尾に…を追加する」という書き方がよく出てきます。途中に入れる・消すという書き方は出てこないので、自分でずらします。

空け方に順番があります。うしろの要素から動かしてください。

途中に入れるときは、うしろからずらす

整数型の配列: 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つ追加して伸ばしてから、うしろへずらします。

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 です。最後の 9 は余りなので、以降は先頭から kazu 個だけを見ます(消した位置よりうしろの要素は、番号が1つずつ前へずれています)。

つまずきポイントまとめ

まちがえ方 正しい読み方
途中に入れる書き方もあると思う 問題文に出てくるのは末尾への追加だけ。途中は自分でずらす
入れるときに前からコピーする うしろから。前からだと同じ値で埋まる
消すときにうしろからコピーする 前から詰める。向きが逆
消したら要素数が減ると思う 減らす書き方は出てこない。最後の1つが余る
消したあとも同じ番号を指す うしろは1つずつ前へずれる

次に読む

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

この記事で引用した資料

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

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

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