フローチャートの繰り返しはどこで終わる?途中で終了する場合の書き方と練習問題

「条件に合うものを全部数える」のか、「1件見つかれば十分」なのか。同じデータを調べていても、目的が違えば、繰り返しを終える場所も変わります。フローチャートでは、途中で終える条件をひし形で判断し、その先の矢印を繰り返しの外へつなぎます。
この記事では、1から10までの数を調べる例で、最後まで数える場合と、最初の1件を見つけたら終了する場合を比較します。条件を変えて図を動かし、「何回調べたか」「終了時の数はいくつか」「まだ調べていない数があるか」を確かめてみましょう。
途中終了するのは「必要な答えが分かった」とき
たとえば、一覧から指定した受付番号の申請を探す作業を考えます。受付番号が一意で、その申請を1件見つけることが目的なら、見つかったあとの行を調べる必要はありません。一方、「未処理の申請が全部で何件あるか」を数えるなら、最初の1件で終了すると正しい合計は出せません。
| 知りたいこと | 終了するタイミング | 終了後に分かること |
|---|---|---|
| 条件に合うものがあるか、最初の1件はどれか | 見つかったとき。なければ最後まで確認したとき | 最初に見つかったもの、または該当なし |
| 条件に合うものが全部で何件あるか | 最後まで確認したとき | 範囲全体の該当件数 |
途中終了は、単に回数を減らすために入れるものではありません。残りを調べなくても、目的の答えを出せるかが判断の基準です。不備をすべて洗い出したい点検などでは、1件見つけただけで止めると、ほかの不備を見落とします。
フローチャートには、2つの終了経路を用意する
今回の図では、現在の数をnとし、開始値から終了値まで1ずつ増やします。長方形は値の設定・更新や結果の確認、ひし形は条件の判定、角の丸い記号は開始・終了です。途中終了専用の特別な記号を追加するのではなく、条件判定から先の接続を変えます。
- nを開始値にし、調べた回数と該当件数を0、最初の該当を「なし」にする。
- 「nは終了値以下か」を判定する。「いいえ」なら範囲の確認を終え、結果を確認する。
- 「はい」なら調べた回数を1増やし、「条件に合うか」を判定する。
- 合わなければnを1増やし、2へ戻る。
- 合えば該当件数を1増やし、最初の該当を記録する。途中終了するルールなら、nを増やさず結果の確認へ進む。
- 結果を確認して終了する。
終了経路は、調べる範囲を使い切った経路と、途中で目的のものが見つかった経路の2つです。見つからない場合の経路を省くと、いつまでも探し続ける図や、行き先のない図になってしまいます。
途中終了は、必ずしもプログラム全体を終了することではありません。今回も、繰り返しから抜けたあとに「結果を確認する」処理があります。そのあとで全体の終了記号へ進みます。
動かして比較:5以上が見つかったら、何回で終わる?
まず、1〜10から「5以上」を探し、最初の1件で終了する設定で、調べる回数を予想してください。「1ステップ」で進め、5が見つかったあとの矢印を確認しましょう。その後「最後まで数える」に切り替えると、該当件数を増やしたあとの接続先が変わります。
「現在の数n」は処理に使っている値、「調べた回数」は対象判定のために取り上げた数の個数、「該当件数」はここまでに確認できた件数です。「最初の該当」は最初に見つかった値を保持し、次の該当があっても上書きしません。未確認を表す「·」と、条件に合わなかった「×」は別の意味です。
条件と予想
まだ回答していません。
練習する条件
現在の条件の解答・解説
調べた数と判定
✓ 条件に合う / × 条件に合わない / · 未判定
実行履歴
同じ条件でも、5で終わる場合と11で終わる場合がある
1〜10のうち5以上を調べると、1・2・3・4は条件に合わず、5が最初に該当します。途中終了なら、5を記録したあと、更新処理を通らずに結果の確認へ進みます。したがって、調べた回数は5回、nは5のままです。
最後まで数える場合は、5を記録したあともnを6へ増やします。6〜10も該当するので合計6件です。10を調べたあとにnを11にし、「11は10以下か」が「いいえ」になって終了します。11自体を対象判定で調べたわけではありません。
| 1〜10、条件は5以上 | 最初の1件で終了 | 最後まで数える |
|---|---|---|
| 調べた数 | 1〜5 | 1〜10 |
| 調べた回数 | 5回 | 10回 |
| 確認できた該当件数 | 1件 | 6件 |
| 最初の該当 | 5 | 5 |
| 終了時のn | 5 | 11 |
| 未確認の数 | 6〜10 | なし |
途中終了の「1件」は、範囲全体に1件しかないという意味ではありません。最初の1件だけ確認して終了したため、後ろに何件あるかは分かりません。また、この教材は小さい数から順に調べるので最初の該当が最小になりますが、並び順が違う一覧では「最初に見つかったもの」が最小とは限りません。
見つからない場合・最初に見つかる場合も確かめる
範囲内に見つからない場合
1〜10で「15に等しい」を探すと、対象判定はすべて「いいえ」です。それでもnは毎回増えるため、10を調べたあとに11となり、範囲の判定で終了します。調べた回数は10回、該当件数は0件です。「途中終了のルールだから必ず早く終わる」とは限りません。
最初の数が該当する場合
1〜10で「1に等しい」を探せば、1を調べた時点で見つかります。途中終了では1回だけ調べ、nは1のままです。回数が0にならないのは、条件に合うかを判断するために、1そのものを調べているからです。
そもそも調べる範囲が空の場合
開始値5、終了値4なら、最初の「5は4以下か」が「いいえ」です。対象判定には一度も進まないため、調べた回数は0回。nは初期値の5で終了します。「該当なし」は同じでも、最後まで調べた場合とは経路が違います。
書き間違いを防ぐ3つの確認
「見つかった」の矢印を、更新処理へ戻していないか
最初の1件で終了したいのに、該当を記録したあとnの更新へ接続すると、探索を続けてしまいます。今回の2つの図の違いは、まさにこの接続先です。意図したルールと、実際の矢印が一致しているかを確認します。
「見つからない」の経路で、次の数へ進めるか
該当しないときにnを増やさず、判定だけへ戻すと同じ数を調べ続けます。途中終了の経路があっても、そこへ到達できなければ終わりません。該当しない値を選んで、更新処理と範囲の判定を通ることを確かめましょう。
現在値と回数を同じものとして読んでいないか
開始値が1の例だけを見ると、nと調べた回数が同じに見えます。開始値3、終了値9で5以上を探してみると、調べるのは3・4・5の3個です。途中終了時のnは5ですが、調べた回数は3回。nの値だけから回数を決めないようにしましょう。
練習問題:回数・終了時の値・進む経路を予想する
教材の「練習する条件」で1〜5問目を選べます。調べる回数を回答したあと、終了時のnと、どちらの終了経路を通ったかも確かめてください。
1問目:1〜10で5以上を探し、最初の1件で終了
解答・解説
調べた回数は5回、終了時のnは5、確認できた該当件数は1件です。5を記録したあと、更新を通らず結果の確認へ進みます。6〜10は未確認です。
2問目:同じ範囲・条件で、最後まで数える
解答・解説
調べた回数は10回、該当件数は6件、最初の該当は5です。10を調べたあとnを11にし、範囲の判定で終了します。1問目と同じ条件でも、必要な答えが違うため、終了する場所が違います。
3問目:1〜10で1に等しい数を探し、最初の1件で終了
解答・解説
1を1回調べて見つかります。終了時のnは1、該当件数は1件です。初期化から直接終了するのではなく、範囲の判定と対象判定を通っています。
4問目:1〜10で15に等しい数を探し、最初の1件で終了
解答・解説
範囲内に15はないため、10回調べても見つかりません。該当件数は0件、nは11となり、範囲の判定から結果の確認へ進みます。最初の1件で終了するルールでも、見つからなければ全範囲を確認します。
5問目:開始値5、終了値4で5以上を探す
解答・解説
調べた回数は0回、該当件数は0件、nは5です。5は対象条件を満たす値ですが、範囲の判定で先に終了するため、対象判定を実行しません。
追加問題:「5以上」を「5より大きい」に変えたら?
解答・解説
1〜10で最初の1件を探すなら、5が対象から外れるので、最初の該当は6です。調べた回数も6回、終了時のnも6になります。最後まで数えるなら、調べた回数は10回のまま、該当件数が6件から5件へ変わります。
まとめ:終了条件だけでなく、終了後に必要な答えを決める
途中終了するフローチャートでは、「まだ調べるものがあるか」と「もう目的の答えが得られたか」を分けます。見つかった経路は繰り返しの外へ、見つからなかった経路は更新処理へつなぎ、最後まで見つからない場合の出口も残します。
図を確かめるときは、最初に見つかる・途中で見つかる・見つからない・調べるものがない、の4通りを追ってみてください。回数だけでなく、終了時の値と未確認の範囲も見ると、意図した手順になっているか判断しやすくなります。
通常の分岐との違いは繰り返しの中の条件分岐、繰り返しの基本はフローチャートのループの書き方で確認できます。探索方法を比較したい場合は線形探索と二分探索を動かして学ぶ記事、回数の練習を増やすなら繰り返しの練習問題へ進んでください。