none
有關於平均且作標準差運算~~ RRS feed

  • 問題

  • 各位前輩

          請問一下!手上有一些數據資料須做平均且作標準差運算,我查過書好像可以用array方式來寫,對嗎?因為查過書沒有相關寫法,可否請哪位好心人提供相關語法運用及講解。

    數據顯示範例:

    9.34

    3.67

    2.56

    4.56

    2.68

    7.35

    .

    .

    .

    .

    .

    .

    .

    等等

                                                     謝謝您!!

    2007年12月9日 下午 04:06

解答

  • chhuang:

    謝謝您如此快速回覆我的問題,但,我使用的是visual studio的VB和您提供的C寫法可能不太一樣,請問有vb的相關語法?另外,

    我想請問一下,我想將我的數據直接丟至textbox(或者是 Richtextbox)裡並依序列出而不將其原先數據覆蓋,我之前是利用vbcrlf & vbnewline的語法下去寫,但出現的數據都還是會將原先的數據給覆蓋住,無法呈現。

    舉例:

    3.56

    5.21

    8.95

    7.56

    2.87

    2.45

    .

    .

    .

    .

    .

    我希望可以做到像上面這樣的數據呈現,但我目前輸出的數據都會將原先的數據給覆蓋住請問有解決方法?

    如果可以做到像上列數據依序列出,我要將其加總還可以怎麼寫?

    麻煩你!!

    2007年12月11日 上午 05:26
  • 程式碼區塊

    using System;
    using System.Text;
    using System.Windows.Forms;

     

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

     

            private void button1_Click(object sender, EventArgs e)
            {
                double[] doubleArray = {1, 2, 3, 4, 5, 6, 7};

     

                StringBuilder sb = new StringBuilder();
                foreach (double d in doubleArray)
                {
                    sb.AppendFormat("{0}{1}", d, Environment.NewLine);
                }

     

                textBox1.Text = sb.ToString();


                MessageBox.Show("平均值: " + Average(doubleArray));
                MessageBox.Show("標準差: " + StandardDeviation(doubleArray));
            }

     

            public double StandardDeviation(double[] num)
            {
                double avg = Average(num);

                double SumOfSqrs = 0.0;

     

                foreach (double d in num)
                {
                    SumOfSqrs += Math.Pow(d - avg, 2);
                }

     

                return Math.Sqrt((SumOfSqrs/(num.Length - 1)));
            }

     

            public double Average(double[] num)
            {
                double sum = 0.0;

     

                foreach (double d in num)
                {
                    sum += d;
                }

     

                return sum/Convert.ToDouble(num.Length);
            }
        }
    }

     

     

    線上轉換工具給你參考:

    Convert C# to VB.NET

    Convert C# code to VB.NET

    Free Code Translation for .NET (C#<->VB.NET)

    ConvertCSharp2VB

    2007年12月11日 上午 07:47
  • 2007年12月12日 上午 07:38
    版主

所有回覆

  • chhuang:

    謝謝您如此快速回覆我的問題,但,我使用的是visual studio的VB和您提供的C寫法可能不太一樣,請問有vb的相關語法?另外,

    我想請問一下,我想將我的數據直接丟至textbox(或者是 Richtextbox)裡並依序列出而不將其原先數據覆蓋,我之前是利用vbcrlf & vbnewline的語法下去寫,但出現的數據都還是會將原先的數據給覆蓋住,無法呈現。

    舉例:

    3.56

    5.21

    8.95

    7.56

    2.87

    2.45

    .

    .

    .

    .

    .

    我希望可以做到像上面這樣的數據呈現,但我目前輸出的數據都會將原先的數據給覆蓋住請問有解決方法?

    如果可以做到像上列數據依序列出,我要將其加總還可以怎麼寫?

    麻煩你!!

    2007年12月11日 上午 05:26
  • 程式碼區塊

    using System;
    using System.Text;
    using System.Windows.Forms;

     

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

     

            private void button1_Click(object sender, EventArgs e)
            {
                double[] doubleArray = {1, 2, 3, 4, 5, 6, 7};

     

                StringBuilder sb = new StringBuilder();
                foreach (double d in doubleArray)
                {
                    sb.AppendFormat("{0}{1}", d, Environment.NewLine);
                }

     

                textBox1.Text = sb.ToString();


                MessageBox.Show("平均值: " + Average(doubleArray));
                MessageBox.Show("標準差: " + StandardDeviation(doubleArray));
            }

     

            public double StandardDeviation(double[] num)
            {
                double avg = Average(num);

                double SumOfSqrs = 0.0;

     

                foreach (double d in num)
                {
                    SumOfSqrs += Math.Pow(d - avg, 2);
                }

     

                return Math.Sqrt((SumOfSqrs/(num.Length - 1)));
            }

     

            public double Average(double[] num)
            {
                double sum = 0.0;

     

                foreach (double d in num)
                {
                    sum += d;
                }

     

                return sum/Convert.ToDouble(num.Length);
            }
        }
    }

     

     

    線上轉換工具給你參考:

    Convert C# to VB.NET

    Convert C# code to VB.NET

    Free Code Translation for .NET (C#<->VB.NET)

    ConvertCSharp2VB

    2007年12月11日 上午 07:47
  • 2007年12月12日 上午 07:38
    版主