アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラミングの流れ図の問題についての質問です

(4)の答えを私は ク したのですが、答えは コ でした
なぜクではダメなのでしょうか?ループを抜けたということは条件と合うものが見つかったのか、見つからなかったかの2択だと思うのでこの選択肢にしたのですが違いました
解説がなかったので分かる方いましたら教えてください

「プログラミングの流れ図の問題についての質」の質問画像

A 回答 (1件)

入力データが取引先コード 1000 だった場合、ループ 2 の動作は



Mid = Floor((0 + 19) / 2) = 9
ループ判定 → まだ見つからないので続行
Jogen = 9 - 1 = 8
Mid = Floor((0 + 8) / 2) = 4
ループ判定 → まだ見つからないので続行
(中略)
ループ判定 → まだ見つからないので続行
Jogen = 0 - 1 = -1
Mid = Floor((0 + -1) / 2) = -1
ループ判定 → 探索範囲を外れたので終了

Jogen <= Kagen でない状態で計算した Mid の値は、
配列の範囲外になってしまう可能性があります。
そのためループ後に Sco(Mid) = Tco を実行すると、
上記例の場合に Sco(-1) と評価され範囲外参照のエラーになります。

ループ終了条件は以下の二通りだけなので
ループ後ならば Jogen ≦ Kagen だけ評価すれば、
見つかったか否かを判断ができます。

1) Jogen ≦ Kagen かつ Sco(Mid) = Tco
→ 探索範囲内に値が見つかった
2) Jogen > Kagen
→ 探索範囲外になったのでもう探しても無駄

余談ではありますが、

ループ条件が "Jogen ≦ Kagen かつ Sco(Mid) ≠ Tco" なので、
Mid=-1 だとエラーになるのではと不安になりますが、
「先に記述された条件式が偽になった時点で、判定を終了する」
と注記があり、短絡評価をしているから間違いではないと言いたい様です。
参考)
https://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1 …

ですが (4) の条件を考えると、些か配慮が足りない出題だと感じました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A