3. 動態統計
namespace Q3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Columns.Count; i++)
{
dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
private void button2_Click(object sender, EventArgs e)
{
Close();
}
int N = 0;
int n = 0;
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.Text.Length > 0)
{
dataGridView1.Visible = true;
N = int.Parse(textBox1.Text);
label2.Text = "請輸入第 1 筆資料";
}
}
double fn(double d, int n)
{
return Math.Floor(d * Math.Pow(10, n)) / Math.Pow(10, n);
}
private void button1_Click(object sender, EventArgs e)
{
n++;
var d = (double.Parse(textBox2.Text));
var vals = new List<double>();
vals.Add(d);
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
vals.Add((double)dataGridView1.Rows[i].Cells[1].Value);
}
var sum = 1.0;
vals.ForEach(e =>
{
sum *= e;
});
var a = Math.Pow(sum, 1.0 / vals.Count);
sum = 0;
vals.ForEach(e =>
{
sum += e * e;
});
sum /= vals.Count;
var b = Math.Sqrt(sum);
var c = vals.Count / vals.Select(e => 1.0 / e).Sum();
var f = vals.Count * vals.Select(e => e * e).Sum() - Math.Pow(vals.Sum(), 2);
f /= vals.Count * (vals.Count - 1);
f = Math.Sqrt(f);
dataGridView1.Rows.Add(new object[] {
n,d,$"{fn(vals.Average(),2):f2}",$"{(fn(double.IsNormal(f)?f:0,3)):f3}",$"{fn(a,3):f3}",$"{fn(b,3):f3}",$"{fn(c,3):f3}"
});
if (n == N)
{
label2.Text = "資料已輸入完畢!";
}
}
}
}
Last updated