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