擬似言語で配列を for で回す|要素番号を i で動かす読み方【基本情報技術者試験 科目B】

基本情報技術者試験

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

前回は for が何回まわるかを読みました。科目Bの for は、そのほとんどが配列とセットで出ます。理由は単純で、i をそのまま要素番号として使えるからです。

要素番号を i で動かす

3人の点数が入った配列があります。全部出力するには、こう書きます。

整数型の配列: tensuu ← {80, 65, 90}
整数型: i
for (i を 1 から 3 まで 1 ずつ増やす)
  tensuu[i] を出力する
endfor

出力は 80、65、90。中の行は tensuu[i] を出力する の1行だけです。i が 1 → 2 → 3 と変わるので、1周ごとに違う箱を見ることになります。

i が変わると、見る箱も変わる

for (i を 1 から 3 まで 1 ずつ増やす) / 中の行は tensuu[i] を出力する の1行だけ

1周目 i が 1 → tensuu[1] の 80

180▲

265

390

2周目 i が 2 → tensuu[2] の 65

180

265▲

390

3周目 i が 3 → tensuu[3] の 90

180

265

390▲

「1から順に増える数」と「1から始まる要素番号」が、そのままかみ合う

なぜ配列と相性がいいのか

要素番号は 1 から連番。そして for は連番を作るしくみだからです。

要素番号が飛び飛びだったり文字だったりすれば、こうはいきません。「1から順に増える数」と「1から始まる要素番号」が、そのままかみ合っています。

次のプログラムで、3周目に出力されるのはどれですか。

文字列型の配列: kudamono ← {"りんご", "みかん", "ぶどう"}
整数型: i
for (i を 1 から 3 まで 1 ずつ増やす)
  kudamono[i] を出力する
endfor

「3 まで」ではなく「要素数 まで」と書く

さっきは 1 から 3 まで と書きました。実際の出題では、ここが数字ではなく tensuuの要素数 になっています。

for (i を 1 から tensuuの要素数 まで 1 ずつ増やす)

意味は同じです。tensuu の要素数は 3 なので、読むときは頭の中で 3 に置き換えて構いません。

なぜわざわざそう書くのか

配列の中身が変わっても、この行を直さなくて済むからです。要素が5個に増えれば tensuuの要素数 は自動的に 5 になります。

そしてこの書き方のおかげで、問題文が配列を与えていなくてもプログラムが成り立ちます。「関数◯◯を、{3, 2, 1, 6, 5, 4} として呼び出したとき」とあとから配列が渡される形が、科目Bの定番です。

配列を回す for に出会ったときの手順

  1. 要素数を数える(問題文で与えられた配列の中身を数える)
  2. 制御記述の ◯◯の要素数 を、その数に置き換えて読む
  3. i がとる値を書き並べる(1, 2, 3, …)
  4. 各周で 配列名[i] がどの箱を指すかを、配列の絵の上で確かめる

次のプログラムで、data の要素を出力する は何回実行されますか。

整数型の配列: data ← {7}
整数型: i
for (i を 1 から dataの要素数 まで 1 ずつ増やす)
  data[i] を出力する
endfor

全部足す ── 外に置いた箱に足していく

配列を回す目的は、たいてい全部の要素を使って1つの答えを出すことです。合計を求めてみます。

整数型の配列: tensuu ← {80, 65, 90}
整数型: i
整数型: goukei ← 0
for (i を 1 から tensuuの要素数 まで 1 ずつ増やす)
  goukei ← goukei + tensuu[i]
endfor
goukei を出力する

大事なのは goukei の置き場所です。for の外で用意して、0 を入れています。中で用意してしまうと、1周ごとに新しく作り直されて足したものが消えます。

周 i tensuu[i] 計算 そのあとの goukei
開始前 — — — 0
1周 1 80 0 + 80 80
2周 2 65 80 + 65 145
3周 3 90 145 + 90 235
抜けた直後 4 — — 235

この形は、そのまま何度も出てくる

外で用意する答えを入れる箱を for の前で作り、0 を入れる

中で足すgoukei ← goukei + 配列名[i] を1行書く

外で使うendfor の下で、たまった値を出力する/返す

合計だけでなく、個数を数える・最大値を探すのも同じ形です。外に箱、中で更新、外で使う。

for の中に書かれた行は、周が変わるたびに、上から順にもう一度実行されます。
次のプログラムは、合計を求めるつもりで書かれています。何が起きますか。

整数型の配列: tensuu ← {80, 65, 90}
整数型: i
for (i を 1 から tensuuの要素数 まで 1 ずつ増やす)
  整数型: goukei ← 0
  goukei ← goukei + tensuu[i]
endfor

もう1つの書き方 ── 要素を順に代入する

要素番号を使わずに、中身を直接受け取る書き方もあります。

整数型の配列: tensuu ← {80, 65, 90}
整数型: ten
for (ten に tensuu の要素を順に代入する)
  ten を出力する
endfor

出力は同じく 80、65、90。ちがいは、ten に要素番号ではなく中身が入ることです。tensuu[ten] ではなく ten と書く点に注意してください。

どちらが出るかは、問題しだい

要素番号が要る処理(隣どうしを比べる、番号を答えるなど)では i を回す形。中身だけ使えばいい処理では、この形が使われます。回数はどちらも要素数と同じです。

本物もこう書かれる

(令和6年度 基本情報技術者試験 科目B 公開問題 問5)

for (order に orders の要素を順に代入する)

形は違っても、読み方は同じです。書かれている日本語を読めば、何が何回起きるかは決まります。制御記述は暗記するものではなく、その場で読むものだという理由がここにあります。

orders が6個の要素をもつ配列のとき、次の for は何回繰り返しますか。
for (order に orders の要素を順に代入する)

読むだけでなく、別の配列を作る

もう1つの定番が、元の配列から、新しい配列を作る形です。空の配列を用意して、末尾に足していきます。

整数型の配列: tensuu ← {80, 65, 90}
整数型の配列: kasan ← {}
整数型: i
for (i を 1 から tensuuの要素数 まで 1 ずつ増やす)
  kasanの末尾 に (tensuu[i] + 10) の結果を追加する
endfor

追いかける前に ─ このプログラムは何をする?

全員に10点ずつ足した、新しい配列を作るだけです。終わるとこうなります。

1番目 2番目 3番目
tensuu(元) 80 65 90
kasan(作る) 90 75 100

元の tensuu は変わりません。読むだけで、書き換えていないからです。

kasan は要素数0から始まって、1周ごとに1つずつ増えます。シミュレータを最後まで進めると、ちょうどこの表になります。

さっきの「合計」と、形は同じ

外で用意する合計なら 0 を入れた変数、ここでは空の配列

中で足す合計なら goukei ← goukei + …、ここでは末尾に追加

外で使うendfor の下で、できあがったものを使う

入れ物が変数か配列かだけの違いです。骨組みはいつもこれ。

本物もこう書かれる

(基本情報技術者試験 科目B サンプル問題 問3)

  outの末尾 に … を追加する

空の out に、for の中で1つずつ追加していく ── いま見たのとまったく同じ形です。追加する中身が変わるだけです。

1行ずつ動かして確かめます。kasan が1つずつ伸びていくところを見てください。

元の配列から、新しい配列を作る

当サイトオリジナルの例題


ループ開始前

配列

▲ いま読んでいる▲ いま書いた

いま計算していること

まだ計算していません

変数の状態

トレース表(進めると1行ずつ積み上がります)

つまずきポイントまとめ

まちがえ方 正しい理解
tensuu[i] の i のほうを出力してしまう [ ] の中は何番目か、付けた全体はその中身
要素番号を 0 から回す 擬似言語の要素番号は1から。1 から 要素数 までが定型
答えを入れる箱を for の中で作る 1周ごとに作り直されて消える。箱は外で用意する
要素数と、中身の値を取り違える 要素数は箱がいくつあるか。中の数字とは関係ない
「要素を順に代入する」で番号を使う 変数に中身が直接入る。[ ] を付けない

次に読む

この記事で引用した資料

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

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

Copied title and URL