说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

简单计算函数的编写过程-VB资料

HTML文档下载 WORD文档下载 PDF文档下载
简单计算函数的编写过程-VB资料
作者:胡晓磊

  计算主程序负责初始算式整理、算式中变量的赋值、脱括号及脱括号后的算式整理、调用简单计算函数、输出计算结果。

  思路:如果第一个运算符是乘除,则计算它前后的两个数,其值作为新算式的第一个数,再继续计算这个新算式;如果是加减则用第
一个数加减后面的算式(如果是减,还要将其后的+变为-,-变为+)。

  这是一个递归的思路,据此得到以下算法:
A: 函数入口,需要两个参数,分别表示该算式在大算式中的起止位  置。
B: 如果算式中只有一个元素,则函数值等于该元素,L;否则C
C: 如果算式中有三个元素,即“数符数”的形式,则D;否则E
D: 计算它们,并将计算结果作为函数值,L
E: 如果第一个运算符是乘除则F;否则H
F: 计算前两个数,并将结果赋值给第二个数。
G: 函数值等于以第二个数为起点的新算式的值。L
H: 如果第一个运算符是+则I;否则J
I: 函数值等于第一个加上以第二个数为起点的算式的值。L
J: 将后面的加号都换成减号,而减号则都换成加号。
K: 函数值等于第一个数减去以第二个数为起点的新算式的值。
L: 返回。

  以此算法得到QB语言程序function jdjs$(a%,b%)(附后)

  虽然调试通过了,却总不满足,一个简单算式的计算好象不至于
如此复杂。为此闷了两天,晚上停电,黑暗中却出现了灵感,赶紧深
入思考,得到思路二:

  根据算术运算先乘除后加减的规则,先搜索算式中的乘除号,进
行计算,其值作为新的元素,代替原来的三个元素,然后再搜索、计
算、替代……直到找不到乘除号,此时的算式只有加减,顺序进行加
减运算,即可得到结果。

  根据思路二,得到算法二:
A: 函数入口,仍需要两个参数a和b。
B: 搜索算式中的乘除号,若有则C;否则E
C: 计算与之相连的前后两个数,并赋值给第一个数。
D: 将后面的各元素均前移两位,形成新的算式,B
E: 如果只有一个元素,则G;否则F
F: 按1±2→2,2±3→3,……的方法顺序计算。
G: 返回最后那个元素的值。

  以此算法得到QB语言程序function jdjs2$(a%,b%)(附后)

  算法二思路简洁清晰,容易实现,而且因不用递归,节省了大量
的堆栈操作,速度也应该更快。

  附:两个简单计算函数源程序说明:程序中的csf()和lx()是主
程序中定义的全局数组变量,csf存储算式各段,lx存储各段类型,这
里规定+1 -2 *3 /4 (5 )6数字7。
```````````````````````````````````````````````````````````

DEFINT A-B, I-N
DEFSTR C
DEFDBL D
FUNCTION jdjs$ (a, b) `简单计算函数之一, 递归算法
IF a = b THEN `如果只有一个元素,则立即返回这个元素
jdjs = csf(a)
ELSE
IF b - a = 2 THEN `如果有三个元素,即"数符数"的形式,则将计算
结果返回
da = VAL(csf(a)): db = VAL(csf(b))
SELECT CASE lx(a + 1)
CASE 1: da = da + db
CASE 2: da = da - db
CASE 3: da = da * db
CASE 4: da = da / db
END SELECT
jdjs = STR$(da)
ELSE `如果有更多的元素,则应根据以下情况分别处理
IF lx(a + 1) = 1 THEN `第一个运算符如果是“+”,则进行递归处理
jdjs = STR$(VAL(csf(a)) + VAL(jdjs(a + 2, b)))
ELSEIF lx(a + 1) = 2 THEN `如果是"-",则需要将后面的加减号对
调,然后进行递归处理
FOR kk = a + 3 TO b - 1 STEP 2
IF lx(kk) = 2 THEN lx(kk) = 1 ELSE IF lx(kk) = 1 THEN lx(kk)
= 2
NEXT
jdjs = STR$(VAL(csf(a)) - VAL(jdjs(a + 2, b)))
ELSE `如果是乘除号,则先计算这两个数并赋值给第二个数,然后进行
递归处理
IF lx(a + 1) = 3 THEN
csf(a + 2) = STR$(VAL(csf(a)) * VAL(csf(a + 2)))
ELSE
csf(a + 2) = STR$(VAL(csf(a)) / VAL(csf(a + 2)))
END IF
jdjs = jdjs(a + 2, b)
END IF
END IF
END IF
END FUNCTION

``````````````````````````````````````````````````````````
DEFINT A-B, I-N
DEFSTR C
DEFDBL D
FUNCTION jdjs2$ (a, b) `简单计算函数之二, 先乘除后加减的算法
DO: ycc = 0 `该循环先进行算式中的乘除运算. Ycc记录算式中有无
乘除号
FOR I = a + 1 TO b - 1 STEP 2
IF lx(I) > 2 THEN
IF lx(I) = 3 THEN
csf(I - 1) = STR$(VAL(csf(I - 1)) * VAL(csf(I + 1)))
ELSE
csf(I - 1) = STR$(VAL(csf(I - 1)) / VAL(csf(I + 1)))
END IF
FOR k = I TO b - 2: csf(k) = csf(k + 2): lx(k) = lx(k + 2): NEXT `整理算式
ycc = 1: EXIT FOR
END IF
NEXT
`FOR kk = a TO b: PRINT kk, csf(kk), lx(kk): NEXT `调试时用来
观察变量
IF ycc = 1 THEN b = b - 2
LOOP UNTIL ycc = 0
IF b > a THEN `再按顺序进行加减运算,如果只有一个元素,则跳过下
面的循环,直接返回它
FOR I = a + 1 TO b - 1 STEP 2
IF lx(I) = 1 THEN
csf(I + 1) = STR$(VAL(csf(I - 1)) + VAL(csf(I + 1)))
ELSE
csf(I + 1) = STR$(VAL(csf(I - 1)) - VAL(csf(I + 1)))
END IF
NEXT
END IF
jdjs2 = csf(b)
END FUNCTION
谈Clash of Clans货币化的成功 UX设计师应当规避的七大问题 初创公司Citus Data将CitusDB扩展到Hadoop 移动医疗:巢儿孵化器为何笃信是创业金矿? 一个新的雅虎:雅虎主页改版 谷歌发布Google Glass最新视频 公开接受预定 微软Windows Blue结束半程开发 或今年8月推出 JavaFX即将开源,支持iOS与Android开发 趣味编程网Codecademy携手Twitter、Evernote、Box等推出系列API教程 开发者,别让任何人绑架你的工作节奏 REST Style来袭 LinkedIn开源Rest.li框架 [探讨] 是用jQuery框架还是自造车轮呢? 一周消息树:Java 你还会让多少人继续“受伤”? Chromebook Pixel,揭开谷歌云世界的大幕 惠普:第一财季净利12亿 同比仍在下滑 谷歌发布超高清触屏笔记本Chromebook Pixel 传谷歌正开发触屏Chrome OS笔记本 今年或上市 估值25亿 视觉社交网站Pinterest融资2亿美元 跨平台开发框架Xamarin 2.0发布 移动新趋势:扁平化设计 vs. 拟物化设计(上篇) 杂谈 App Store 之 HIG 与 Objective-C 为什么苹果三星将主宰智能电视未来? 罗永浩可爱多:Smartisan OS即将发布 春晚 VS. 移动应用:用户注意力统计报告 Twitter发布BootStrap 2.3版本! 面向对象编程从骨子里就有问题——看看名人大家是如何诋毁面向对象的 开发者及团队能从LibreOffice那里学到什么? 8000美元存储135TB数据:打造开源的存储硬件 Bing,每月27亿的有效搜索不及僵尸网络的一半 为什么说Amazon的James Hamilton是“可遇不可求”的? Facebook背后的数据团队 用installshield4.0制作安装文件时,当最后build disk时却提示我需要vcl40.bpl,怎么会事?????? C 谁能给我一个比较简单的EJB的例子?详细点! 请教 如何动态创建使用控件组? 求救,菜单问题!!! 哪位大侠能告诉我怎么用vc修改浏览器代理,非常感谢 vs.net调试的时候出错信息不全,怎样能显示更详细的错误细节? 继续那个PING不通的问题。 请教我的一个程序的窗口最大化没有把显示屏幕铺满,请问怎么处理? global.asa里面的问题 有谁知道winxp将浏览网页时的临时文件放在哪一个目录下了???? 请教sql server2000的问题,thanks!thanks! qq探密!!! 统计一下:有多少位程序员在用VB系的开发工具 关于ACCESS的两个问题,热心大虾请进! 数据恢复问题,答对即给分(在线) 做过进销存系统的高手们,请谈谈经验 asp 与 dreamweaver有联系吗? 请教如何设置WIN2000的时间服务? 怎么样判别时间字段为空 ? 如何实现类适于IE浏览器的图片旋转功能 如何在FileListBox中弹出系统对该文件的右键菜单 如何更改MFC程序生成文件的默认图标? 我是ASP初学者,请大家帮忙? 英语真的那么重要吗? 一个JS的简单问题,但是我还是给100分 怎么透明显示一张bmp图片(急,在线等待) 急,两个问题,帮帮忙(其中一个关于ActiveSkin) 查询出的报表内字段值为空的单元格,显示不出单元格框线,为什么? Java论坛 急!在LINUX下,配置内核时Intel corporation|82801AB AC'的声卡应该先哪项,我用的是2.4.16的内核。 世界杯——蓝色的忧郁 使用异步socket通信,服务器端在OnReceive消息函数中能否获得客户端IP地址? 菜鸟学JAVA送分 怎样用delphi实现EDI? 两到汇编题。麻烦大家帮我做一下。。我实在做不出来 今天去面世了~~~结果他们………… 举报 哪里有.net源程序下载?? : 两到汇编题。麻烦大家帮我做一下。。我实在做不出来 莱鸟问题:如何字符变量str的值赋给EDIT控件, : 两到汇编题。麻烦大家帮我做一下。。我实在做不出来 哪里有2001年的中程的试卷? 第一次来CSDN,以后希望大家多多帮助!! 在VB中获取和修改计算机名字 用什么软件能把扫描仪扫的文章变位文本文档?? 终止线程出错! VB中远程数据库的访问 如何实现使textbox中只能输入带两位小数的内容?即保证其中内容为*.XX(*代表任意数字串),凡不合要求的输入都被过滤? 如何在IIS的DefaultWEB Site的属性的HTTP Header中加入新的File type?? 一种玩具的售价,今年比去年降低了1/4,去年又比前年降低了1/5,今年的售价比前年降低了几分之几? 家里忽然出现些小虫子 尾巴长得跟螃蟹钳子似的 黑嘿的看到的都打死了 这是什么东西啊 怎么清除预防控制啊 有只猫掉到水里,老鼠救了它,猫对老鼠说了什么? 历史上一正一反两个有名的教子故事拜托各位了 3Q 那是桔色的桔子怎样翻译 小明爬山,上山每小时3千米,下山沿原路返回每小时5千米,小明往返共用了4小时.小明上山路程是多少? 亚洲鲤鱼在美国大量繁殖,泛滥成灾的原因是什么 动物有性格吗?比如生活在非洲大草原上的狮子,有内向的狮子吗? 鼠科动物包括哪些动物像袋鼠、松鼠、老鼠、荷兰猪、仓鼠等等等神马的…… 一种尾部长着钳子的昆虫长的不太大,和蟋蟀差不多.头不大,尾部的钳子较大. 什么昆虫背上也长脚 桃花源翻译 A B C 三个盒子里装着黑白两种球,三个盒子中所装球的数量相等.A盒子里白球个数和B盒子里黑球个数相等.和B盒子里黑球个数相等.C盒子里白球个数是全部白球个数的5分之2.全部黑球个数占总 古代有哪些慈母教子的故事,简短一点 哪种虫子背上长脚 珍惜友谊的名言 古代慈母教子的故事 两篇 要短的. 合唱队有八十人,的人数比合唱队少十六分之十三.乐队比合唱队的五分之三多两人花束队的人数比乐队多二分之一求乐队花束队舞蹈队的人数 A,B,C盒子里有黑白两种球三个盒子球的数量相等A的白球和B的黑球数量相等C黑球是C盒 球数的百分之20求全体黑球的个数占总球数的百分之几? 有哪些母亲教育孩子的故事, 学习合唱队有60人,舞蹈队比合唱队少1/5,乐队人数比舞蹈队的3/4多4人.乐队有多少人? 谁知道珍惜友谊的名言警句~越多越好 头上触角有点像眼炸毛,尾部有两个钳子的昆虫, 学校合唱队有44人,舞蹈队人数是器乐队的2倍,合唱队人数比舞蹈队多18人.舞蹈队有多少人?.器乐队有多少人? 关于珍惜友谊的名言 长有八条腿前触角有小钳子身体扁平有横条纹是什么虫子?长有八条腿,没有触角,头很小只有一对有小钳子,身体扁平有横条纹,大小像小蜘蛛,我在家扫地发现的猛一看以为小蜘蛛,它是什么,是 桔子是什么生长的啊?求大神帮助 有什么珍惜友谊的名言 粉紫这种颜色用英文怎么说RT 地球上一共有几种狮子?如题 蠼螋、蠼螋、地蜈蚣、火夹子是否同指一种昆虫 我们这组是颜色组,分别有黄,红,蓝,紫,橙,粉红,白,黑,灰,青,绿,咖啡色,英语怎么说,急阿, 英语中狮子有几种表达法?有何区别? 有只名叫蠼螋虫进了我耳朵.睡觉时早上被疼醒了,感觉耳朵里面嗡嗡的响,我使劲摇头,终于给弄出来来了,是只大约;两厘米的小虫,我查到这虫叫蠼螋,现在耳朵还疼着呢,这虫还有传说,原文这样 历史上有名的教子例子有很多,正面的有 ,反面的有 狮子的种类有几种? 沙漠里的蒲公英阅读答案 要有名的! 背上长脚的昆虫科学类,要对! 读了一株沙漠里的蒲公英你有什么启示我今天7点就要写起啊!另外以色列人为什么把蒲公英送给那些拥有智慧而贫穷的人?还有沙漠里生长着一株蒲公英改成排比句!改成比喻句!怎么把语 塘虱 鲶鱼 天敌 鱼类生态天敌 除了人 老鼠是什么动物 一株沙漠里的蒲公英这个故事有什么启示?把沙漠里生长着一株蒲公英改成排比句!改成比喻句怎么改啊? 形容某人很鲶鱼或者说你真的是个鲶鱼是什么意思呢? 什么动物吃老鼠 98浓硫酸配置10%稀硫酸.实验室用100ml98%的浓硫酸配饰10%的稀硫酸,能得到稀硫酸的体积多少毫升?注 98%:1.84g/m^3 10%:1.07g/m^3 我认为应该是先求出浓硫酸的质量,再求出稀硫酸的体积,为什 家里有一种虫子张的很象蝎子~肚子平的可是没有钳子尾巴是一根很细的须~而且很臭怎么消灭啊 某水果商用150元批发了150千克的橘子,定价2.5元,其中60%的橘子一定价出售,25%的橘打六折出售,剩下的橘子烂了.这个水果商做这笔买卖是赚了还是亏了?赚或亏多少 配制49g20%的稀硫酸时需要98%的浓硫酸的质量 鲶鱼是什么样子的 (1)某水果商用150元批发了150千克桔子,其中百分之60的桔子以每千克2.5元的价格出售,百分之25的桔子打六折出售,剩下的烂了.这个水果商做这笔买卖是赚了,还是亏了,赚亏或了多少钱?(2)某商店 试举历史上有名的教子故事.(正面、反面)详细一点 拜托了~! 家里发现一种虫子 很小很小 大概只有2至3毫米 有两个像蝎子一样的钳子,但是后边却没有尾巴 某水果商用150元批发了150千克的橘子,定价2.5元,其中60%的橘子以定价出售,25%的橘子打6折出售,剩下的橘子烂了,这个水果商做这笔买卖是赚了,还是亏了?盈利率或亏损率是多少? 试举历史上有名的教子故事.(正面,反面事例各一) 请问“鲇鱼”是什么意思啊? 要给一边长为a米的正方形桌子铺上正方形桌布,桌布的四周均超出桌面0.1m,问需要多大面积的桌布,如a=1.2m,桌布面积是多少平方米 从正反两面具出两个历史上有名的教子故事 这是什么虫子,尾巴的钳子会攻击 小明家的餐桌面是圆形的,妈妈要给餐桌配一块正方形桌布,量得桌面的直径是1.5米,桌子高1.2米,要使正方形桌布的四个角刚好接触地面,正方形桌布的对角线应是多少米 此接上因为不够写
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘