Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 4657|回復(fù): 4
打印 上一主題 下一主題

[模塊/函數(shù)] 【新手進(jìn)階】之二:基礎(chǔ)算法(二)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2015-1-26 17:02:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

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

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

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

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

  • 定義一個(gè)變量lngSum,初始化為0。
  • 定義數(shù)組元素序號(hào)變量i,初始化為0。
  • 當(dāng)i<數(shù)組元素個(gè)數(shù)時(shí),重復(fù)執(zhí)行4、5。
  • 當(dāng)元素>0時(shí),計(jì)算lngSum+arr(i)的值,并保存到lngSum中。
  • i加1。
  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. '這里用長(zhǎng)整型的范圍來(lái)設(shè)置,實(shí)際操作中只需要設(shè)置一個(gè)
  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 = "符合條件的個(gè)數(shù):" & lngCnt & vbCrLf & "合計(jì):" & lngSum _
  21. & vbCrLf & "平均:" & lngSum / lngCnt & vbCrLf & "最大值:" & lngMax & vbCrLf & "最小值:" & lngMin
  22. End Function
復(fù)制代碼

可以用以下代碼進(jìn)行測(cè)試:

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

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


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

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

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

本帖被以下淘專輯推薦:

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖1 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

2#
發(fā)表于 2015-1-26 17:04:31 | 只看該作者
可以參考快速排序法,弄一個(gè)去最大值最小值的方法
3#
 樓主| 發(fā)表于 2015-1-26 17:13:07 | 只看該作者
盜夢(mèng) 發(fā)表于 2015-1-26 17:04
可以參考快速排序法,弄一個(gè)去最大值最小值的方法

這個(gè)后面會(huì)具體說(shuō)的。
由于代碼部分是需要我親手寫的,所以可能會(huì)慢一些,別急哈。
4#
發(fā)表于 2015-1-26 17:13:31 | 只看該作者
做教程之間的鏈接

點(diǎn)擊這里給我發(fā)消息

5#
發(fā)表于 2015-1-26 17:16:56 | 只看該作者
roych 發(fā)表于 2015-1-26 17:13
這個(gè)后面會(huì)具體說(shuō)的。
由于代碼部分是需要我親手寫的,所以可能會(huì)慢一些,別急哈。

哈哈,你的舞臺(tái),看你表演
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 02:22 , Processed in 0.097634 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表