第4講 if文の学習
第3話 5教科合計とif文による合否判定
第2話問題解答例
if(w>=80)textBox2->Text=L"合格";
if(w<80) textBox2->Text=L"不合格";
こうすればif...else...文を使わなくても、
合格不合格の両方を表示させることができます。
elseは否定文であり、否定文はわかりにくいので
すべて肯定文で表現する上のようなやり方の方がよいとする考え方もあるわけです。
ですが、私は好みの問題だと思います。
したがって、
if(w>=80)textBox2->Text=L"合格"; else textBox2->Text=L"不合格";
でも
if(w>=80)textBox2->Text=L"合格";
if(w<80) textBox2->Text=L"不合格";
でもよいと思います。
自分がわかりやすいと思う方を採用すればよいのではないでしょうか。
さて、前回のサンプルソフトはあまりにも簡単すぎるので改良しもう少し複雑にしましょう。
国語、社会、数学、理科、英語の5教科の得点を入力して、合計を計算し、
合否判定し、さらに講評も加えることにしましょう。
そこで前回のForm1を次のように改良します。
5教科の合計を入力し、合否を判定し、講評までするということで、
前回よりソフトらしくなっています。
Form1はプロパティから、合否判定ソフトに変更されています。
合格条件は、合計が300以上としましょう。
講評は、最初は次の3段階とします。
400以上なら大変優秀、400未満300以上なら優秀、300未満なら後一歩の努力が必要
3段階評価はif...else...文を入れ子式に使用することによって可能です。
if(条件式){
・
・
・
}
else {
if(条件式){
・
・
・
}
else{
・
・
・
}
}
では、皆さん実行をダブルクリックしてコーティングを考えてください。
解答例は、例によって30行下です。
解答例その1
#pragma endregion
private: System::Void button1_Click(System::Object^ sender,
int a,b,c,d,f,w;
//textBoxから5教科の値を取得
a=int::Parse(textBox1->Text);
b=int::Parse(textBox2->Text);
c=int::Parse(textBox3->Text);
d=int::Parse(textBox4->Text);
f=int::Parse(textBox5->Text); //eはすでに、System::EventArgs^ eと宣言されていて使えないのでfとなっている
//5教科合計を計算
w=a+b+c+d+f;
//5教科合計を表示
textBox6->Text=w.ToString();
//合否判定
if(w>=300)textBox7->Text=L"合格";
if(w<300) textBox7->Text=L"不合格";
//講評
if(w>=400){
textBox8->Text=L"大変優秀です。";
}
else{
if(w>=300){
textBox8->Text=L"優秀です。";
}
else{
textBox8->Text=L"後一歩の努力が必要です。";
}
}
}
};
}
[解説]
if(w>=400){
textBox8->Text=L"大変優秀です。";
}
else{
if(w>=300){
textBox8->Text=L"優秀です。";
}
else{
textBox8->Text=L"後一歩の努力が必要です。";
}
}
の部分を解説しておきましょう。
まず、
if(w>=400){
textBox8->Text=L"大変優秀です。";
}
によって、400以上については、『大変優秀です。』と表示されます。
次のelse文
else{
if(w>=300){
textBox8->Text=L"優秀です。";
}
else{
textBox8->Text=L"後一歩の努力が必要です。";
}
}
は、400以上が否定された場合についての実行ですから、400未満が対象になります。
すると、
if(w>=300){
textBox8->Text=L"優秀です。";
}
は、400未満で300以上の場合が対象になり、textBox8に『優秀です』と表示されることになります。
最後の
else{
textBox8->Text=L"後一歩の努力が必要です。";
}
は、300以上の否定で、300未満が対象になり、この場合にtextBox8に『後一歩の努力が必要です。』と表示されるわけです。
以上によって、意図通りにプログラムが動くことがわかります。
尚、eは変数名としては使えません。
理由は、プログラム文の冒頭
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
のピンクを見ていただければわかります。
eはすでにある種の変数として使われてしまっています。
これがどのような働きをしているのかは、私にもわかりません。
変数名の付け方には、いくつかの禁則がありました。
a1は可ですが、1aは不可です。
変数名は、半角英数と_(アンダーバー)のみを使い、
冒頭はアルファベットがこなければならないという決まりになっているからです。
eを使うことも禁則と一つであると理解して下さい。
ただし、e1やenなどは使えます。Visual C++は、eとe1を別の変数として認識してくれるからです。
つまり、e単独では使えないのです。
今回はif...else...文を入れ子式によって3段階評価を行いましたが、
実はif文のみでも可能です。
そのためには400未満300以上の条件式が必要になりますが、
これは&&演算子によって可能です。
w<400 && w>=300
&&は『かつ』を意味します。
したがって、上の文は400未満かつ300以上で、結局400未満300以上を意味します。
この場合のコーティングを考えましょう。
解答例は、30行下。
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int a,b,c,d,f,w;
//textBoxから5教科の値を取得
a=int::Parse(textBox1->Text);
b=int::Parse(textBox2->Text);
c=int::Parse(textBox3->Text);
d=int::Parse(textBox4->Text);
f=int::Parse(textBox5->Text); //eはすでに、System::EventArgs^ eと宣言されていて使えないのでfとなっている
//5教科合計を計算
w=a+b+c+d+f;
//5教科合計を表示
textBox6->Text=w.ToString();
//合否判定
if(w>=300)textBox7->Text=L"合格";
if(w<300) textBox7->Text=L"不合格";
//講評
if(w>=400)textBox8->Text=L"大変優秀です。";
if(w<400 && w>=300)textBox8->Text=L"優秀です。";
if(w<300)textBox8->Text=L"後一歩の努力が必要です。";
}
};
}
実行結果例
では、課題を出して第3話を閉めましょう。
3段階評価を次の4段階に変更する場合のコーティングを
if...else...を入れ子式でやる場合とif文のみで実行する場合の両方を考えましょう。
それが、成功したら5段階の場合についても両方挑戦しましょう。
点数区分やコメントは皆さんでご自由に考えてください。
例えば、450点以上なら『あなたは超天才で、惚れちゃいそう!』など。
遊びながらプログラミングを楽しみましょう。
第2話へ 第4話へ
vc++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る