【Access自定义函数】散度函数-麥田
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 源码示例


【Access自定义函数】散度函数

发表时间:2021/8/7 9:33:06 评论(0) 浏览(4025)  评论 | 加入收藏 | 复制
   
摘 要:【Access自定义函数】散度函数。
正 文:

散度函数:

例如:37182530

第一步先分别求出第个数3与其他4个数的差绝对值

Arr(1)=Abs(7-3)=4

Arr(2)=Abs(18-3)=15

Arr(3)=Abs(25-3)=22

Arr(4)=Abs(30-3)=27

求出arr1),arr2),arr3),arr4)的最小值arr(1)=min(4,15,22,27)=4


第二步先分别求出第个数7与其他4个数的差绝对值

Arr(1)=Abs(3-7)=4

Arr(2)=Abs(18-7)=11

Arr(3)=Abs(25-7)=18

Arr(4)=Abs(30-7)=23

求出arr1),arr2),arr3),arr4)的最小值arr(1)=min(4,11,18,23)=4


第三步先分别求出第个数18与其他4个数的差绝对值

Arr(1)=Abs(3-18)=15

Arr(2)=Abs(7-18)=11

Arr(3)=Abs(25-18)=7

Arr(4)=Abs(30-18)=12

求出arr1),arr2),arr3),arr4)的最小值arr(1)=min(15,11,7,12)=7


第四步先分别求出第个数25与其他4个数的差绝对值

Arr(1)=Abs(3-25)=23

Arr(2)=Abs(7-25)=18

Arr(3)=Abs(18-25)=7

Arr(4)=Abs(30-25)=5

求出arr1),arr2),arr3),arr4)的最小值arr(1)=min(23,18,7,5)=5


第五步先分别求出第个数30与其他4个数的差绝对值

Arr(1)=Abs(3-30)=27

Arr(2)=Abs(7-30)=23

Arr(3)=Abs(18-30)=12

Arr(4)=Abs(25-30)=5

求出arr1),arr2),arr3),arr4)的最小值arr(1)=min(27,23,12,5)=5


求出第一步的4,第二步的4,第三步的7,第四步的5,第五步的5的最大值=max(4,4,7,5,5)=7

Sandu=7

'求散度,可传递3-6个数字,至少3个数字,后面数字不传递的话,可以为0 或省略

Public Function sandu(lngNum1 As Long, lngNum2 As Long, lngNum3 As Long, Optional lngNum4 As Long, Optional lngNum5 As Long, Optional lngNum6 As Long) As Long
   Dim arr(5) As Long  '变量数组,用来保存传递过来的数字
   Dim rtn(5) As Long  '变量数组,用来保存计算的最小值

   Dim lngCnt As Long  '有值的个数
   Dim lngMin As Long  '最小值
   Dim lngMax As Long  '最大值

   Dim stepMin()    As Long  '动态数组
   Dim groupArray() As Long  '动态数组
   Dim groupI        As Integer
   Dim lngI         As Integer
   
   '逐个判断有否值传递过来
   If lngNum1 > 0 Then
      arr(0) = lngNum1
      lngCnt = 1
   End If
   
   If lngNum2 > 0 Then
      arr(1) = lngNum2
      lngCnt = 2
   End If
  
   If lngNum3 > 0 Then
      arr(2) = lngNum3
      lngCnt = 3
   End If
    
    If lngNum4 > 0 Then
      arr(3) = lngNum4
      lngCnt = 4
   End If
     
   If lngNum5 > 0 Then
      arr(4) = lngNum5
      lngCnt = 5
   End If
       
    If lngNum6 > 0 Then
      arr(5) = lngNum6
      lngCnt = 6
   End If
   
   Dim i As Long
   Dim j As Long
   
   ReDim groupArray(lngCnt - 1)
   ReDim stepMin(lngCnt - 1)
   '循环,将其它与自己相减,取绝对值,并取最小值
   
   '返回结果
    For i = 0 To lngCnt - 1
        'lngMax = -1
        groupI = 0
        For j = 0 To lngCnt - 1
            rtn(i) = 99999
            If i <> j Then
                If rtn(i) > Abs(arr(j) - arr(i)) Then
                    
                    'rtn(i) = Abs(arr(j) - arr(i))
                    groupArray(groupI) = Abs(arr(j) - arr(i))
                    'Debug.Print groupArray(groupI)
                    
                    groupI = groupI + 1
                    
                    'Debug.Print arr(j) & "-" & arr(i) & "=" & rtn(i); "-" & i
                End If
            End If
        Next

        For lngI = 0 To UBound(groupArray) - 1
            If lngI = 0 Then lngMin = groupArray(0)
            If lngMin < groupArray(lngI) Then
                lngMin = lngMin
            Else
                lngMin = groupArray(lngI)
            End If
        Next
        'Debug.Print lngMin
        stepMin(i) = lngMin
    Next
    
    '最后一步求最大值
    For lngI = 0 To UBound(stepMin)
        'Debug.Print stepMin(lngI)
        If lngI = 0 Then lngMax = stepMin(0)
        If lngMax <= stepMin(lngI) Then
            lngMax = stepMin(lngI)
        Else
            lngMax = lngMax
        End If
    Next
    sandu = lngMax
End Function


Access软件网交流QQ群(群号:198465573)
 
 相关文章
【Access自定义函数】判断闰年平年的示例,获取年份是否闰年的方...  【麥田  2013/12/28】
【Access基础扫盲】-创建自定义函数  【小赵  2014/5/26】
【Access自定义函数】用代码设置字段说明,用代码修改表中字段说...  【红尘如烟  2014/7/4】
修正【自定义函数】取得指定日期指定工作日天数后的工作日期  【123木头人  2017/11/20】
【Access自定义函数】:统计字符串中的中文字个数  【Natsume Takashi  2018/12/3】
【Access自定义函数】Access打开文件及Access打开文...  【麥田  2021/2/8】
【Access自定义函数】URL编码函数--解决中文字符出现乱码的...  【金宇  2021/6/29】
【Access自定义函数】IsWorkDay判定某日期是否为工作日  【易勋  2021/7/8】
常见问答
技术分类
相关资源
文章搜索
关于作者

麥田

文章分类

文章存档

友情链接