forのトレース

回数が先に決まっている繰返し

前回の while は、条件が偽になるまで何回でもまわる形でした。今回の for は、始まりと終わりと増え方が最初から書いてある形です。科目 B で配列を扱うようになると、出てくる繰返しのほとんどが for になります。読み方をここで固めます。

括弧の中の 4 点を読む

擬似言語の for は日本語で書かれます。

for (i を 1 から 10 まで 1 ずつ増やす) sum ← sum + i endfor

読み取る情報は 4 つです。繰返しに使う変数が i、開始の値が 1、終わりの値が 10、1 周ごとの増え方が 1 です。この 4 点さえ拾えば、あとは何も考えることがありません。減らす形もあり、そのときは「10 から 1 まで 1 ずつ減らす」と書かれます。

動きは while と同じ順序です。まず i に開始の値を入れ、i が終わりの値を超えていないかを確かめ、超えていなければ中身を実行します。endfor まで来たら i を増やして、また確かめに戻ります。開始の値がいきなり終わりの値を超えている場合、中身は 1 回も実行されません。

回数の数え方

繰返しの回数を式で出せると、トレースを途中で打ち切れます。1 ずつ増える場合は、終わりの値から開始の値を引いて 1 を足します。1 から 10 までなら 10 - 1 + 1 で 10 回です。この最後の 1 を足す操作を忘れると、いつも 1 回少なくなります。

増え方が 2 以上のときは、先に引き算をしてから増分で割り、最後に 1 を足します。2 から 10 まで 2 ずつなら、10 - 2 で 8、8 ÷ 2 で 4、そこに 1 を足して 5 回です。実際 i は 2、4、6、8、10 の 5 つの値をとります。

繰返し変数を中で書き換えない

for の中身で i そのものに代入する形は、科目 B ではまず出てきません。i は for が管理する変数だと考えて、中身では読むだけにします。読むだけと決まっているからこそ、i の値は開始の値から増分ずつ並ぶ数列として、先に全部書き出せます。トレースを始める前に i の値を並べて紙に書いておくと、あとの計算がとても楽になります。

抜けたあとの繰返し変数

for を抜けたあと、表の i の欄には最後に中身を実行したときの値をそのまま残します。上の 2 から 10 まで 2 ずつの例なら 10 です。10 の回を実行し終えて i を増やすと 12 になり、これは 10 を超えるので中身に入らずに抜けます。抜けたあとの i を答えさせる出題は無いので、表では最後に使った値を書き写しておけば十分です。

やってみます

下の演習は、2 から 10 までの偶数を足し合わせるコードです。3 周目まで追ったら、i がとる値の並びが見えるはずです。あとは規則で最後まで進めてください。

課題

  1. 各行を実行したあとの値を入れる
  2. 値が変わらない変数はそのままの値を入れる
  3. for の行も 1 行として数える

ヒント

1 / 9 行目のトレース

1○整数型: guusuwa()
2 整数型: i, sum
3 sum ← 0
4 for (i を 2 から 10 まで 2 ずつ増やす)
5 sum ← sum + i
6 endfor
7 return sum
実行した行isum
実行前
3 行目

3 行目を実行したあとの値を入れてください。変わらない変数は、 そのままの値を入れます。まだ値が入っていない変数は「」と入れます。