07 配列(1次元)

繰り返しと配列は、切っても切れない関係にある。

コンピュータが最も得意なことの一つは、「大量の情報を、人間が音を上げるような速さで、順番に処理すること」です。
1000人分の成績を合計する、100万件のデータから最大値を探す——これを人間がやれば何時間もかかりますが、コンピュータなら一瞬です。

その「大量のデータ」をまとめて持つための仕組みが配列であり、「順番に処理する」ための仕組みが繰り返し(for文・while文)です。
この2つが組み合わさることで、コンピュータの真価が発揮されます。配列を学ぶことは、プログラミングの本質に一歩踏み込むことでもあります。

1. 配列とは

配列とは、同じ型のデータを複数まとめて管理する仕組みです。 たとえば5人の点数を管理したいとき、変数を5つ用意する代わりに配列1つで済みます。

変数を5つ用意する場合 score1 85 score2 72 score3 91 score4 68 score5 77 変数5個必要 配列を使う場合(scores) scores [1] 85 [2] 72 [3] 91 [4] 68 [5] 77 変数1個で管理

2. 宣言と初期化

宣言のみ

整数型の配列: scores

値をまとめて代入(初期化)

整数型の配列: scores
scores ← {85, 72, 91, 68, 77}

カンマで区切られた値が要素番号1番から順に代入されます。

scores ← {85, 72, 91, 68, 77} scores[1] 85 scores[2] 72 scores[3] 91 scores[4] 68 scores[5] 77
要素番号は0から始まる?1から始まる?
C言語やPythonなど多くの実際の言語では0から始まります。
IPAの疑似言語では、問題文中に「配列の要素番号は1から始まる」と明記されている場合はその指定に従います。
指定がない場合も、試験問題では1始まりの場合がほとんどです。必ず問題文を確認する習慣をつけましょう。

3. 要素へのアクセス

配列名の後ろに [要素番号] を書いてアクセスします。

整数型の配列: scores ← {85, 72, 91, 68, 77}

// 参照(読み出し)
整数型: x ← scores[3]   // x に 91 が入る

// 代入(書き込み)
scores[2] ← 80           // scores[2] が 72 → 80 に変わる

4. 配列とfor文の組み合わせ

配列の全要素を処理するには、カウンタ変数を要素番号として使うのが定番パターンです。 これが配列とfor文を組み合わせる最大のメリットです。

scores [1] 85 [2] 72 [3] 91 [4] 68 [5] 77 i=1 i=2 i=3 … i=4, 5 と続く for ( i を 1 から 5 まで 1 ずつ増やす ) → scores[i] で各要素にアクセス

合計を求める例

整数型の配列: scores ← {85, 72, 91, 68, 77}
整数型: i
整数型: total ← 0

for ( i を 1 から 5 まで 1 ずつ増やす )
    total ← total + scores[i]
endfor

total を出力   // 出力:393

要素数を使う書き方(汎用的)

for ( i を 1 から scores の要素数 まで 1 ずつ増やす )
    total ← total + scores[i]
endfor
scores の要素数 と書くと、配列の長さが変わっても修正不要になります。 試験のプログラムでもこの書き方が頻繁に登場します。

5. 配列の要素の入れ替え

2変数の値の入れ替えと同じく、temp(一時変数)を使います。

整数型の配列: a ← {10, 20, 30}
整数型: temp

temp ← a[1]    // temp に 10 を退避
a[1] ← a[3]   // a[1] を 30 に上書き
a[3] ← temp   // a[3] を 10 に
// 結果:a = {30, 20, 10}

6. 範囲外アクセスに注意

存在しない要素番号を指定する「範囲外アクセス」は、基本的にエラーになってプログラムが停止します。

ただし言語によって扱いが異なります:
疑似言語の試験問題では範囲外アクセスが発生するような問題は出題されませんが、実際のプログラムを書く際は常に意識してください。

7. 理解度チェック問題

問題07-1

次のコードを実行すると x の値はいくつになるか。

整数型の配列: data ← {10, 20, 30, 40, 50}
整数型: x ← data[3]
解説を表示 正解:ウ
要素番号は1から始まります。data[3] は3番目の要素 30 です。

問題07-2

次のコードを実行すると total の値はいくつになるか。

整数型の配列: data ← {2, 4, 6, 8, 10}
整数型: i
整数型: total ← 0

for ( i を 1 から 5 まで 1 ずつ増やす )
    total ← total + data[i]
endfor
解説を表示 正解:エ
2 + 4 + 6 + 8 + 10 = 30

問題07-3

次のコードを実行した後の a[1]、a[2]、a[3] の値の組み合わせとして正しいものを選びなさい。

整数型の配列: a ← {1, 2, 3}
整数型: temp

temp ← a[1]
a[1] ← a[3]
a[3] ← temp
解説を表示 正解:イ
temp=1 → a[1]=3 → a[3]=1 の順に処理。a[2] は変わらず 2。結果:{3, 2, 1}

問題07-4 空欄補充

次のコードは配列の全要素を出力するプログラムである。空欄 [ A ] に入るものを選びなさい。

整数型の配列: nums ← {5, 10, 15, 20}
整数型: i

for ( i を 1 から [ A ] まで 1 ずつ増やす )
    nums[i] を出力
endfor
解説を表示 正解:ア
要素番号は1〜要素数までなので、終了値は「要素数」がちょうどよい値です。
+1 にすると存在しない要素番号にアクセスしてしまいます。

問題07-5

次のコードを実行すると max の値はいくつになるか。

整数型の配列: score ← {45, 72, 68, 91, 53}
整数型: i
整数型: max ← score[1]

for ( i を 2 から score の要素数 まで 1 ずつ増やす )
    if ( score[i] が max より大きい )
        max ← score[i]
    endif
endfor
解説を表示 正解:ウ
最初に max = score[1] = 45 で初期化し、全要素と比較しながら更新。最大値は 91。
これは「最大値探索」の定番アルゴリズムです。次の資料で詳しく学びます。