前回で、1行実行するごとに表を1行足す書き方を身につけました。今回は繰返しです。ここでつまずく人がいちばん多いところですが、足すものは1つだけ増えます。
第2部 定番処理の型 全27回
A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消すA2-52つの配列を突き合わせるA3-12次元配列の走査A3-22次元配列の集計A4-1文字列を1文字ずつA4-2文字列照合A5-1交換して並べるA5-2挿入ソートA6分割して並べるA7-12分探索A7-2ハッシュ表探索A8-1再帰とはA8-2再帰のトレースA9スタックとキューA10-1リストを読むA10-2リストの挿入と削除A11木構造A12木の巡回A13グラフA14AI・データを題材にしたプログラムA15ファイル処理
まず、通しで見る
1分半ほどの動画です(音声つき)。繰返しのトレースで間違えるのは、だいたい次の2つです。同じ行に戻ったとき、表をどう書くのか。そして、いつ繰返しを抜けるのか。1 から 4 まで足すプログラムを1周ずつ動かすと、この2つが目で分かります。
動画で追いかけるのは、この6行です。
整数型: goukei ← 0 整数型: i for (i を 1 から 4 まで 1 ずつ増やす) goukei ← goukei + i endfor goukeiの値 を出力する
出力は 10 です。1 から 4 までを足した合計です。動画では、これを1周ずつ動かします。
繰返しのトレース(1分40秒・音声つき)
再生できないときは、この下の図と説明で同じ内容を追えます。
ここから、同じ内容を1つずつ確かめていきます。
同じ行を、何度も実行する
次のプログラムを追います。1 から 4 までを足すだけのものです。
整数型: goukei ← 0 整数型: i for (i を 1 から 4 まで 1 ずつ増やす) goukei ← goukei + i endfor goukeiの値 を出力する
endfor まで来ると、for の行に戻ります。だから goukei ← goukei + i の行は、4回実行されます。
ここが最初の分かれ道です。同じ行を2回目に実行しても、表の同じ行を書き直すのではありません。実行するたびに、表の下に新しい1行を足します。前に書いた行は、そのまま残します。
同じ行を何度実行しても、前に書いた行は残す
endfor まで来たら for の行へ戻る。それでも表は、周ごとに1行ずつ増えていくだけ
1周おわり
| 周 | i | goukei |
|---|---|---|
| はじめ | ー | 0 |
| 1周 | 1 | 1 |
2周おわり
| 周 | i | goukei |
|---|---|---|
| はじめ | ー | 0 |
| 1周 | 1 | 1 |
| 2周 | 2 | 3 |
4周おわり
| 周 | i | goukei |
|---|---|---|
| はじめ | ー | 0 |
| 1周 | 1 | 1 |
| 2周 | 2 | 3 |
| 3周 | 3 | 6 |
| 4周 | 4 | 10 |
表は書き直さない。下に1行足す
表は、下に1行ずつ足していく
前回と同じです。前に書いた行は消しません。同じ行を2回目に実行したときも、書き直すのではなく新しい1行を足します。
1周を1行にまとめる
とはいえ、1行実行するごとに1行書いていくと、4周で8行になります。10周する問題なら20行です。手が追いつきません。
そこで、繰返しのときは書く単位を変えます。
繰返しのトレース表
1周につき1行。その周が終わったときの値だけを書く。
いちばん左の列は「実行した行」ではなく「周」になります。
1周を1行にまとめる
整数型: goukei ← 0 / for (i を 1 から 4 まで 1 ずつ増やす) / goukei ← goukei + i
周が終わったときの値だけを書く
| 周 | i | goukei |
|---|---|---|
| はじめ | ー | 0 |
| 1周 | 1 | 1 |
| 2周 | 2 | 3 |
| 3周 | 3 | 6 |
| 4周 | 4 | 10 |
くり返しの中を何行実行しても、書くのは周のおわりの1行だけ
行数は、プログラムの行数ではなく周の数
表の行数は、プログラムの行数とは関係ありません。決まるのは周の数です。ここが、繰返しのない前回といちばん違うところです。
for に入る前の値も、1行目に書いておきます。上の表なら goukei が 0 の行です。
この行が無いと、1周目の計算が何から始まったのかが分からなくなります。
途中の値は、前の周から読む
繰返しの中の goukei ← goukei + i は、右側を先に計算してから左へ書き込むのでした(G2-3)。
その右側の goukei は、1つ上の行の値です。
2周目でやっていること
読む1周目の行にある goukei は 1、いまの i は 2
計算1 + 2 = 3
書く2周目の行の goukei に 3
1つ上の行を見る。これだけです。表を作っておけば、頭の中に前の値を置いておく必要がありません。
抜けるのは、範囲を超えたとき
4周目が終わったあと、もう一度 for の行に戻ります。i を1つ増やすと 5。「1 から 4 まで」を超えました。
抜けるのは、範囲を超えたとき
for (i を 1 から 4 まで 1 ずつ増やす)
4周まわったあと、何が起きるか
| 時点 | i | どうなるか |
|---|---|---|
| 4周のあと | 4 | 「4 まで」なので、もう1周ぶん進める |
| 次に進めると | 5 | 「1 から 4 まで」を超えた |
| だから | 5 | 抜けて、endfor の下の行へ進む |
抜けたあとの i は 5。表の最後に書いておくと、空欄で聞かれても答えられる
1周ぶん進めてみて、範囲を超えていたら抜ける
だから繰返しを抜けて、endfor の下の行へ進みます。
表の最後に「抜けたあと」の行を1つ足しておきます。問われるのは、たいてい抜けたあとの値だからです。
上の例なら goukei は 10。これが出力されます。
実際に、1周ずつ動かしてみる
下のプログラムを、ボタンで1行ずつ進めてください。for の行に戻るたびに、表が下へ1行増えるのが見えます。
繰返しがあるプログラムを追う
当サイトオリジナルの例題
ループ開始前
いま計算していること
変数の状態
結果
トレース表(進めると1行ずつ積み上がります)
つまずきポイントまとめ
| まちがえ方 | 正しい書き方 |
|---|---|
| 同じ行に戻ったので、表も同じ行を書き直す | 表は書き直さない。実行するたびに、下に1行足す |
| 1行実行するごとに1行書く | 繰返しでは1周を1行にまとめる |
for に入る前の値を書かない |
はじめの1行が無いと、何から始まったか分からない |
| 右側の値を、いまの行から読む | 右側は1つ上の行の値 |
| 最後の周で終わりだと思う | もう一度 for に戻り、範囲を超えて抜ける。その行も書く |
次に読む
| A1-3 | 配列のトレース ─ 表に列をつくる、まとめる、減らす |
| A1-1 | トレース表の書き方 ─ 1行実行したら1行足す |
| G6-1 | 繰返し for ─ 何回まわるかの数え方 |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
本文の例題は当サイトのオリジナルです。

