4. 小明的第一份程式設計工作

# 用 MenuStrip

namespace Q4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void 求F統計值和自由度dfToolStripMenuItem_Click(object sender, EventArgs e)
        {
            List<List<double>> all = new List<List<double>>();
            foreach (var item in textBox1.Text.Split('\n'))
            {
                all.Add(item.Substring(item.IndexOf(':') + 2, item.Length - item.IndexOf(':') - 2).Split(' ').Select(double.Parse).ToList());
            };

            int N = all.Sum(e => e.Count);
            int dfB = all.Count - 1;
            int dfW = N - all.Count;

            double UT = 0;
            foreach (var item in all)
            {
                UT += item.Sum();
            }
            UT /= N;

            double SSb = 0;
            double SSw = 0;
            foreach (var item in all)
            {
                var ut = item.Sum() / item.Count;
                SSb += Math.Pow(ut - UT, 2) * item.Count;
                foreach (var d in item)
                {
                    SSw += Math.Pow(d - ut, 2);
                }
            }

            var MSb = SSb / dfB;
            var MSw = SSw / dfW;

            textBox2.Text = @$"F統計值計算:
F = {MSb / MSw:0.000}
自由度df: {dfB}, {dfW}";
        }

        private void cToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            textBox1.Text = new StreamReader(openFileDialog1.OpenFile()).ReadToEnd();
        }

        private void 結束ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}

Last updated