第4講 If文(もしもボックスの世界)
第5話 100以下のランダムなデータを発生させて40人の合否を判定すると同時に合格倍率を表示するソフト
実行画面が
・
・
・
出席番号39番は不合格
出席番号=40
国語=22
社会=11
数学=18
理科=14
英語=15
合計点=80
出席番号40番は不合格
合格倍率は*.*倍です。
(C言語入門から借用しているためにランダムデータは異なります。)
となるソフトのコード例
Module Module1
Sub Main() '私は社長だ。
Dim s, a, b, c, d, e, g As Integer 's:出席番号 a:国語 b:社会 c:数学 d:理科 e:英語 g:合計
Dim cn As Integer '合格者をカウントするカウンター
cn = 0
Console.WriteLine ("各教科の点数をキーボードから入力して下さい。")
For s = 1 To 40
Console.WriteLine("出席番号={0:d}", s) '出席番号表示
'以下各教科得点ランダム発生
a = Int(Rnd() * 100) + 1
b = Int(Rnd() * 100) + 1
c = Int(Rnd() * 100) + 1
d = Int(Rnd() * 100) + 1
e = Int(Rnd() * 100) + 1
'以上各教科得点ランダム発生
g = a + b + c + d + e '合計点算出
'以下各教科得点、合計点、合否結果の表示
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) '英語得点の表示
Console.WriteLine("合計点={0:d}", g) '合計点の表示
Console.Write("出席番号{0:d}番は", s)
If g >= 300 Then
Console.WriteLine ("合格")
cn += 1
Else
Console.WriteLine ("不合格") '合否結果の表示
End If
Console.WriteLine()
Next
Console.WriteLine("合格倍率は{0:f1}倍です。", 40 / cn)
End Sub
End Module
倍率の答えは4.4倍です。
40程度のデータ数では誤差が大きいので、
データ数を1000にして実験し直すと、
4.2倍です。
合計300点は100点満点に換算すると、
60点です。
そして、ランダムの得点を発生させたとき、
そのデータは正規分布になります。
正規分布というのは、偏差値のデータ分布と同じです。
ということは、今回の合格倍率の算出は、
偏差値60以上をとれる人が何人に1人かと同じです。
つまり、偏差値60以上をとれる人は約4.2人に1人しかいないのです。
データ数を同じく1000にして、
合格条件を400点すなわち偏差値80とすると、合格倍率がいくつになりますか。
皆さん実験してみて下さい。
30行下に示します。
答え
合格倍率は166.7倍です。
ということは偏差値80以上とれる人は約167人に1人しかいないのです。
因みに合格条件を425点以上すなわち偏差値85以上としデータ数を10000にして実験すると、
370.4倍です。
東大の偏差値がだいたい85ですから、
東大に入れる人は370人に1人しかいないということになりますね。
さて、次の課題に入りましょう。
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 then
A
Else
If q Then
B
Else
C
End If
End If
のようにします。
pとqの内容とA、B、Cを考えて下さい。
これは、条件pを満たすならAを
条件pを満たさずに条件qを満たすならBを
条件qを満たさないならCを実行しなさいということになります。
尚、データ数は40に戻しておきましょう。