大復活C#学習_Listの改良(平均値の計算ver 2.0)
最初に件数を入力するのであれば配列と同じなのでListを用いるメリットが生かされないから、仮に最大件数を20件として設定しておいて、入力を途中で中断するプログラムに変更した。
実際は値をいちいち入力して計算することはないかもしれないが練習である(でも、教えている今のクラスの学生数は20なのでちょっと計算するにはよいかもしれないナ)。
できれば学生名と点数を紐付けて集計したい。Dictionaryを用いたいがこれがなかなかの難物だ。手元の教科書には詳細な記載がない。
****** 平均値の計算(ver 2.0) ******
class CalcList
{
public CalcList() { }
public void Calclist()
{
//Listの最大件数は20件と設定
string value; //値もstring型、あとでint型に変換
int w;
var sum = 0;
float mean;
int maxW = 0;
int minW = 0;
Console.WriteLine(" 件数は最大20件以内です ");
Console.WriteLine();
int x = 20;//最大入力件数の設定。ここでは20件とする
//Listの作成
List<int> numList = new List<int>(); //numというnumListを作る
for (int n = 0; n < x; n++)
{
Console.Write(" " + (n + 1) + "番目の整数の値は(<Enter>で終了)?__ ");
value = Console.ReadLine();//値の入力
if (value == ""){
Console.WriteLine();
Console.Write(" 入力が終了されました.");
x = n ;
break;
}
w = int.Parse(value);
sum += w; //合計を求める
}
Console.WriteLine(" 件数は {0} 件です", x);
Console.WriteLine();
//以下は初版とおなじ
float y = x;
mean = sum / y;
//昇順にソートする
Console.WriteLine();
Console.WriteLine(" 昇順にソートの結果を表示します");
Console.WriteLine();
numList.Sort();
for (int i = 0; i < numList.Count; i++)
{
Console.WriteLine(" " + numList[i]);
maxW = numList[i];
minW = numList[0];
}
//標準偏差を計算する
double bunsan_calc1 = 0;
double sd;
for (int a = 0; a < numList.Count; a++)
{
bunsan_calc1 += Math.Pow((numList[a] - mean), 2.0);
}
double b = numList.Count;
sd = Math.Sqrt(bunsan_calc1 / b);
Console.WriteLine();
Console.Write(" 合計 = {0}", sum);
Console.Write(" 平均 = {0:##.##}", mean);
Console.WriteLine(" 標準偏差 = {0:##.#}", sd);
Console.WriteLine(" 最小値 {0} , 最大値 {1} ", minW, maxW);
Console.ReadLine();
}
}