第4講 if文(もしもボックスの世界)
第9話 5段階判定プログラムをシンプルにする
実行画面が
・
・
出席番号=33
国語=11
社会=60
数学=25
理科=38
英語=49
合計点=183
出席番号33番はかなりの努力が必要です。
出席番号=34
国語=84
社会=96
数学=42
理科=3
英語=51
合計点=276
出席番号34番はそこそこ頑張りました。
出席番号=35
国語=92
社会=37
数学=75
理科=21
英語=97
合計点=322
出席番号35番はかなり頑張りました。
・
・
出席番号=37
国語=82
社会=35
数学=54
理科=100
英語=19
合計点=290
出席番号37番は頑張りました。
出席番号=38
国語=39
社会=1
数学=89
理科=28
英語=68
合計点=225
出席番号38番は努力が必要です。
・
・
となるソフトのコード例
//以下C#を始めるためのお呪い
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//以上C#を始めるためのお呪い
namespace a //初心者はお呪い=決まり事と思い一切気にしない
{
class Program //初心者はお呪い=決まり事と思い一切気にしない
{
static void Main(string[] args) //私は社長だ。
{
int a, b, c, d, e, g; //a:国語 b:社会 c:数学 d:理科 e:英語 の得点 g:5教科合計得点
int s; //出席番号
Random r = new Random();
for (s = 1; s <= 40; s++)
{
Console.WriteLine("各教科の点数をキーボードから入力して下さい。");
Console.WriteLine("出席番号={0:d}", s);
//以下各教科得点ランダム発生
a = r.Next(100) + 1; //国語の得点発生
b = r.Next(100) + 1; //社会の得点発生
c = r.Next(100) + 1; //数学の得点発生
d = r.Next(100) + 1; //理科の得点発生
e = r.Next(100) + 1; //英語の得点発生
//以上各教科得点ランダム発生
//以下各教科得点表示
Console.WriteLine("国語={0:d}", a);
Console.WriteLine("社会={0:d}", b);
Console.WriteLine("数学={0:d}", c);
Console.WriteLine("理科={0:d}", d);
Console.WriteLine("英語={0:d}", e);
//以上各教科得点表示
g = a + b + c + d + e; //合計点算出
Console.WriteLine("合計点={0:d}", g); //合計点表示
if (g >= 300)
{
Console.WriteLine("頑張りました。"); //5段階評価表示
}
if (g < 300 && g >= 280)
{
Console.WriteLine("そこそこ頑張りました。"); //5段階評価表示
}
if (g < 280 && g >= 240)
{
Console.WriteLine("普通です。"); //5段階評価表示
}
if (g < 240 && g >= 200)
{
Console.WriteLine("努力が必要です。"); //5段階評価表示
}
if (g < 200)
{
Console.WriteLine("かなりの努力が必要です。"); //5段階評価表示
}
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine();
}
}
}
{}の入れ子が浅くなり、コードもかなり減りわかりやすくなりました。
人によっては
if(g>=300)A; else B;
でさえ使わない方が良いという人もいます。
否定文はわかりにくいというのがその理由です。
if else文を使わずに、
if(g>=300)A;
if(g<300)B;
にすべきだというのです。
一理はありと思いますが、
私は、入れ子が2段までなら使っても良いのではないかと思います。
ですが、好みです。
皆さんはご自分で判断されて好きな方を採用すれば良いのではないでしょうか。
さて、if文の学習は以上にします。
第5講ではメソッド(1)の学習に入ります。
メソッドはC言語・C++では関数、VBではプロシージャに相当するものです。
個人的には関数の呼び名が好きですので、
以後の学習においてときどきメソッドのことを関数と呼んだりもします。
さらに、本講義ではメソッドを社員と比喩します。
なぜなら、メソッドは社長や他のメソッドに命じられて仕事をするものであるからです。
社員も社長や上司の命令に従い仕事をしますよね。
正確には、Main()もメソッドの1つですが、
絶対的な権限を持つ社長です。
社員同士は仕事を依頼し合うことが出来ますが、
社長に仕事を命じたり、依頼したりすることは出来ません。
本当は、第3講メソッド(1)→第4講for文→第5講if文の構成にするか、
本講義の構成にするか迷いました。
普通はメソッドはかなり後の方で学ぶのですが、
私は出来るだけメソッドの学習は早めにするべきだと思っています。
ただ、for文とif文を学んでいないと、メソッドの内容が貧弱になってしまうのです。
それで本講義の順番を採用しましたが、
第8話のように、社長であるMain()がすべての仕事をしてしまうのは好ましくありません。
社長は、指令役に徹して出来るだけ部下に仕事をさせるべきだからです。
一つ一つのメソッドの記述が大きくなりすぎるのは、
わかりやすさという点で問題があるのです。
部品=メソッドは出来るだけ小さめに作るが原則です。
メソッドを後の方で学ぶとMain()で何でもしてしまうという悪癖がつきます。
ですから、他のサイトや書籍では後の方で学ぶメソッドを早めに学習するのです。