繰り返しの中の条件分岐|条件に合わないときはどこへ進む?図を動かして理解する

繰り返しの中の条件分岐|条件に合わないときはどこへ進む?図を動かして理解する

繰り返しの中に条件分岐があるとき、条件に合わないからといって、繰り返しまで終了するわけではありません。「その処理を行うか」と「繰り返しを続けるか」は、別の判断です。

たとえば、1から10までの数を順番に調べ、偶数だけを数える場合。1は偶数ではありませんが、そこで終了せず、2へ進みます。この記事ではフローチャートを動かしながら、「いいえ」の進み先と、調べた回数・該当件数の違いを確かめます。

条件を変えて動かしてみる練習問題へ進む

「繰り返す条件」と「処理する条件」を分ける

一覧のデータを1件ずつ確認し、そのうち条件に合うものだけを処理したい場面があります。在庫一覧から残数が少ない商品を数える、売上明細から一定額以上の取引を拾う、点検結果から異常のある項目を抽出する、といった作業です。

このとき必要なのは、「次に確認するデータが残っているか」という判断と、「いま確認しているデータが対象か」という判断です。どちらも条件ですが、決めていることが違います。

判断今回の例「いいえ」の進み先
繰り返しを続けるか現在の数nは10以下か繰り返しを終了する
この数を数えるか現在の数nは偶数か件数を増やさず、次の数へ進む

以降、前者を継続判定、後者を対象判定と呼びます。フローチャートにひし形が2つあっても、両方が終了を決めているわけではありません。

フローチャートの書き方:「いいえ」も更新処理へつなぐ

今回は、現在の数をnで表し、開始値から終了値まで1ずつ増やします。図の長方形は値を設定・更新する処理、ひし形は判定、角の丸い記号は開始・終了です。

  1. nを開始値にし、調べた回数と該当件数を0にする。
  2. 「nは終了値以下か」を判定する。「いいえ」なら終了する。
  3. 「はい」なら、その数を調べるため、調べた回数を1増やす。
  4. 「nは数える条件に合うか」を判定する。
  5. 「はい」なら該当件数を1増やす。「いいえ」ならこの処理を通らない。
  6. どちらの場合もnを1増やし、継続判定へ戻る。

重要なのは5の分岐が、6の更新処理の手前で合流することです。対象判定の「いいえ」から、終了へ線をつなぐのではありません。また、次へ進む前にnを増やす必要があるため、更新処理を飛び越えて判定へ戻すのも間違いです。

動かして確認:10回調べると、10件数える?

まず「条件に合う数は何個か」を予想し、「1ステップ」で確認してみてください。図の色の付いた枠は直前に実行した処理、色の付いた矢印は次の進行方向です。「調べた数と判定」には、条件に合う数も合わない数も残ります。

最初は1が偶数でないと分かった直後で止め、その次の進み先を予想してみましょう。「自動再生」は一時停止できます。条件を変更すると実行は最初に戻ります。ここで動くのは、決められた範囲の数と条件を扱う教材で、自由に入力したプログラムを実行するものではありません。

条件と予想

まだ回答していません。

練習する条件

現在の条件の解答・解説

現在の数 n
調べた回数0
該当件数0

はいいいえ はいいいえ 数えずに進む 次の数へ 開始 n = 1調べた回数・該当件数 = 0 繰り返す?n ≤ 10? 調べた回数を1増やす 数える対象?nは偶数? 該当件数を1増やす nを1増やす 終了

調べた数と判定

✓ 条件に合う / × 条件に合わない / · 未判定

実行履歴

    1・2・3を追うと、「数えない」の意味が分かる

    1〜10の偶数を数える設定で、最初の3つの数を追ってみます。次の表の回数・件数は、それぞれの数について対象判定と必要な件数更新を終えた時点の値です。

    現在の数n偶数か調べた回数該当件数次に行うこと
    1いいえ1回0件nを2にする
    2はい2回1件nを3にする
    3いいえ3回1件nを4にする

    「数えない」は、調べなかったという意味ではありません。1も3も条件を確認したうえで、該当件数を増やす処理だけを通らなかったという意味です。

    最後の10を数えたあとも、すぐに終了するわけではありません。nを11に更新してから「11は10以下か」を判定し、「いいえ」になって終了します。そのため、終了時のnは11ですが、調べた回数は10回、該当件数は5件です。

    条件に合わないときだけ、数の更新を忘れていないか

    よくある書き間違いは、「該当件数を増やす」と「nを増やす」を、両方とも対象判定の「はい」側に置いてしまうことです。この図だと、最初のnが1の場合、偶数ではないためnが変わりません。判定に戻ってもまた1なので、同じ数を調べ続けてしまいます。

    今回のルールでは、対象かどうかに関係なく次の数を調べます。したがって、nの更新は「はい」「いいえ」が合流したあとに置きます。該当件数の更新だけを「はい」側に置くのがポイントです。

    図を見直すときは、条件に合う数だけでなく、合わない数を1つ選んで矢印をたどってください。どちらの経路でもnの更新を通ることを確かめれば、この間違いを見つけやすくなります。

    該当件数は、ループに入る前に0にする

    該当件数を0にする処理は、繰り返しを始める前に一度だけ実行します。数を調べるたびに0へ戻すと、前の数までに積み上げた件数が消えてしまいます。

    たとえば2と4が該当したあと、本来は2件になってほしいところです。しかし毎回0に戻していれば、4が該当しても1件にしかなりません。その後、奇数を調べる前にも0へ戻す配置なら、結果はさらに0件になってしまいます。

    「最初に0にする」と「該当したら1増やす」は役割が違います。戻り矢印の先に初期化が含まれていないかも確認しましょう。

    「5以上」と「5より大きい」では、5の進み先が変わる

    「数える条件」を「指定した値と比較」にすると、比較方法も変更できます。1〜10を調べる場合、「5以上」なら5・6・7・8・9・10の6件、「5より大きい」なら6・7・8・9・10の5件です。

    違うのは5自身を含むかどうかです。図の対象判定でnが5のとき、「以上」なら「はい」、「より大きい」なら「いいえ」へ進みます。調べる範囲は変わらないため、どちらも調べた回数は10回です。

    一方、継続判定はこの教材では常に「nが終了値以下か」です。終了値を10から5へ変えれば、調べる範囲そのものが1〜5に変わります。対象を選ぶ条件の変更と、繰り返し範囲の変更を分けて考えましょう。

    練習問題:該当件数と「いいえ」の進み先を予想する

    教材の「練習する条件」で各問題を選べます。該当件数を回答したあと、nの終了時の値と、対象判定が「いいえ」になったときの進み先も確認してください。

    1問目:1〜10の偶数を数える

    調べた回数と該当件数はいくつですか。1が偶数ではないと分かったあと、どこへ進みますか。

    解答・解説

    調べた回数は10回、該当件数は5件です。対象は2・4・6・8・10。1の対象判定は「いいえ」ですが、終了せずnの更新へ進みます。終了時のnは11です。

    2問目:3〜7の奇数を数える

    開始値を3、終了値を7にすると、5回繰り返すから該当件数も5件になりますか。

    解答・解説

    調べるのは3・4・5・6・7の5個ですが、奇数は3・5・7なので3件です。4と6も調べていますが、件数は増やしません。終了時のnは8です。

    3問目:1〜10のうち5以上を数える

    5自身は該当しますか。該当件数を予想してください。

    解答・解説

    5以上は5自身を含むため、5・6・7・8・9・10の6件です。調べた回数は10回、終了時のnは11です。

    4問目:1〜10のうち5より大きい数を数える

    前問から比較方法だけを変更すると、どの数の判定が変わりますか。

    解答・解説

    5の判定が「はい」から「いいえ」に変わります。対象は6・7・8・9・10の5件です。5を調べる処理は実行するので、調べた回数は前問と同じ10回です。

    5問目:開始値5、終了値4で偶数を数える

    5は奇数なので、対象判定が「いいえ」になって終了するのでしょうか。

    解答・解説

    対象判定には進みません。最初の継続判定「5 ≤ 4」が「いいえ」なので終了します。調べた回数も該当件数も0で、nは初期化した5のままです。途中で条件に合うものがなかった場合と、そもそも一度も調べなかった場合は区別できます。

    「条件に合わなかったら終了する」処理もある

    ここまでの説明は、最後まで調べて条件に合うものを数えるルールです。すべてのプログラムで、条件に合わなくても続けるわけではありません。

    たとえば、検査で重大な異常を検出したら作業全体を止める、目的のデータを1件見つけたら探索を終える、といった手順なら途中終了が必要です。その場合は、終了させる条件とその矢印を明確にします。「いいえ」というラベルだけで終了と決めるのではなく、目的に沿って矢印の行き先を読むことが大切です。

    まとめ:2つの判定と、分岐後の合流点を見る

    繰り返しの中にある条件分岐を読むときは、まず継続判定と対象判定を分けます。今回の図では、対象判定が「いいえ」でもnを増やし、次の数へ進みます。調べた回数と該当件数が違う理由は、条件に合わない数について、件数を増やす処理だけを通らないからです。

    基本の繰り返しを確認するならフローチャートのループの書き方、回数や終了時の値を練習するなら繰り返しの練習問題8問へ。繰り返し自体を入れ子にする構造は、二重ループの実行順序と繰り返し回数で確認できます。

    info

    シェアする