【第3章】繰り返し制御文
VB2022の繰り返し制御文はいろいろあります。
【For~Nextループ】
繰り返し回数が決まっているFor制御文の使い方はTiny Basic for Windowsと同じです。For制御文を使って、1からNまでの自然数の和を求めるプログラムを作ってみました(図3-1.)。1からNまでの自然数の和は少年時代のガウスのように
N×(N+1)÷2
とやる方が早いのですが、ここではVB2022のプログラムを習得するため
1+2+3+・・・・+N
でやってみることにします。

図3-1.For~Next制御文を含むプログラム例
4行目では変数の使用宣言と同時に初期値を代入しています。
5行目では同じデータ型の複数の宣言を1ステートメントで行なっています。
VB2022の文法としては可能なのですが、5行目は注釈が入れにくくプログラムがわかりにくくなる原因になるので、筆者としてはあまりおすすめしません。
11~13行目がForブロックです。書き方はTiny Basic for Windowsと同じです。
【Do~Loop】
条件が成立するまでの(回数が決まっていない)繰り返しでは、VB2022ではDo制御文を使います。Tiny Basic for WindowsのWhile~Wend制御文に似た書き方をしますが、VB2022のDo制御文は繰り返し終了条件の書き方がいろいろあります。Do制御文の基本的な書き方はこうなります。
Do 繰り返しの始まり
繰り返される処理
Loop 繰り返しの終わり
これを使って簡単なクイズのプログラムを作ってみます(図3-2.)思い切り筆者の趣味全開なサンプルで申し分けありません💦ちなみに、日本で最初に開通した鉄道は東京~横浜なので正解は4です。

図3-2.クイズのプログラム
このプログラムを実行すると図3-3.のように正解しても終わらず永久ループになります。これはDo~Loopの繰り返し終了条件が書かれていないからです。

図3-3.クイズのプログラム実行結果(永久ループ)
これを図3-4.のように、正解が出るまで解答入力を繰り返し、正解になったら「正解です」と表示してプログラムの実行終了になるようにしてみます。

図3-4.クイズのプログラム実行結果(正解が出たら終わり)
繰り返し終了条件の書き方はいろいろあります。図3-5.の方法は繰り返しに入る前に条件判定をする方法(条件先判定)です。Tiny Basic for WindowsのWhile~Wend制御文と同じです。
Do While 条件
処理A
Loop
この場合、条件が成立している間、処理Aを繰り返します。このプログラムで条件は
Whilie kaitou <> seikai
なので、「解答が不正解である間、解答入力を繰り返す」ということになります。

図3-5.クイズのプログラム(Do Whilieで終了条件)
繰り返し終了条件は、繰り返しの終わりに書くこともできます(条件後判定)。↑のプログラムは図3-6.のように書いても実行結果は同じです。

図3-6.クイズのプログラム(Loop Whilieで終了条件)
条件先判定と条件後判定の違いは、先判定では繰り返しに入る前に条件がすでに成立していれば繰り返し部分は1回も実行されないのに対し、後判定り場合は条件の成立/不成立に関わらず、繰り返し部分は最低1回は実行されることです。条件が成立した時は繰り返し部分の処理は実行してはいけないという場合、条件先判定にするようにしましょう。
Do制御文で繰り返し条件の書き方は Do While/Loop Whileの他にDo Until/Loop Untilという書き方もあります(図3-7.、図3-8.)。
Do Until 条件
処理A
Loop
Do 条件
処理A
Loop Until 条件
どちらの場合も条件が成立するまで処理Aを繰り返します。条件先判定/後判定についてはWhileの場合と同じです。

図3-7.クイズのプログラム(Do Untilで終了条件)

図3-8.クイズのプログラム(Loop Untilで終了条件)
【Exit】
Exit制御文は繰り返し、サブルーチン、プロシジャから抜ける制御文です。
Do 条件
処理A
Exit Do
処理B
Loop
処理C
この例だと、処理Aまで実行したところで条件の成立/不成立に関わらず処理Bは実行せず処理Cへ移ります。↑のクイズなら正解が出たところで繰り返しから離脱というようにすることも可能です(図3-9.)。

図3-9.クイズのプログラム(正解になったら繰り返しから離脱)
Exit制御文はDoだけでなくForにも使えます。キーボードから入力された自然数が素数か素数ではないかを判定するプログラムを作ります。素数とは2以上の自然数で1とその数の他に約数を持たないもののことです。ここでは入力された自然数Numを2からNum-1の自然数で割った余りを求め、その余りがすべて0でなければ素数とする、という方法を採択します(図3-10.)。

図3-10.素数判定のプログラム
素数かどうかの判定としてBoolean型変数のSosuuを用意します。この変数は初期値Trueにしておきます。
14行目で入力された自然数Numを2以上Num-1以下の自然数で割った余りを求め15行目で余りが0かどうかを判定しています。ここで余りが0ならこの時点でNumは素数ではないということになるので、この後の割り算と余り判定は必要ないので16行目の

図3-10.素数判定のプログラム実行結果
前章とこの章でVB2022の選択分岐、繰り返しの制御文について学びました。昔のBASIC(1980年代に全盛を極めたMicrosoft BASIC)では、制御文はこんなに充実していませんでした。いきおいマルチステートメントや無条件ジャンブのGOTO文を多用せざるを得ず、グチャグチャでわかりにくいプログラム(スバゲティプログラムといわました)になってしまうのを避けようがありませんでした。VB2022では選択分岐、繰り返しの制御文が充実し、マルチステートメントもGOTO文も必要なくなり、わかりやすい構造化プログラムが可能になりました。
コメント一覧
コメント投稿
