前回は for が何回まわるかを読みました。科目Bの for は、そのほとんどが配列とセットで出ます。理由は単純で、i をそのまま要素番号として使えるからです。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円この回の内容を動画で見る
講義「繰返し for」(全11分10秒)のうち、この記事の内容は 5分35秒ごろから始まります(再生するとそこから流れます)。
要素番号を 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から始まる要素番号」が、そのままかみ合う
なぜ配列と相性がいいのか
科目Bの問題文は、配列を使うたびに「配列の要素番号は1から始まる」と断ります。だから要素番号は 1, 2, 3 … の連番。そして for は連番を作るしくみだからです。
要素番号が飛び飛びだったり文字だったりすれば、こうはいきません。
次のプログラムで、2周目に出力されるのはどれですか。配列の要素番号は1から始まります。
文字列型の配列: kudamono ← {"りんご", "みかん", "ぶどう", "もも", "なし"}
整数型: i
for (i を 1 から 5 まで 2 ずつ増やす)
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 に出会ったときの手順
- 要素数を数える(問題文で与えられた配列の中身を数える)
- 制御記述の
◯◯の要素数を、その数に置き換えて読む iがとる値を書き並べる(1, 2, 3, …)- 各周で
配列名[i]がどの箱を指すかを、配列の絵の上で確かめる
次のプログラムで、data[i] を出力する は何回実行されますか。配列の要素番号は1から始まります。
整数型の配列: 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 の下で、たまった値を出力する/返す
合計だけでなく、個数を数える・最大値を探すのも同じ形です。外に箱、中で更新、外で使う。
次のプログラムを実行すると、何が出力されますか。配列の要素番号は1から始まります。
整数型の配列: kosuu ← {30, 50, 20}
整数型: i
整数型: goukei ← 0
for (i を 1 から kosuuの要素数 まで 1 ずつ増やす)
goukei ← goukei + kosuu[i]
goukei を出力する
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 の要素を順に代入する)
形は違っても、読み方は同じです。書かれている日本語を読めば、何が何回起きるかは決まります。制御記述は暗記するものではなく、その場で読むものだという理由がここにあります。
次のプログラムを実行すると、何が出力されますか。配列の要素番号は1から始まります。
整数型の配列: a ← {3, 1, 2}
整数型の配列: b ← {10, 20, 30}
整数型: x
for (x に a の要素を順に代入する)
b[x] を出力する
endfor
読むだけでなく、別の配列を作る
もう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周ごとに作り直されて消える。箱は外で用意する |
| 要素数と、中身の値を取り違える | 要素数は箱がいくつあるか。中の数字とは関係ない |
| 「要素を順に代入する」で番号を使う | 変数に中身が直接入る。[ ] を付けない |
次に読む
科目Bが難しいと感じたら、この順番で
読み方の基礎を固めてから、本番と同じ形の問題で試す。
まず、読み方の基礎
科目B 基礎講義
プログラムを1行ずつたどって、値の変わり方を見る。定番アルゴリズムの型をそろえる。
0円通常 2,600円先着100名・12月3日まで
講義の目次と無料の1本を見てから、Udemy で0円で受講できます
この記事で引用した資料
- 擬似言語の記述形式 IPAが公開している科目Bの公開問題・サンプル問題(PDF)の冒頭に掲載。名称は年度により「基本情報技術者試験用」と「基本情報技術者試験,応用情報技術者試験用」があるが、本文は同一
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
- 令和6年度 基本情報技術者試験 科目B 公開問題(2024年7月5日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
本文の例題は当サイトのオリジナルです。

