2019年11月18日

師匠のVB.NETどたばた塾~第3回

sisyo.gif
師匠T:……。

deshi.gif
弟子D:どうしたのですか、師匠? 何か難しい顔を……。

sisyo.gif
いや、もうすぐ12月、クリスマスであろう? いやなんでもない。

deshi.gif
(師匠の体が泣いている……!?)

sisyo.gif
さて、そんな世俗のことなどどうでもよい。今回もびしばしいくぞ!
今回は繰り返しについてじゃ。はっはっはっ!

deshi.gif
は、はぁ……。

【 やってみせい! 】

sisyo.gif
さて、今回はいきなり問題じゃ。1から5までの合計を求めるプログラムを作ってみるがよい。

deshi.gif
はいっ。かたかたかた……これでいかがでしょうか?

vb1911-l01.JPG

sisyo.gif
ふむ、まずまずじゃな。では、1から100までの合計を表示させてみよ。

deshi.gif
はい。かたかた……

deshi.gif
がーーーー!! 無理です! 気力がもちません!

sisyo.gif
そうであろう。そこで役立つのが、繰り返しを司る、Do~Loop文と、For~Next文なのだ。まずは、繰り返しの基本形・Do~Loop文について説明していくぞ!

deshi.gif
はい!

【 臨機応変! Do~Loopなのじゃ! 】

sisyo.gif
さて。Do~Loop文はある条件が満たされる(あるいは満たされなくなる)まで繰り返しを行うものであり、このように書くぞ。

(書き方1)
Do While 条件式
Loop

(書き方2)
Do Until 条件式
Loop

(書き方3)
Do
Loop While 条件式

(書き方4)
Do
Loop Until 条件式

(書き方5)
Do
Loop

deshi.gif
色々な書き方があるのですね。それぞれ、どのような違いがあるのですか?

sisyo.gif
うむ。まず、条件が満たされている間繰り返すか、条件が満たされていない間繰り返すか、からじゃ。
書き方1、書き方3の場合、つまり、Whileとついている場合は、条件が満たされている間繰り返す。つまり、条件が満たされなくなるまで繰り返すのじゃ。

deshi.gif
ふむふむ。

sisyo.gif
他方、書き方2と書き方4、Untilとついている場合は、条件が満たされていない間繰り返す。つまり、条件が満たされるまで繰り返すのだ。

deshi.gif
なるほど。

sisyo.gif
次は、最低何回繰り返すか、についてじゃ。書き方1と書き方2、つまり、Do側にUntil/Whileがついている場合は、このDoの時点で繰り返すかどうか判断するので、繰り返す条件が成立しないときは、1回も繰り返さずに終えることになる。

vb1911-z01.jpg

deshi.gif
ふむふむ。

sisyo.gif
一方、Loop側についている場合(書き方3と書き方4)は、Do~Loop内の命令を実行した後、Loopで判断するので、最低1回は繰り返すことになるのだ。

vb1911-z02.jpg

deshi.gif
なるほど!

sisyo.gif
ここまでのことを図に表すとこうなるぞ。

vb1911-z03.JPG

deshi.gif
わかりました。それで、書き方5については?

sisyo.gif
うむ。この場合は、無限に繰り返すのだ。

deshi.gif
ええ!? それはとても困るのでは?

sisyo.gif
ふふふ、安心せい。ちゃんと止めるためのものが用意してある。それがExit Do文じゃ。

deshi.gif
Exit Doですか。

sisyo.gif
うむ。このExit Do文が実行されると、そこで繰り返しは終了し、Loopの次の文から命令を実行していくのだ。
そこで、このExit Do文をIF文などと組み合わせて、条件が満たされたときにExit Do文を実行するようにするのじゃ。

deshi.gif
なるほど。

sisyo.gif
それでは弟子よ。Do~Loop文を活用し、1から10までの合計を計算するプログラムを作ってみるがよい。

deshi.gif
はい! かたかた……これでいかがでしょうか?

vb1911-l02.JPG

sisyo.gif
うむ、見事じゃ!と言いたいところだが、まだ甘いのう。実行結果を今一度確認してみるがよい。

vb1911-g01.JPG
↑ あれ?

deshi.gif
え……? あっ、45になってる。正解は55のはずなのに。どうしてでしょう?

sisyo.gif
ふふふ。プログラムの流れを追ってみるがよい。aが9の時はどうなっておる?

deshi.gif
あっ! sumに足したあと、aに1を足して10になって、そこでDoに戻って10になってるからこの10が足されずに抜けてしまったんですね。

sisyo.gif
その通りじゃ。この場合は、条件をa<>11か、a <= 10にするのが正解じゃな。

deshi.gif
なるほど。

sisyo.gif
このように、条件式の内容、またDo側につけるかLoop側につけるかでも、結果は全く違うものになってしまう。気を付けることじゃ。

deshi.gif
はいっ!

【 融通はきかんが簡単! For~Nextじゃ! 】

sisyo.gif
さて。よくよく考えてみれば、今回のプログラムの主題は、1ずつ増えていく値を合計を足していく、というものであったな。

deshi.gif
はい。

sisyo.gif
このような、条件となる値が一定値ずつ増えていく流れの場合、もっと簡単に書けるものがある。それが……

deshi.gif
For~Next文ですね!

sisyo.gif
うむ、その通りじゃ。For~Next文の書き方は、昔のBASICと同じく、このように書く。

(書き方)
For 変数=値1 To 値2 Step 値3
Next

sisyo.gif
この文は、いたって簡単。まず変数の値が値1からスタートし、値3だけ増減していく。そして、値2以上(以下)になったら、繰り返しを終えるのだ。なお、この判断は、Nextの時点で行われる。
そうそう、値3が+1の時は、Step以降は省略することができるぞ。

deshi.gif
なるほど。

sisyo.gif
さて、それでは弟子よ。改めて出題じゃ。For~Nextを活用して、1から10までの合計を計算するプログラムを作ってみるがよい。

deshi.gif
はい!

vb1911-l03.JPG

deshi.gif
ちゃんと、55と正解がでましたよ! しかも、Do~Loopと比べて、若干繰り返しの部分が短くなってすっきりしてますね!

sisyo.gif
そうであろう。臨機応変に使えるDo~Loopと、シンプルなFor~Next。これらを使いわけて使いこなすことが、繰り返し処理の肝心な部分じゃ。精進するように。

deshi.gif
はい!

sisyo.gif
では、今日はここまでじゃ。次回は、配列変数について学ぶことにする。復習を忘れてはならぬぞ!

==========

※次の更新は、『フリーゲームレビュー』の予定です。お楽しみに!

posted by 裏編 at 13:40| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする
この記事へのコメント