第4講 if文(もしもボックスの世界)
第5話 100以下のランダムなデータを発生させて40人の合否を判定すると同時に合格倍率を表示するソフト
実行画面が
・
・
・
出席番号39番は不合格
出席番号=40
国語=22
社会=11
数学=18
理科=14
英語=15
合計点=80
出席番号40番は不合格
合格倍率は*.*倍です。
となるソフトのコード例
#include<iostream> //入出力のために組み込む
#include <iomanip> //setprecisionを使えるように組み込む
using namespace std; //coutを使えるようにするために必要
int main() {
int a, b, c, d, e, g; //a:国語 b:社会 c:数学 d:理科 e:英語 の得点 g:5教科合計得点
int s; //出席番号
int cn = 0; //合格者をカウントする変数
for (s = 1; s < 41; s++) {
cout << "各教科の点数をキーボードから入力して下さい。" << endl;
cout << "出席番号=" << s << endl; //出席番号表示
//以下各教科得点ランダム発生
a = 1 + rand() % 100;
cout << "国語=" << a << endl;
b = 1 + rand() % 100;
cout << "社会=" << b << endl;
c = 1 + rand() % 100;
cout << "数学=" << c << endl;
d = 1 + rand() % 100;
cout << "理科=" << d << endl;
e = 1 + rand() % 100;
cout << "英語=" << e << endl;
//以下各教科得点ランダム発生
g = a + b + c + d + e; //合計点算出
cout << "合計点=" << g << endl; //合計点表示
cout << "出席番号" << s <<"は";
if (g >= 300) {
cout << "合格" << endl;
cn++;
}
else {
cout << "不合格" << endl; //合否結果の表示
}
cout << endl; //改行
}
cout<< "合格倍率は"<< fixed << setprecision(1) << (float)40 / cn << "です。"<<endl;
}
倍率の答えは8.0倍です。
合計300点は100点満点に換算すると、
60点です。
そして、ランダムの得点を発生させたとき、
そのデータは正規分布になります。
正規分布というのは、偏差値のデータ分布と同じです。
ということは、今回の合格倍率の算出は、
偏差値60以上をとれる人が何人に1人かと同じです。
つまり、偏差値60以上をとれる人は約8人に1人しかいないのです。
データ数は今は40でしたが、データ数を1000にして、
合格条件を400点すなわち偏差値80とすると、合格倍率がいくつになりますか。
皆さん実験してみて下さい。
30行下に示します。
答え
合格倍率は142.9倍です。
ということは偏差値80以上とれる人は約143人に1人しかいないのです。
因みに合格条件を425点以上すなわち偏差値85以上とすると、
500.0倍です。
東大の偏差値がだいたい85ですから、
東大に入れる人は500人に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){
A;
}
else{
if(q){
B;
}
else{
C;
}
}
のようにします。
pとqの内容とA、B、Cを考えて下さい。
これは、条件pを満たすならA;を
条件pを満たさずに条件qを満たすならB;を
条件qを満たさないならC;を実行しなさいということになります。
尚、データ数は40に戻しておきましょう。