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

简单计算函数的编写过程-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
腾讯云俱乐部北京站:知名手游商畅谈云时代开发运营策略 LG再战平板市场:将推出8.3英寸平板G Pad 编程语言与工具专题论坛:各类编程语言使用体会分享 淘宝、腾讯、豆瓣、支付宝、网易专家热议大数据分析与BI实战 “创新或灭亡”:Google的80/20只是转移视线的说辞罢了 自动化编排,配合SDN的iMC V7更加开放 [回顾]比尔·盖茨传奇的前半生 IT基础设施与运维论坛:IT基础设施及运维经验分享 记华为HCC2013 Day1:发力高端存储 HCC 2013虚拟化论坛:虚拟化未来发展方向 Windows 8操作系统市场份额增至7.41% Windows 7仍最受欢迎 【开源专访】Sea.js创始人玉伯的前端开发之路 SDCC 2013:阿里周宝方谈“去IOE”战略及实施 百度和高德:最后谁是地图的王者? 【CTO论道】瑞智和康CEO陶建辉:软硬结合是消费电子新潮流 10大高效率原型设计工具 JIRA与敏捷:李小龙教给我们的敏捷开发之道 百度开放云:Light Up The World,与开发者共享云未来 有胆你就来!11个在线编码大赛 CTO如何避免决策失控:第一步-定义角色 后机械硬盘时代,那些引领风骚的闪存初创公司 致远文杰:传统企业如何实现移动化转型? 记华为HCC2013 Day2:SDN开放编程系统OPS打造生态圈 HCC2013:华为FusionCube融合至简,性能至优 已确认Stephen Elop候选微软下任CEO 英语对于软件开发者来说到底有多重要? SDCC 2013中国软件开发者大会成功落幕 新浪微博宋琦:PHP在微博优化中的“大显身手” 8月份浏览器份额:IE浏览器PC端出现反弹 移动端跌出前五 如何让Ruby项目速度提升10倍 跨平台进行到底:Facebook发布Unity SDK 高分求助!!!怎样用VC在98下建立一拨号连接? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net socket编程,如何使connect()30秒超时???? 请问国内有OpenGL的比较全面的代码下载站点吗?能否提供几个URL?谢谢! 关于操作符重载的问题 有什么办法隐藏一个文件夹,使别人清除隐藏属性也看不到。 com的奇怪问题,27分 新手三层结构。问题多多。。。 jsp怎样连数据库? 高分讨教:这个vb+SQL2000的出错提示太奇怪了. 有在深圳考程序员的吗? 大家觉得电信好还是联通好啊 为什么在Win2000下我的GeForce GTS的显卡用了最新的公版驱动,在Windows优化大师中测试 一个小问题,如何在Access97数据库中创建和使用临时表??? 请问一个问题:有一个字符串,我想去掉左边固定的几个字符,剩下右边未知的几个字符!怎么做?谢谢~~ 菜鸟提问,网页上的自动变化的图片用什么作的呀? 请问哪有免费的web mail系统下载? 如何新建一个数据链接? 我想给自己的控件加一个ImageList和ImageIndex属性,选中ImageList后,在ImageIndex中显示图像列表。应如何做? 曾经的话题想改变命运的请走进来不想再说多少有自已看懂,了的曾经在这里发过言的朋友可以和我联系,QQ12545029,scaer123@163.net 如何在ASP中实现广告的按比率播放? dbedit 的问题,???????? private 里声明的函数居然调用不了? 如何得到字体的宽度和高度? ???????如果你说你对DELPHI懂,请进 SAMPLE QUESTION 在DELPHI中如何使用其他语言开发的主见? 请问LINK : warning LNK4098: defaultlib "mfcn42d.lib" conflicts with use of other libs; use /NODEFAULTLIB:library是什么含义? 请问,如何删除一个单项链表的头节点?? 怎样成为编程高手!请教高手们!! b/s程序在客户端生成EXCEL报表问题,梦天请进? 求解:如何将一幅图片或文件存入数据库??? 在用UpdateBatch方法保存纪录时VB提示:数据提供程序或其他服务返回E_FAIL状态。错误号:80004005,我死活也调不出来,还望各位高手指点一二。 菜鸟求教:要怎样去买一款满意的笔记本电脑?(29分) 我新生成一个继承自TPanel的类,但我想有其Create时,在其上放置一个TImage,请问: 急!新手请教:想查一个字符串是否存在于另一字符串中,如"asd" 不在"abca sd"中,该是哪个函数 为何网能上Ftp软件和SQL Server和Foxmail用不了? 急!!!谁有RTF文件格式中元素说明?给一份!谢先!!!!70分奉上! 请问VC中如何配置ADO(详细些)???????????????????? 关于一个DW的求和问题 问win32汇编大师(vBin等)一个非常难的问题,请看下面的源码: 请帮我看一看这个问题(关于死锁),顺便送分。 欢迎讨论jsp与ASP.NET技术 vb6+SQL2000中,在用UpdateBatch方法保存纪录时VB提示:数据提供程序或其他服务返回E_FAIL状态。错误号:80004005,我死活也调不出来,还望各位高手指点一二。 关于如何导出SQL SERVER 的数据到Excel表?? 两台PC对连问题! 一个关于ADO的连接问题,非常急!我试了好多天没进展! 在新的UNIT中我想创建一个类为什么会这样?请进吧。 恐怖!!!安装Rad Hat 7.2后,彩显报销!!!! Help Me!(简单问题) FOXpro打印与临时表的冲突? VFP高手请进。。。 继承父新生成一子类,但要屏蔽部分父类的Published或Public的Property申明属性如何做? 3次根号64的平方根是多少 八进制数为777对应的十六进制数是 全部 avi下载 数列An的前n项和为Sn,已知A1=1,An+1=Sn*(n+2)/n,证明数列Sn/n是等比数列 8两题 小学四年级数学人教版上册第10页怎么做 用字母表示圆的面积,周长,直径之间的关系π=()C=()或C=()d=()r=()S=() 请将下面个数用八进制数和十六进制数表示.(1)10 (2)32 (3)75 (4)-617 (5)-111 (6)2483 (7)-28654 (8)21003 圆的面积周长公式 (要汉字) 知道圆的面积怎么求周长和半径直径啊,别用字母,假如面积是10平方米,半径咋求?麻烦讲解的详细点,老是没有讲过,我想搞懂!,55555我不是抄答案,是想搞懂 但是老师没有说过, 十六进制数B9A的八进制表示是? 急,忘记带课本,求人教版九年级数学复习题22的1-4题, 求128根号e980的图谁什么什么内涵已经看出来了,但是是在手机上所以没存,现在大胆求图 求下面组合图形阴影部分的面积,答完给重赏 22.2习题的 根号8加根号32等于?根号32加根号128等于? 六年级数学,求解答! 求下列各阴影部份的面积六年级数学,求解答!求下列各阴影部份的面积 关于相邻数的问题,求c语言大神帮忙编程啊!C语言编程:输入一列数,输出这列数相邻数的最大和.所谓相邻数最大和,就是在它们的和在所有相邻数的和中是最大的,而我们就需要将这段相邻数 在数列{an},{bn}中,a1=2,b1=4,……证明:1/(a1+b1)+1/(a2+b2)+…1/(an+bn)<5/12在数列{an},{bn}中,a1=2,b1=4,且an,bn,an+1成等差数列,bn,an+1,bn+1成等比数列(n∈N*) (1)求a1,a2,a3及b1,b2,b3,由此猜测{an},{bn} 求解答 六年级数学 阴影部分面积 在线等 8减4又根号3开方出来是根号6减根号2 如何得来? 如图,两个正方形的边长分别是多少?你能借助这个图形解释根号8=2倍根号2吗?图:两个正方形 一个面积为八 一个面积为2 Window下创建的.txt文本文件中的数字是用2进制计数法的形式编码,还是用符号编码? -125分之27的平方根减(2倍根号5-5倍根号5)怎么算 如图,两个正方形的边长分别是多少?你能借助这个图形解释根号8等于二倍根号吗?一个正方形的面积为8,另一个为2. 圆的面积计算公式是什么 九年级上册数学书习题21. 128根号e980怎么打 不要图 马上期末了,星期一就要要啊,各位英雄侠女,走个后门儿~祝愿我考个好成绩,积分多多! 2 的练习 2 3题 (有题)二.1.根号下49x121 2.根号下225 3.根号下4y 4.根号下16ab方c立方三.1.一个矩形的长和宽分别是根号下10cm和2根号下2cm 求这个矩形的面积。 2、4、8、14、22、32下一个是什么数? 小学六年级升学考数学试卷,高悬赏! 四年级上册语文试卷 十六进制数是怎么计算的? 小学六年级升学考数学试卷,高悬赏! 答案是什么 四年级上册语文试卷【苏教版】 9999的十六进制数该怎么计算? 数列2 4 8 14 的通项公式? 急用!来涪陵四环路找我!奖一本老夫子漫画!涪陵四环路在重庆市涪陵区…… 电话:72031180 十六进制和二进制的数如何计算如题,再如111+111得多少呀还有就是十六进制的B+A得多少1B+2A得多少他们除了加法,那减法和除和乖法又如何计算呢 10.用八进制表示一个字节的无符号整数 ,最多需要_________A.1 位 B.2 位 C.3 位 D.4 位11.用十六进制表示一个字节的无符号整数 ,最多需要__________A.1 位 B.2 位 C.3 位 D.4 位 八进制数667所对应的十六进制数是() 十进制数 10 它的十六进制是多少 是怎么算的 37.用八进制表示一个字节的无符号整数 ,最多需要__________ 6 5 4 3 2 4=5每两个数之间填上加号或减号使算式成立 1.一,二,三年级同学共做航空模型56个,其中一,二年级所做航空模型的比是3:5,一,三年级所做航空模型的比是1:2.)个航空模型.(要有过程)2.只列方程不解答(1)图书馆有文艺书400本,科技 4x²-7x-3-( )=2x²-3x+8括号里填什么? 1第6题答案求出下列抛物线的开口方向,对称轴及顶点(1)y=-3x²+12x-3(2)y=4x²-24x+26(3)y=2x²+8x-6(4)y=1/2x²-2x-1 圆的面积、周长、半径、直径怎么求. 知道圆的面积是78·5,求周长、直径、半径·请说出方法, 小数进制转换问题十进制的小数如何转为二进制的小数?最好详细点,我数学方面很迟钝.哎. 已知数列通项an=n/2^n,求数列的前n项和Sn 8,10,14,16,20,22,26,28……n.用n表示第n个数,最好今晚就行```谢谢拉 初三数学下册习题26.3的第八题怎么做 数学卷5.31(22):设数列{an}是等差数列,数列{bn}的前n项和Sn满足,Sn=1-bn,(n∈N*),a2-1=1/b1a5=(1/b3)+1(1)求数列{an}和{bn}的通项公式(2)设Tn为数列{an▪bn}的前n项和,求Tn求详解,要步骤.谢谢 圆的面积公式怎么求?你相信吗?一个圆分成若干(偶数)等份(比如16)后,除了可以拼成近似的长方形,还可以拼成近似的平行四边形、三角形或梯形,这样拼的话同样能推导出圆的面积公式. 小数进制的转换问题现在有个十进制小数:7.49转为二进制小数就是:111.0111(2)但是,我把111.0111(2)转为十进制小数时如下:整数部分:1*22+1*21+1*20=7小数部分:0*2-1+1*2-2+1*2-3+1*2-4=0.437结果 (根号下27/3-4根号下1/3)-2(根号下3/4-根号下12)计算 快考了!要试卷!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn