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

前の章では「ActiveBasicによる入出力」ということで入出力をはじめプログラミングの基礎的なことをやってきましたが、この章ではプログラムをプログラムたらしめる「条件・分岐・繰り返し」を学習します。 これは変数の値などに応じて行う処理を変えたり、同じ処理を何回も繰り返したりするものです。 今までは書いたら書いた分だけの処理しかできませんでしたが、これを使うと元のプログラムのコード(ソースと言います)が、それを書くのに費やした労力の何倍もの仕事ができる能力を持つようになります。 それではActiveBasicでプログラムに価値を持たせるための方法をこの章を学習しましょう。

1.Ifブロック

【目標】「If」を使って変数の値によって作業を変えることができるようになりましょう。

上の第二章のあいさつのところにも書きましたが、この章で学ぶことはプログラムを書くのに費やした労力以上の価値を持たせることができるというものです。 どういうことかと言えば、今までには例えば"a"を10回表示したい場合は、「Print "a"」を10回書かないといけませんでした。 つまり今まではプログラムを書く手間と実行結果の比が1:1だったわけです。 しかし、この章を学習すればこの比を1:10にも1:100にもすることができます。

今回は、まずその手始めとして、条件・分岐にあたる「If」という命令語を学習します。 これは変数の値などによって、プログラムの処理を変えることができるというプログラムの基本的な技術です。 それでははりきっていきましょう。

まずはいつもの通り、下のプログラムを実行してみましょう。

'lesson1-2-1
#console
Dim a As Long
Input "1 + 1 = "; a
If a = 2 Then
    Print "正解!"
ElseIf a < 2 Then
    Beep
    Print "正解はもっと大きいよ!"
Else
    Beep
    Print "正解はもっと小さいよ!"
End If
Sleep(3000)
End

上のプログラムを実行すると下のようになります。 今回はJavaScriptを使用してページ上で実際に体験できるようにしてみました(InternetExplorer 6.0, Opera7.53, Netscape7.1で確認済み)。 実際のプログラムとは、エンターキーの代わりに右の「Enter」ボタンを押すというところが変わっていますが、実際に数値を入れて試してください (カーソルが表示されていないときは「?」の横をクリックしてください)。

C:\ActiveBasicCourse\lesson1-2-1.abp
1 + 1 = ?

今回のプログラムは実行するときには、上の体験版でもいいのでわざと違う値を入れてみてください。 そうするとよりこのプログラムがどういうことをしているのか実感できます。 あとこのプログラムでは間違った答えを入力すると、音が出るのでボリュームに気をつけましょう。

では昔テストのときに筆算で「1 + 1 = 1」と書いたなんてアホな話は放っといて(^^;、今回の説明を始めましょう。

-*-*-*-*-説明-*-*-*-*-
【使い方】
(1) If 条件式  Then プログラム  End If
【備考】
(1)(a) Thenプログラム の前との間と、プログラム の最後とEnd Ifの間には改行を入れます。
  (b) プログラム の部分には実行したいプログラムを書きます。 何行に渡っても構いません。
  (c) 「End If」の部分は、「EndIf」のようにスペースなしでも構いません。
【意味】
(1) 条件式 が「真」のときプログラム を実行します。
【解説】
(1) Ifブロック
(i) 概説
「Ifブロック」というのは指定された条件に合わせて、実行するプログラムを変えるためのものです。 例えば、日常でも「もし晴れたら、散歩に出かける。」「もしあの俳優さんが出ていたら、その番組を見る。」などのように、何らかの条件(太字の部分)によって行動を変えるということがよくあると思います。 またプログラムでも「もし正解が入力されたら、『正解』と表示する。」などのように、何らかの条件によって違うことをさせたいと思うことがあると思います。 こういうときに使うのが、前置きが長くなりましたが「Ifブロック」です。
(ii) 条件式
「Ifブロック」には、まず、先ほど書いた実行するプログラムを変えるための「何らかの条件」というものが必要になります。 この「何らかの条件」というものを表すために使うのが「条件式」です。 詳しくは下の方で説明しますが、「変数『a』は2か?」「変数『a』は2を超えるか?」などのような条件を表します。 そして、この条件を満たすとき(例えば「変数『a』は2か?」が条件だったときは変数「a」が2だったとき)のことを「条件式が」、満たさないときを「条件式が」と言います。
(iii) プログラム
条件が「真」だったときはプログラムの部分が実行されます。 例えば、下のプログラムの場合(条件式は「変数『a』が0かどうか?」ということを表していて、変数「a」が「0」のときが「真」です。)は、変数「a」が2だったときにのみ「aは0です。」と表示され、変数「a」が他の値のときは何も表示されません。
If a = 0 Then
    Print "aは0です。"
End If
(2) 条件式
(i) 概説
条件式というのは先ほども触れましたが、「何らかの条件」を表すための式で、プログラムでは主に「変数××の値が△△より○○かどうか?」ということを表すために使います。
(ii) 条件式の書き方
条件式は比べるもの2つを「条件演算子」というものではさんで表します。 例えば「=」は「『=』の左側と右側の値が等しいかどうか?」ということを表しますが、これを使って「変数『a』の値と変数『b』の値が等しいかどうか?」を表すときは「a = b」というように表現します。 条件演算子は下のようなものがあります。
条件演算子意味
=「=」の左側と右側の値が等しいかどうか?左側と右側の値が等しい
<>「<>」の左側と右側の値が異なるかどうか?左側と右側の値が異なる
<「<」の左側の値が右側の値より小さいかどうか?左側の値が右側の値よりも小さい
>「>」の左側の値が右側の値より大きいかどうか?左側の値が右側の値よりも大きい
<=「<=」の左側の値が右側の値より小さい、または等しいかどうか?左側の値が右側の値よりも小さい、または等しい
>=「>=」の左側の値が右側の値より大きい、または等しいかどうか?左側の値が右側の値よりも大きい、または等しい
下にいろいろな例を挙げています。
[例] a = 2 '変数「a」が2に等しいときに「真」 (例:a = 2)
a > 2 '変数「a」が2よりも大きいとき「真」 (例: a = 3)
a = b + 2 '変数「a」が変数「b」の値よりも2よりも大きいとき「真」 (例: a = 4: b = 2)
a + 5 <= b + 2 '変数「a」に5を加えた値より、変数「b」の値に2を加えた値の方が大きい、または等しいとき「真」 (例1: a = 4: b = 7, 例2: a = 1: b = 5)
a * b = 0 '変数「a」と変数「b」を掛け合わせた値が「0」のとき「真」 (例1: a = 4: b = 7, 例2: a = 1: b = 5)
※ 条件演算子の右側と左側は同じ種類にしてください。 つまり「a + 2 = "b"」のように、文字列と数値を比べないようにしてくださいということです。
【使い方】
ElseIf 条件式  Then プログラム 
【備考】
(a) これは[1]の「Ifブロック」の「プログラム 」と「End If」の間に挿入して使います。
(b) ElseIfの前、Thenプログラム の前との間と、プログラム の後には改行を入れます。
(c) "Else If"のように"Else"と"If"の間にスペースを入れることはできません
【意味】
挿入したところより上の条件式が全て「偽」であり、かつ挿入した「ElseIfブロック」の条件式 が「真」のときにプログラムを実行します。
【解説】
ElseIfブロック
(i) 使い方
まず上の文字だけでは分かりにくいと思うので、下に「ElseIfブロック」を実際に使った例を載せます。
If a = 0 Then
    Print "aは0です。"
ElseIf b = 0 Then
    Print "aは0ではありませんがbは0です。"
End If
上は[1]で挙げた例に「ElseIfブロック」を挿入したものです。 元の「Ifブロック」のプログラム部分の後とEnd Ifとの間に「ElseIfブロック」が挿入されていますね。
(ii) 概説
「ElseIfブロック」の中のプログラム はその上の条件式が「偽」のときで、かつ「ElseIfブロック」の条件式 が「真」のときに実行されます。 上に挙げた例では、「ElseIfブロック」の上の条件式は「a = 0」ですね。 この条件式が「偽」のとき、つまり「a」が0でないときで、かつ「ElseIfブロック」の条件式 が「真」、つまり「b = 0」のときにプログラム が実行され、今回の場合は"aは0ではありませんがbは0です。"と表示されます。
ちなみに、「ElseIfブロック」の上の条件式が「真」のとき、つまり先ほどの例では「a = 0」のときは、IfからElseIfの間だけが実行されて、ElseIfから後は無視されます。 なので「a」「b」が共に0であったとしても"aは0ではありませんがbは0です。"とは表示されません。
(ii) 複数ある例
この「ElseIfブロック」は下のように何個も挿入することができます。
If a = 0 Then
    Print "aは0です。"
ElseIf b = 0 Then
    Print "aは0ではありませんがbは0です。"
ElseIf b > 0 Then
    Print "aは0でなく、bは0より大きいです。"
End If
この場合、「b = 0」の方の「ElseIfブロック」は先ほどと同じ考え方で考えることができます。 問題は「b > 0」の方の「ElseIfブロック」ですが、この場合も同じように「その上の条件式が『偽』でかつ『ElseIfブロック』の条件式 が『真』のとき」に実行されます。 このとき注意するのは、「その上の条件式」というのは、その「ElseIfブロック」よりも上の条件式全てを指します。 なので上の例では「『a』も『b』も0でないときで、『b』が0より大きいとき」にしか"aは0でなく、bは0より大きいです。"と表示されません。
また、この場合で「『a』が0でなく『b』が0のとき」のときは一つ上の例での「a = 0」だったときと同じような考え方で、"aは0ではありませんがbは0です。"だけを表示します。 このように、「Ifブロック」や「ElseIfブロック」では次のElseIfが出てくるまでのところしか、たとえその後にいろいろ書いてあっても実行しないということです。
【使い方】
Beep
【意味】
ビープ音を鳴らします。
【解説】
( ) Beep命令語
( ) ビープ音
「Beep」と書けば、そこで「ビープ音」を鳴らせます。 「ビープ音」というのはシステムで使われてる「一般の警告音」という音のことです。 といっても、これだとどんな音か分からないと思いますので、下に用意しました。
※1 「ビープ音」の著作権はMicrosoftにあります。 あくまで「引用」です。
※2 お使いのパソコンの設定によっては他の音になっていることもあります。 あくまで上のはデフォルトのものです。
【使い方】
Else プログラム 
【備考】
(a) これは[1][2]で紹介した「Ifブロック」(+「ElseIfブロック」)の最後の「プログラム 」と「End If」の間に挿入して使います。
(b) Elseの前、プログラム の後には改行を入れます。
【意味】
挿入したところより上の条件式が全て「偽」であればプログラムを実行します。
【解説】
Elseブロック
(1) 概説
「Elseブロック」といっても考え方は「ElseIfブロック」と同じです。 ただ一つ違うのは「ElseIfブロック」の「条件式  Then」がないところです。 条件式 がないということは、この「Elseブロック」より上の条件式が全て「偽」であれば、それだけで無条件で実行されます。 下が例です。
If a = 0 Then
    Print "aは0です。"
ElseIf b = 0 Then
    Print "aは0ではありませんがbは0です。"
Else
    Print "a, bはともに0でありません。"
End If
上の例で「Elseブロック」の上の条件式「a = 0」「b = 0」が全て「偽」のとき、つまり「a」も「b」も0でないときに"a, bはともに0でありません。"が表示されます。
(2) 注意点
「Elseブロック」は必ず最後に挿入してください。 もし「Elseブロック」を最後に挿入しない、次のようなプログラムを打つとエラーが出ます。
' エラーが出ます
If a = 0 Then
    Print "aは0です。"
Else
    Print "a, bはともに0でありません。"
ElseIf b = 0 Then
    Print "aは0ではありませんがbは0です。"
End If

今回はIfブロックをやりましたが、理解していただけましたでしょうか? 今回の「Ifブロック」はプログラミングの基本の一つなのでしっかりIfブロックの構造をおさえてください。 もし分からないことがあれば掲示板などで気軽に質問してください。 では、今回の「やってみよう」です。

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

「1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10」の答えを入力してもらい、その答えを下の表と照らし合わせて結果を表示するプログラムを作ってみましょう。

入力された答え表示するメッセージ
45以上55未満(45は含むが55は含まない)「おしい。もう少し上だよ。」あり
55「お見事!ひょっとして天才?」なし
55を超え65以下(55は含まないが65は含む)「おしい。もう少し下だよ。」あり
それ以外「よーく考えよー。計算大事だよ。」あり

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

前に戻る - 次に進む

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