OriosのActiveBasic講座(1-2):条件・分岐・繰り返し

3.Doループ

【目標】「Do」を使って指定した間、作業を繰り返すことができるようになりましょう。

前回は「Whileループ」を勉強しましたがどうでしたか? これでかなりプログラミングらしくなったと思います。 で、今回取り上げるのは、「繰り返し」の第二弾として、「Doループ」を学習します。 ただ、これは「While」に似ているので、前回に比べて、比較的分かりやすいと思います。 もし「While」が不十分だと思ったら、もう一回前回のを見直して、 今回の学習に入りましょう。

'lesson1-2-3
#console
Dim a As Integer
Dim b As Integer
Dim i As Integer
a=2 '<==好きな数字を代入してください。
Print "このプログラムにはある整数が用意されています。"
Do
Input "その数字を当ててください。";b
i=i+1
If a=b Then
Print "正解です。"
Exit Do
EndIf
Loop Until i>=10
Sleep(3000)
End

C:\ActiveBasicCourse\lesson1-2-3...
例えば3と入力すると...
このプログラムにはある整数が用意されています。
その数字を当ててください。? 3
その数字を当ててください。?
その後に2を入力すると...
このプログラムにはある整数が用意されています。
その数字を当ててください。? 3
その数字を当ててください。? 2
正解です。

今回は数当てゲームを書いてみましたがどうでしたか? この例では正解の数は「2」にしてみましたが、他の数字でも試してみてください。 ただ、このときにあんまり変な数字をやるのはやめましょう。 例えば「22754」なんてするとほとんどの場合答えられません。 また「ある整数」のところを「1〜10までの整数」に変えるのもいいと思います。 で、話がそれましたが、今回は「Doループ」を勉強します。 ただ、これは「While」の親戚のようなものなので、前回に比べ簡単に習得できます。 では、説明に入りましょう。

-*-*-*-*-説明-*-*-*-*-
【使い方】
Do command  Loop While(またはUntil) 条件式 
【備考】
(1)Docommand 、command とLoopの間には、それぞれ改行を入れます。
(2)「While(またはUntil)」は「While」か「Until」のどちらかを使うという意味です。 つまり「Loop While」「Loop Until」の二通りに書けるということです。 (ただし後でも書きますが意味は違ってきます。)
【意味】
 条件式 が「真」(または「偽」)の間command が実行されます。
【解説】
(1)ループの流れはこうなっています。

(1)まずcommand を実行する。
(2)Loopまで来たらWhileUntilを判別する。
↓(While)↓(Until)
(3)条件式が偽ならループを抜ける。(3)条件式が真ならループを抜ける。
↓(真なら(1)へ)↓(偽なら(1)へ)

 以上が「Doループ」の流れです。 見て分かるように「Whileループ」と確かに違うところもありますが、条件式の結果に合わせながらループを続ける点では似ていますね。 「Until」と「While」のところですが、 「Until」はもともと英語で「〜まで」という意味で、「条件式 が真になるまで」ループを繰り返します。 一方「While」はもともと英語で「〜の間」という意味で、「条件式 が真の間」ループを繰り返します。

(2)「Doループ」は「Whileループ」は確かに似ていますが、次の2点で「Whileループ」と違っています。
  • 「Whileループ」はもし始めから条件式が偽の場合、ループ自体が実行されませんが、 「Doループ」の場合は、始めから条件式が真(Untilのとき)または偽(Whileのとき)でも1回は実行されます。 この違いは普段はあんまり気になりませんが、今回のように一回は必ずループの中を実行させたいときは「Doループ」を使うといいでしょう。 また技術的計算など、正確さが要求されるプログラムは、これらの使い分けをきちんと考えましょう。 でも普段はどっちでもいいことが多いです。
  • 「Whileループ」はループを抜ける条件式の真偽が決まっています(条件式が負になれば抜ける)が、 「Doループ」の場合は「Until」や「While」を使うことにより、 ループを抜ける条件式の真偽を決めることができます。
(3)「Doループ」は「Whileループ」に書き換えが可能です。 ということで「説明」の下に書いてみました。 参考に見てみてください。

【使い方】
Exit ループの名前 
【備考】
 ループの名前 とは「While」や「Do」などのことです。
【意味】
 最も内側のループの名前 を強制的に抜けます。
【解説】
 今回の例では正解を入力したときのように、たまに臨時でループを抜けたいときがあると思います。 そんなときにこの「Exit」を使います。
 この「Exit」は「意味」のところで書いたとおり最も内側のループの名前 を強制終了します。 これはどういうことかというと、まず「最も内側のループ」というのは、そのとき実行しているループのことです。 なぜ「内側」かというと、例えば「Whileループ」(ループ1とする)の中にまた「Whileループ」(ループ2とする)を作っているとすると、 ループ2の中のcommand の中で「Exit While」が出てくればループ2を抜け、 ループ2の中でないループ1のcommand の中で「Exit While」が出てくればループ1を抜けます。 またループの名前 をわざわざ書くかというと、「抜けるループを特定する」ためです。 例えば「Whileループ」の中に「Doループ」があったとき、 「Exit While」が出てくれば、 「Doループ」を実行中であろうと「Whileループ」を実行中であろうと「Whileループ」を抜けます。


【注意】
( )Exitの位置と抜けるループの例((2)で挙げた例)
While a>10
While b>10
Exit While
WEnd
WEnd
While a>10
While b>10
WEnd
Exit While
WEnd
While a>10
Do
Exit While
Loop Until b>10
WEnd
While b>10」のループを抜けます。 While a>10」のループを抜けます。 While a>10」のループを抜けます。

下に「Doループ」を「Whileループ」に書きかえてみました。参考にしてみてください。

Do
command
Loop Until 条件式
Do
command
Loop While 条件式
command
While Not条件式
command
WEnd
command
While 条件式
command
WEnd

今回の「Doループ」はどうでしたか? 「Whileループ」に似ている部分が結構あり、多少は学習しやすかったと思います。 それでも「Until」や「While」など新しいものもあったので、 分からない部分はしっかり読み返して少しでも理解できるようにしてください。 では最後の仕上げ、「やってみよう」です。

-*-*-*-*- -*-*-*-*-

 ユーザーに、「0」を打つまで数字を何回も入力してもらい、 ユーザーが「0」を入力したら、今まで打ってきた数字の総計を表示するプログラムを作ってみよう。




ご質問・ご意見・ご感想・苦情等はメールまたはメイン掲示板のActiveBasic板などでお気軽にどうぞ。

前に戻る - 次に進む

ホーム > OriosのActiveBasic講座(トップページ) >