Office中國論壇/Access中國論壇

標題: 【新手進階】之二:基礎算法(二) [打印本頁]

作者: roych    時間: 2015-1-26 17:02
標題: 【新手進階】之二:基礎算法(二)

通過前面的學習,我們知道,數(shù)組是按一定順序(序號)排列的元素集合。例如s(0)之后就是s(1),s(1)之后是s(2)……等等。那么,由此看來,根據(jù)序號,就可以對它進行一些統(tǒng)計量的計算了。

例如,設置一個變量,當這個數(shù)組的元素符合某個條件時,這個變量就累加1,那么當遍歷元素之后,這個變量就是符合這個條件的元素個數(shù)了。這就是“計數(shù)”;求和也類似,不同的是,不是累加1,而是把數(shù)組的值進行累加;至于平均值嘛,把總和除以個數(shù)不就是了?^_^

最大值、最小值怎么辦?這個也簡單。就拿最大值來說吧,我們可以設置一個遠遠小于數(shù)組中所有元素的值(想一想:為什么不是遠遠比它們大的值?),后然后跟數(shù)組中的值進行比較,如果比它大,就替換掉,否則就保留起來;那么最后得到的這個值就是最大值了。

這里只列出求和的算法,其它算法由大家思考吧:

  1. Function getAvg(ByRef arr()) As String
  2. Dim lngCnt As Long
  3. Dim lngSum As Long
  4. Dim dblAvg As Double
  5. Dim i As Long
  6. Dim lngMax As Long
  7. Dim lngMin As Long
  8. '這里用長整型的范圍來設置,實際操作中只需要設置一個
  9. lngMax = -2147483647
  10. lngMin = 2147483647
  11. For i = LBound(arr) To UBound(arr)
  12.            If arr(i) > 0 Then
  13.                lngCnt = lngCnt + 1
  14.                lngSum = lngSum + arr(i)
  15.                lngMax = arr(i)
  16.           Else
  17.                    lngMin = arr(i)
  18.           End If
  19. Next
  20. getAvg = "符合條件的個數(shù):" & lngCnt & vbCrLf & "合計:" & lngSum _
  21. & vbCrLf & "平均:" & lngSum / lngCnt & vbCrLf & "最大值:" & lngMax & vbCrLf & "最小值:" & lngMin
  22. End Function
復制代碼

可以用以下代碼進行測試:

  1. Sub test()
  2. Dim myarr()
  3. myarr = Array(1, 2, 3, 4, -10)
  4. Msgbox getAvg(myarr)
  5. End Sub
復制代碼

需要注意的是:1、數(shù)組變量只能是傳址過程(ByRef),因此測試時不要指定變量類型(例如Dim myarr() As Long),否則會出錯。2、也不能直接輸入數(shù)組【例如:Msgbox getAvg(Array(1, 2, 3, 4, -10))】,而是要先定義數(shù)組,再進行輸入。


【新手入門】之一:If分支語句
【新手入門】之二:分支語句總結
【新手入門】之三:循環(huán)語句For
【新手入門】之四:循環(huán)語句Do和死循環(huán)
【新手入門】之五:公共變量與傳址過程、傳值過程
【新手入門】之六:“悲歡離合總無情”——淺談Split和Join
【新手入門】之七:嵌套與并列——再談If流程問題
【新手入門】之八:“連就連”——淺談“&”和“+”連接符的區(qū)別

【新手入門】之九:從百錢百雞談起——淺談“規(guī)劃求解”兼答lingjiang問
【新手入門】之十:書到用時方恨少——自定義菜單(Access 2003)的制作
【新手入門】之十一:淺談ADO之序言
【新手入門】之十二:淺談ADO之Connection
【新手入門】之十三:淺談ADO之Conmmand(上)
【新手入門】之十四:淺談ADO之Command(下)
【新手入門】之十五:淺談ADO之Recordset(上)
【新手入門】之十六:淺談ADO之Recordset(下)
【新手入門】之十七:淺談列表框的使用
【新手入門】之十八:雙擊列表框修改數(shù)據(jù)
【新手入門】之十九:從“書與女友恕不外借”談起——淺談“Bookmark”的使用
【新手入門】之二十:“書與書簽”——bookmark屬性答疑
【新手入門】之二十一:記錄集的“凌遲”——逐條導出記錄集

【新手進階】之一:基礎算法(一)
【新手進階】之二:基礎算法(二)
【新手進階】之三:基礎算法(三)
【新手進階】之四:基礎算法(四)
【新手進階】之五:排序搜索(一)
【新手進階】之六:排序搜索(二)
【新手進階】之七:遞歸算法
【新手進階】之八:冒泡排序
【新手進階】之九:淺談不綁定數(shù)據(jù)源操作記錄
【新手進階】之十:工作日的計算
【新手進階】之十一:“庖丁解牛”和“紀昌學射”——淺談表格式文本數(shù)據(jù)的導入
【新手進階】之十二:從四腳騰空的奔馬談起——原來界面可以這樣設計
【新手進階】之十三:Outlook風格導航界面
【新手進階】之十四:倉庫管理系統(tǒng)


作者: 盜夢    時間: 2015-1-26 17:04
可以參考快速排序法,弄一個去最大值最小值的方法
作者: roych    時間: 2015-1-26 17:13
盜夢 發(fā)表于 2015-1-26 17:04
可以參考快速排序法,弄一個去最大值最小值的方法

這個后面會具體說的。
由于代碼部分是需要我親手寫的,所以可能會慢一些,別急哈。
作者: todaynew    時間: 2015-1-26 17:13
做教程之間的鏈接
作者: 盜夢    時間: 2015-1-26 17:16
roych 發(fā)表于 2015-1-26 17:13
這個后面會具體說的。
由于代碼部分是需要我親手寫的,所以可能會慢一些,別急哈。

哈哈,你的舞臺,看你表演




歡迎光臨 Office中國論壇/Access中國論壇 (http://www.mzhfr.cn/) Powered by Discuz! X3.3