Lesson 6では2分岐の方法まで扱いましたが,3分岐以上はどうすればよいでしょうか。これには2つの方法があります。
1つは,ElseIf(Else If の2語でなく,1語で ElseIf)を使う方法です。
Lesson 6の後半に出てきたプログラムを再掲します。
#prompt Dim A As Double Input A If A>0 Then Print A;"は正の数です。" Else Print A;"は正の数ではありません。" End If Print "終わり"
これの「正の数でない」という判定は,さらに細かく分けて「負の数」と「ゼロ」の2つに分けることが可能です。これは,正の数でないと判定されたときにそれがさらに「負かゼロか」を判定すればよいのですから,以下のように書けます。
#prompt
Dim A As Double
Input A
If A>0 Then
Print A;"は正の数です。"
Else
If A<0 Then
Print A;"は負の数です。"
Else
Print A;"はゼロです。"
End If
End If
Print "終わり"
しかし,この場合のように「Elseの直後にIfの条件文が来る」場合には,もっと簡単な書き方が存在します。それが「ElseIf」なのです。
#prompt
Dim A As Double
Input A
If A>0 Then
Print A;"は正の数です。"
ElseIf A<0 Then
Print A;"は負の数です。"
Else
Print A;"はゼロです。"
End If
Print "終わり"
ElseIf は,ElseIfの上に書かれたIf(あるいはElseIf)の条件が成り立たなかった場合にさらに条件判断をして,それが成り立ったときに次のElse(あるいはElseIf,End If)の部分まで文を実行します。
なお,ElseIf は複数あっても構いません。If 文は一般に以下のように書けます。
[共通の処理] ・ ・ If [条件1] Then [条件1成立時に実行する文] ElseIf [条件2] Then [条件1が不成立で条件2成立時に実行する文] ElseIf [条件3] Then [条件1〜2が不成立で条件3成立時に実行する文] ElseIf [条件4] Then [条件1〜3が不成立で条件4成立時に実行する文] ElseIf [条件5] Then ・ ・ ・ Else [すべての条件が不成立時に実行する文] End If [共通の処理] ・ ・
実行例です。
? 120
120 は正の数です。
終わり
? -10
-10 は負の数です。
終わり
? 0
0 はゼロです。
終わり
? 5
5 は正の数です。
終わり
もちろんIfの時同様に,ElseIf があって Else 以下のない
#prompt Dim A As Double Input A If A>0 Then Print A;"は正の数です。" ElseIf A<0 Then Print A;"は負の数です。" End If Print "終わり"
のような形でもOKです。
上側の If あるいは ElseIf で条件式が成り立つと,それより下側の ElseIf の中の文は,条件が成り立っても実行されません。例えば
#prompt Dim A As Double Input A If A>=10000 Then Print A;"は5桁以上あります。" ElseIf A>=1000 Then Print A;"は4桁以上あります。" ElseIf A>=100 Then Print A;"は3桁以上あります。" End If Print "終わり"
のような時に Input 文で A の値を 2000 に設定したとします。この場合,A の値は「A>=1000」と「A>=100」の2つの条件式に合致しますが,実際に実行されるのは「Print A;"は4桁以上あります。"」だけで,これより下に書かれた「Print A;"は3桁以上あります。"」は実行されません。両方実行したいのであれば,以下のように書いて下さい。
#prompt Dim A As Double Input A If A>=10000 Then Print A;"は5桁以上あります。" End If If A>=1000 Then Print A;"は4桁以上あります。" End If If A>=100 Then Print A;"は3桁以上あります。" End If Print "終わり"
若干面倒ですが,このように分けて下さい。
問10 Input文を用いて点数を入力し,点数によって以下のようなメッセージを表示せよ。
80点以上100点以下 | あなたはすばらしい! |
60点以上80点未満 | もう少しだ! |
30点以上60点未満 | 努力が足りないようですね。 |
0点以上30点未満 | ちゃんと勉強してますか? |
それら以外 | テストの点数を入力してね。 |
本当に長くなりましたが,次で条件分岐は終わりです。
もう1つの複数方向への条件分岐の方法は,条件が「=」を用いるものだけであるときに役立ちます。
それではまず下の例を見て下さい。
#prompt Dim A As Double, B As Double, P As String Input "1つ目の値は>",A Input "2つ目の値は>",B Input "計算の種類は>",P If P="+" Then Print A+B ElseIf P="-" Then Print A-B ElseIf P="*" Then Print A*B ElseIf P="/" Then Print A/B ElseIf P="^" Then Print A^B Else Print "計算できません。" End If
実行例
1つ目の値は> 5 2つ目の値は> 8 計算の種類は> + 13
1つ目の値は> 7 2つ目の値は> 6 計算の種類は> * 42
これ,簡単な電卓というわけです。(プログラムが初めての方なら,ちょっとプログラマーになった気分がしませんか?・・・それはさておき)このように,If・ElseIf を延々と使えば何分岐でも可能です。しかしこの例のように,条件文が等式(イコールで結んだ式)だけの場合に限っては,次の例に挙げる Select Case 文が有効です。
#prompt Dim A As Double, B As Double, P As String Input "1つ目の値は>",A Input "2つ目の値は>",B Input "計算の種類は>",P Select Case P Case "+" Print A+B Case "-" Print A-B Case "*" Print A*B Case "/" Print A/B Case "^" Print A^B Case Else Print "計算できません。" End Select
まず最初に,どの変数によって条件が分かれるかを選び,Select Case [変数] のように書きます(なお[変数]の部分は,「A+3」のような変数を含んだ式であっても構いません)。
次に Case [値] を並べていきます。この[値]が当初与えた[変数]の値と一致していれば,そこから次の「Case」あるいは「End Select」まで文が実行されます。また Case Else は,他の[値]のどれにも一致しないときに実行される文で,必要がなければなくてもよいです。
最後の End Select は,「End If」と同様「ここまでが条件分岐されている部分である」ことを表します。
[共通の処理] ・ ・ Select Case [変数] Case [値1] [変数]と[値1]が等しいときに実行される文 Case [値2] [変数]と[値2]が等しいときに実行される文 Case [値3] [変数]と[値3]が等しいときに実行される文 Case [値4] ・ ・ ・ Case Else どの条件にも合致しなかったときに実行する文 End Select [共通の処理] ・ ・
なお,Select Case も ElseIf の場合と同様「複数の条件に当てはまった時は一番上の条件だけが適用」されます。
注:VisualBasicなどで使用できる「Case A, B, C」のような列挙形式の Select Case 文は,ActiveBasicでは使用できません(Ver3.12 / Ver4.00β3 現在)のでご注意下さい。
問11 Input文で2つの数値を入力し,以下の条件に従って値を表示せよ。