- 帖子
- 22
- 主題
- 17
- 精華
- 0
- 積分
- 51
- 點名
- 0
- 作業系統
- wiindows
- 軟體版本
- Office 2010
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 新北
- 註冊時間
- 2021-6-21
- 最後登錄
- 2022-1-4
|
2#
發表於 2021-7-16 08:27
| 只看該作者
本帖最後由 laigs218 於 2021-7-16 08:29 編輯
'下面為算法1
'X(1 To M*N):原始統計資料
'M:統計資料的行數
'N:統計資料的列數
'R(1 To 10):描述統計結果
Public Sub Character(X() As Double, R() As Double)
Dim I As Integer, J As Integer, N As Integer
Dim Max As Double, Min As Double
Dim J3 As Integer, K3 As Integer
N = UBound(X)
'求極大值和極小值
Max = X(1): Min = X(1)
For I = 1 To N
If X(I) > Max Then Max = X(I)
If X(I) < Min Then Min = X(I)
Next I
'如果極差為0說明數列中所有的資料都相等
If Max - Min = 0 Then
R(1) = X(1): R(2) = X(1): R(3) = 99999999: R(4) = X(1)
R(5) = 0: R(6) = 0: R(7) = 0: R(8) = 0
R(9) = 99999999: R(10) = 99999999
Exit Sub
End If
'求算術平均值
R(1) = 0
For I = 1 To N
R(1) = R(1) + X(I)
Next I
R(1) = R(1) / N
'求中值
Sort_Shell X '用希爾方法排序
If (N \ 2) * 2 = N Then '數據個數為偶數
R(2) = (X(N \ 2) + X(N \ 2 + 1)) / 2
Else '數據個數為奇數
R(2) = X(N \ 2 + 1)
End If
'求眾數
'數列已經按生序排好了,這時可以按簡單方法求眾數
R(3) = 99999999 '在不存在等數時眾數無意義
J3 = 1
K3 = 1
I = 1: J = I + 1
Do Until I >= N
While X(I) = X(J)
J3 = J3 + 1 '增加一個相等的數
J = J + 1 '將對下一個數比較
If J3 > K3 Then R(3) = X(I) '把當前最多的等數臨時作為眾數
Wend
If J3 > K3 Then K3 = J3 '在K3中保存最多的等數的個數
J3 = 1
I = J
J = I + 1
Loop |
|