第4講 if文(もしもボックスの世界)
第5話 100以下のランダムなデータを発生させて40人の合否を判定すると同時に合格倍率を表示するソフト
実行画面が
・
・
・
出席番号39番は不合格
出席番号=40
国語=22
社会=11
数学=18
理科=14
英語=15
合計点=80
出席番号40番は不合格
合格倍率は*.*倍です。
(ランダムデータは毎回変わります。)
となるソフトのコード例
//以下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; //出席番号
int cn = 0; //合格者をカウントする変数
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("合格");
cn++;
}
else
{
Console.WriteLine("不合格"); //合否結果の表示
}
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine("合格倍率は{0:f1}です。",(float)40/cn);
}
}
}
倍率の答えは毎回かなり異なります。
私の実験した範囲では3.9から5.7です。
そこで、データ数を10000まで増やして実験すると、
合格倍率は4.2倍です。
合計300点は100点満点に換算すると、
60点です。
そして、ランダムの得点を発生させたとき、
そのデータは正規分布になります。
正規分布というのは、偏差値のデータ分布と基本的には同じです。
基本的という言葉を入れたのは、
主催団体によって、
計算方法が若干異なっているからです。
では同じデータ数10000で合格条件を400点以上とすると、
合格倍率はどうなるでしょうか。
実験結果を30行下に示します。
答え
合格倍率は100.0倍です。
さて、次の課題に入りましょう。
if文で今回は合否のみの2段階判定でしたが、
if文をうまく使うと、3段階判定・4段階判定・5段階判定なども可能です。
例えば、5教科合計得点が
200点未満 ***努力が必要です。
200点以上300点未満 ***普通です。
300以上 ***頑張りました。
の3段階判定です。
・
・
出席番号=33
国語=11
社会=60
数学=25
理科=38
英語=49
合計点=183
出席番号33番は努力が必要です。
出席番号=34
国語=84
社会=96
数学=42
理科=3
英語=51
合計点=276
出席番号34番は普通です。
出席番号=35
国語=92
社会=37
数学=75
理科=21
英語=97
合計点=322
出席番号35番は頑張りました。
・
・
これを実現するためには
if(p)
{
A;
}
else
{
if(q)
{
B;
}
else
{
C;
}
}
のようにします。
pとqの内容とA、B、Cを考えて下さい。
これは、条件pを満たすならA;を
条件pを満たさずに条件qを満たすならB;を
条件pを満たさずさらに条件qを満たさないならC;を実行しなさいということになります。
尚、データ数は40に戻しておきましょう。