设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3728|回复: 4
打印 上一主题 下一主题

[模块/函数] 【新手进阶】之二:基础算法(二)

[复制链接]
跳转到指定楼层
1#
发表于 2015-1-26 17:02:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

通过前面的学习,我们知道,数组是按一定顺序(序号)排列的元素集合。例如s(0)之后就是s(1),s(1)之后是s(2)……等等。那么,由此看来,根据序号,就可以对它进行一些统计量的计算了。

例如,设置一个变量,当这个数组的元素符合某个条件时,这个变量就累加1,那么当遍历元素之后,这个变量就是符合这个条件的元素个数了。这就是“计数”;求和也类似,不同的是,不是累加1,而是把数组的值进行累加;至于平均值嘛,把总和除以个数不就是了?^_^

最大值、最小值怎么办?这个也简单。就拿最大值来说吧,我们可以设置一个远远小于数组中所有元素的值(想一想:为什么不是远远比它们大的值?),后然后跟数组中的值进行比较,如果比它大,就替换掉,否则就保留起来;那么最后得到的这个值就是最大值了。

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

  • 定义一个变量lngSum,初始化为0。
  • 定义数组元素序号变量i,初始化为0。
  • 当i<数组元素个数时,重复执行4、5。
  • 当元素>0时,计算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. '这里用长整型的范围来设置,实际操作中只需要设置一个
  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 = "符合条件的个数:" & 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、数组变量只能是传址过程(ByRef),因此测试时不要指定变量类型(例如Dim myarr() As Long),否则会出错。2、也不能直接输入数组【例如:Msgbox getAvg(Array(1, 2, 3, 4, -10))】,而是要先定义数组,再进行输入。


【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别

【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集

【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2015-1-26 17:04:31 | 只看该作者
可以参考快速排序法,弄一个去最大值最小值的方法
3#
 楼主| 发表于 2015-1-26 17:13:07 | 只看该作者
盗梦 发表于 2015-1-26 17:04
可以参考快速排序法,弄一个去最大值最小值的方法

这个后面会具体说的。
由于代码部分是需要我亲手写的,所以可能会慢一些,别急哈。
4#
发表于 2015-1-26 17:13:31 | 只看该作者
做教程之间的链接

点击这里给我发消息

5#
发表于 2015-1-26 17:16:56 | 只看该作者
roych 发表于 2015-1-26 17:13
这个后面会具体说的。
由于代码部分是需要我亲手写的,所以可能会慢一些,别急哈。

哈哈,你的舞台,看你表演
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-25 18:14 , Processed in 0.115775 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表