実みつるのPreプログラミング

プログラミングの学習を考えている方へ

4-3 途中で止める

第四章 繰り返し

(3)途中で止める

前回は、繰り返しの途中で何か別の事をする方法を考えましたが、今回は繰り返しを途中で止めてしまうという事を考えてみます。実際の競技でも選手が途中で棄権する事は有りますね。例えば体調が悪くなった、足がつってしまったといった事態が発生した時です。

 

まずはこれまで使ってきた条件分岐で表現を試みます。以下の図を見て下さい。

 

 

前項で水分補給の判断に使った箇所を、競技の継続が可能かどうかを判定する内容に変更しました。そして継続が不可能な場合は、棄権して中止する様にします。これで繰り返しを途中で止めるという事が実現できました。

 

しかしこれでは競走を棄権できるタイミングがスタートラインのみになってしまいます。実際の競技では、アクシデントはいつ発生するか判りません。これでは足がつってしまっても、取りあえずスタートラインまで辿り着かないと棄権する事ができなくなってしまいます。

 

では前項の水分補給で行った様に、半周した時にも条件分岐を設定したらどうでしょうか。確かに棄権できるタイミングは倍になります。しかし先に述べた通り、選手は走っている間ずっと棄権のリスクを抱えています。半周ごとでも不十分ではないでしょうか。

 

では、1/4周ごとにチェックしたら?10メートルごとに…1メートルごとに…とチェックのタイミングを増やせば、確かに実現したい事に近づきます。しかし本当に実現したいのは「選手が選手の意思でいつでも棄権できる」という事ですから、このやり方ですと理論上は実現できないという結論になります。

 

コンピューターのプログラムでは、条件分岐の箇所を無数に増やす事は可能です。しかし、プログラムが実行されている最中に「繰り返しを止めろ」という指示は出せません。実際には、「コンピューターに対し何らかの指示が出されたら特定のプログラムが実行される」という仕組みを設ける事はできます。しかし実行されている最中のプログラムに割り込むという事は、基本的にできません(実行されているプログラムを強制的に終了させるという事はできます)。

 

前項で取り上げた無限ループになってしまった場合も、そのプログラム内の変数を書き換えれば止まるじゃないかと思われるかもしれません。しかし動いてしまっているプログラムに対し、途中で中身を操作する事はできないのです。

 

今回は繰り返しを途中で止める方法と、一度動いたプログラムは原則として途中で中身を変えられないという事を述べてきました。次回は繰り返しの回数について考えてみます。