第4講 If文の学習
第3話 5教科合計とIf文による合否判定
第2話問題解答例
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a As Integer
'TextBox1から値を取得
a = TextBox1.Text
'合否判定
If a >= 80 Then
TextBox2.Text = "合格"
End If
If a < 80 Then
TextBox2.Text = "不合格"
End If
End Sub
End Class
こうすればIf...Ese...文を使わなくても、
合格不合格の両方を表示させることができます。
Eseは否定文であり、否定文はわかりにくいので
すべて肯定文で表現する上のようなやり方の方がよいとする考え方もあるわけです。
ですが、私は好みの問題だと思います。
したがって、
If a >= 80 Then
TextBox2.Text = "合格"
Else
TextBox2.Text = "不合格"
End If
でも
If a >= 80 Then
TextBox2.Text = "合格"
End If
If a < 80 Then
TextBox2.Text = "不合格"
End If
でもよいと思います。
自分がわかりやすいと思う方を採用すればよいのではないでしょうか。
さて、前回のサンプルソフトはあまりにも簡単すぎるので改良しもう少し複雑にしましょう。
国語、社会、数学、理科、英語の5教科の得点を入力して、合計を計算し、
合否判定し、さらに講評も加えることにしましょう。
そこで前回のForm1を次のように改良します。
5教科の合計を入力し、合否を判定し、講評までするということで、
前回よりソフトらしくなっています。
Form1はプロパティから、合否判定ソフトに変更されています。
合格条件は、合計が300以上としましょう。
講評は、最初は次の3段階とします。
400以上なら大変優秀、400未満300以上なら優秀、300未満なら後一歩の努力が必要
3段階評価はIf...Else...文を入れ子式に使用することによって可能です。
If 条件式 Then
・
・
・
Else
If 条件式 Then
・
・
・
Else
・
・
・
End If
End If
では、皆さん実行をダブルクリックしてコーティングを考えてください。
解答例は、例によって30行下です。
解答例その1
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a As Integer, b As Integer, c As Integer, d As Integer, f As Integer,
w As Integer
'TextBox1から値を取得
a = TextBox1.Text
b = TextBox2.Text
c = TextBox3.Text
d = TextBox4.Text
f = TextBox5.Text 'eはすでに、ByVal e As System.EventArgsと宣言されていて使えないのでfとなっている。
'5教科合計を計算
w = a + b + c + d + f
'5教科合計を表示
TextBox6.Text = w
'合否の表示
If w >= 300 Then
TextBox7.Text = "合格"
Else
TextBox7.Text = "不合格"
End If
'講評の表示
If w >= 400 Then
TextBox8.Text = "大変優秀です。"
Else
If w >= 300 Then
TextBox8.Text = "優秀です。"
Else
TextBox8.Text = "後一歩の努力が必要です。"
End If
End If
End Sub
End Class
[解説]
If w >= 400 Then
TextBox8.Text = "大変優秀です。"
Else
If w >= 300 Then
TextBox8.Text = "優秀です。"
Else
TextBox8.Text = "後一歩の努力が必要です。"
End If
End If
の部分を解説しておきましょう。
まず、
If w >= 400 Then
TextBox8.Text = "大変優秀です。"
によって、400以上については、『大変優秀です。』と表示されます。
次のElse文
Else
If w >= 300 Then
TextBox8.Text = "優秀です。"
Else
TextBox8.Text = "後一歩の努力が必要です。"
End If
End If
は、400以上が否定された場合についての実行ですから、400未満が対象になります。
すると、
If w >= 300 Then
TextBox8.Text = "優秀です。"
は、400未満で300以上の場合が対象になり、TextBox8に『優秀です』と表示されることになります。
最後の
Else
TextBox8.Text = "後一歩の努力が必要です。"
End If
は、300以上の否定で、300未満が対象になり、この場合にTextBox8に『後一歩の努力が必要です。』と表示されるわけです。
以上によって、意図通りにプログラムが動くことがわかります。
尚、eは変数名としては使えません。
理由は、プログラム文の冒頭
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
のピンクを見ていただければわかります。
eはすでにある種の変数として使われてしまっています。
これがどのような働きをしているのかは、私にもわかりません。
変数名の付け方には、いくつかの禁則がありました。
a1は可ですが、1aは不可です。
変数名は、半角英数と_(アンダーバー)のみを使い、
冒頭はアルファベットがこなければならないという決まりになっているからです。
eを使うことも禁則と一つであると理解して下さい。
ただし、e1やenなどは使えます。Visual Basicは、eとe1を別の変数として認識してくれるからです。
つまり、e単独では使えないのです。
今回はIf...Ese...文を入れ子式によって3段階評価を行いましたが、
実はIf文のみでも可能です。
そのためには400未満300以上の条件式が必要になりますが、
これはand演算子によって可能です。
w<400 and w>=300
andは『かつ』を意味します。
したがって、上の文は400未満かつ300以上で、結局400未満300以上を意味します。
この場合のコーティングを考えましょう。
解答例は、30行下。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'変数の宣言
Dim a As Integer, b As Integer, c As Integer, d As Integer, f As Integer,
w As Integer
'TextBox1から値を取得
a = TextBox1.Text
b = TextBox2.Text
c = TextBox3.Text
d = TextBox4.Text
f = TextBox5.Text 'eはすでに、ByVal e As System.EventArgsと宣言されていて使えないのでfとなっている。
'5教科合計を計算
w = a + b + c + d + f
'5教科合計を表示
TextBox6.Text = w
'合否の表示
If w >= 300 Then
TextBox7.Text = "合格"
Else
TextBox7.Text = "不合格"
End If
'講評の表示
If w >= 400 Then
TextBox8.Text = "大変優秀です。"
End If
If w < 400 And w >= 300 Then
TextBox8.Text = "優秀です。"
End If
If w < 300 Then
TextBox8.Text = "後一歩の努力が必要です。"
End If
End Sub
End Class
実行結果例
では、課題を出して第3話を閉めましょう。
3段階評価を次の4段階に変更する場合のコーティングを
If...Else...を入れ子式でやる場合とIf文のみで実行する場合の両方を考えましょう。
それが、成功したら5段階の場合についても両方挑戦しましょう。
点数区分やコメントは皆さんでご自由に考えてください。
例えば、450点以上なら『あなたは超天才で、惚れちゃいそう!』など。
遊びながらプログラミングを楽しみましょう。