擬似言語の配列操作とは?|基本情報技術者試験で押さえる本質をやさしく解説

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

配列操作とは(全体像)

配列は、同じ種類の箱を一列に並べたもの。配列操作は、その箱を番号で指定して、中身を読んだり書き換えたりすることをいう。たとえば「3番目の箱の中身を見る」「5番目に値を入れる」といった作業だ。

擬似言語でいちばん大事なのは、配列が1始まりだということ。先頭の箱は`arr[1]`で、`arr[0]`は使わない。C・Java・Pythonなど多くの言語は`arr[0]`が先頭なので、ここを取り違えると番号が1つズレてしまう。

配列全体をまとめて処理したいときは、forループで1つずつ順に書く。Pythonのように「配列ぜんぶを一括で2倍」といった書き方はせず、1番から順にたどるのが擬似言語のやり方だ。


詳しく:操作のパターンだけ覚えれば戦える

ここが記事の心臓部。配列操作は、次のパターンで全部まかなえる。

配列操作の基本パターン

操作書き方意味
読む(アクセス)`arr[i]`i番目の箱の中身を取り出す(先頭は`arr[1]`)
書く(代入)`arr[i] ← 値`i番目の箱に値を入れる
個数を知る`配列の要素数`箱がいくつあるかを返す
2次元`mat[i, j]`表のi行j列の箱(`mat[1, 1]`が左上)

配列ぜんぶを順にたどる書き方を走査といい、forループで書く。

走査(全要素を順に処理)の型

部分書き方
ループの開始`for i ← 1 to 配列の要素数 do`
中の処理`arr[i] ← arr[i] × 2` (例:全要素を2倍)
ループの終わり`endfor`

つまり「1番から最後の番号まで、`i`を1ずつ増やしながら、`arr[i]`を順に処理する」という形。たとえばクラス全員の点数に5点ずつ足すなら、この型で全部の箱に+5すればいい、というわけだね。

2次元配列は`mat[i, j]`とカンマで区切り、i行j列の箱を指す。`mat[1, 1]`が左上、`mat[3, 3]`なら3行3列の表の右下にあたる。

わかりやすく言い換えると

要するに、配列操作は「番号つきの引き出しを開け閉めする」イメージだ。

読む … 「3番の引き出しの中身を見る」=`arr[3]`

書く … 「3番の引き出しに入れ直す」=`arr[3] ← 値`

走査 … 「1番から順に全部の引き出しを開けて作業する」=forループ

ふつうの言語のクセ(0番から)のまま読むと1つズレる。だから「引き出しは1番から」と切り替えるのがコツ、というわけだね。


試験のツボ

🔴 一番出る:配列は1始まり

①先頭は`arr[1]`(`arr[0]`は使わない)

②C・Java・Pythonの0始まりと取り違えない

🔴 次に出る:走査はforループで1番から

①`for i ← 1 to 配列の要素数 do … endfor`の型

②`arr[i]`を1つずつ順に処理する

🟡 押さえると安定:2次元配列と要素数

①2次元は`mat[i, j]`(行が先・列が後)

②個数は`配列の要素数`で取る(`.length`ではない)


よくある間違い

「配列の先頭は`arr[0]`である」→ ✗  擬似言語は1始まり。先頭は`arr[1]`。

「要素数は`arr.length`で取る」→ ✗  擬似言語では`配列の要素数`と書く。`.length`は他言語の書き方。

「2次元配列は`mat[j, i]`の順で列・行を書く」→ ✗  `mat[i, j]`の順で、行が先・列が後。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(配列のインデックス)

📝 オリジナル問題 1 配列のインデックス

擬似言語の配列のインデックスに関する次の記述のうち、正しいものはどれか。

  1. 配列は0始まりで、先頭の要素はつねにarr[0]として読み書きするものとされている
  2. 配列は1始まりで、先頭の要素はarr[1]、2番目の要素はarr[2]として読み書きする
  3. 配列には番号で位置を指すという考え方そのものがいっさいなく、要素を取り出すことはできない
  4. 配列のインデックスは負の数から始まり、先頭の要素はarr[-1]で表されるとされている
オーエスペン
オーエスペン 解答・解説

解答は 2 だよ。

擬似言語の配列は1始まり。先頭は`arr[1]`、2番目は`arr[2]`なんだ。C・Java・Pythonは0始まり(`arr[0]`が先頭)だから、ここで切り替えてね。

選択肢1の「0始まり」はふつうの言語の話。選択肢3の「番号がない」、選択肢4の「負の数から」も誤りだよ。

選択肢判定理由
10始まりはふつうの言語
21始まりで先頭はarr[1]
3番号で各要素を指定できる
4先頭はarr[1]で負の数ではない

オリジナル問題2(要素数と代入)

📝 オリジナル問題 2 要素数と代入

擬似言語の配列の要素数と代入に関する次の記述のうち、正しいものはどれか。

  1. 配列の要素数はarr.lengthで取り出し、代入はarr.put(i,値)で行うとされている
  2. 配列の要素数は数えることができず、要素への代入もいっさいできないと決められている
  3. 配列の要素数は「配列の要素数」で取り、i番目への代入は「arr[i] ← 値」と書く
  4. 配列の要素数はcount(arr)で取り出し、代入はarr[i] = 値と等号で書くとされる
オーエスペン
オーエスペン 解答・解説

解答は 3 だよ。

擬似言語では、個数は`配列の要素数`で取り、i番目への代入は`arr[i] ← 値`(矢印)と書くんだ。代入は等号ではなく矢印だよ。

選択肢1の`.length`や選択肢4の`count()`・等号は他言語の書き方。選択肢2の「数えられない」も誤りだよ。

選択肢判定理由
1`.length`や`.put`は他言語の書き方
2要素数も取れ、代入もできる
3`配列の要素数`と`arr[i] ← 値`
4代入は矢印で、等号ではない

オリジナル問題3(走査と2次元配列)

📝 オリジナル問題 3 走査と2次元配列

擬似言語の配列の走査と2次元配列に関する次の記述のうち、正しいものはどれか。

  1. 走査は「for i ← 1 to 要素数 do」と書き、2次元はmat[i, j]で指す
  2. 走査という考え方はなく、配列ぜんたいは「arr × 2」のように一括でしか操作できない
  3. 走査は0番から始めるという決まりで、2次元配列はmat[j, i]と列を先に書くものとされている
  4. 走査は最後の要素から先頭へ向かってのみ進み、途中にある要素は飛ばすことになっている
オーエスペン
オーエスペン 解答・解説

解答は 1 だよ。

走査は`for i ← 1 to 配列の要素数 do … endfor`の型で、1番から順にたどるんだ。2次元配列は`mat[i, j]`で、行が先・列が後だよ。

選択肢2の「一括操作だけ」、選択肢3の「0番から・列を先」、選択肢4の「最後から飛ばす」はどれも誤りだよ。

選択肢判定理由
1forで1番から走査・2次元はmat[i, j]
2一括操作はなくループで書く
31番から・行が先
4先頭から順にたどるのが基本

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る