网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.使VB的网格控件具有输入功能.
.用类来编写数据库程序.
.让VB在程序中显示错误行.
.Variant子类型.
.教你在CoolBar中显示指定的图片.
.用VB编写异步多线程下载程序.
.放置“透明”的图片.
.VisualBasic属性、方法和事件一.
.减少DoEvents语句的数量.
.VB5.0数据库编程经验小集.
.利用VB提取HTML文件中的EMAIL地址.
.FSO对象模型在VB中的应用.
.实现窗体内部的左右移动.
.为什么用VB开发数据库---VB数据库.
.使用VB开发Windows环境下的串行通.
.数据库的结构---VB数据库入门之(.
.VisualBasic5.0中实现视频画中画.
.SetFormName=Nothing.
.在VB中如何使用ping命令.
.Excel中Basic程序的运行.

简单计算函数的编写过程

发表日期:2006-2-27


本人在编写算术运算练习程序时,觉得其中的计算函数下的简单计算函数的编写过程很有意思,当时作了详细记录,现将计算函数整
理为计算程序,并将(不带括号的简单算式的)简单计算函数的编制过程整理成文,献给《网络时代》各位读者,敬请批评指正。

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

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

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

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

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

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

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

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

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

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

DEFINTA-B,I-N
DEFSTRC
DEFDBLD
FUNCTIONjdjs$(a,b)`简单计算函数之一,递归算法
IFa=bTHEN`如果只有一个元素,则立即返回这个元素
jdjs=csf(a)
ELSE
IFb-a=2THEN`如果有三个元素,即"数符数"的形式,则将计算
结果返回
da=VAL(csf(a)):db=VAL(csf(b))
SELECTCASElx(a 1)
CASE1:da=da db
CASE2:da=da-db
CASE3:da=da*db
CASE4:da=da/db
ENDSELECT
jdjs=STR$(da)
ELSE`如果有更多的元素,则应根据以下情况分别处理
IFlx(a 1)=1THEN`第一个运算符如果是“ ”,则进行递归处理
jdjs=STR$(VAL(csf(a)) VAL(jdjs(a 2,b)))
ELSEIFlx(a 1)=2THEN`如果是"-",则需要将后面的加减号对
调,然后进行递归处理
FORkk=a 3TOb-1STEP2
IFlx(kk)=2THENlx(kk)=1ELSEIFlx(kk)=1THENlx(kk)
=2
NEXT
jdjs=STR$(VAL(csf(a))-VAL(jdjs(a 2,b)))
ELSE`如果是乘除号,则先计算这两个数并赋值给第二个数,然后进行
递归处理
IFlx(a 1)=3THEN
csf(a 2)=STR$(VAL(csf(a))*VAL(csf(a 2)))
ELSE
csf(a 2)=STR$(VAL(csf(a))/VAL(csf(a 2)))
ENDIF
jdjs=jdjs(a 2,b)
ENDIF
ENDIF
ENDIF
ENDFUNCTION

``````````````````````````````````````````````````````````
DEFINTA-B,I-N
DEFSTRC
DEFDBLD
FUNCTIONjdjs2$(a,b)`简单计算函数之二,先乘除后加减的算法
DO:ycc=0`该循环先进行算式中的乘除运算.Ycc记录算式中有无
乘除号
FORI=a 1TOb-1STEP2
IFlx(I)>2THEN
IFlx(I)=3THEN
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)))
ENDIF
FORk=ITOb-2:csf(k)=csf(k 2):lx(k)=lx(k 2):NEXT`整理算式
ycc=1:EXITFOR
ENDIF
NEXT
`FORkk=aTOb:PRINTkk,csf(kk),lx(kk):NEXT`调试时用来
观察变量
IFycc=1THENb=b-2
LOOPUNTILycc=0
IFb>aTHEN`再按顺序进行加减运算,如果只有一个元素,则跳过下
面的循环,直接返回它
FORI=a 1TOb-1STEP2
IFlx(I)=1THEN
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)))
ENDIF
NEXT
ENDIF
jdjs2=csf(b)
ENDFUNCTION->

上一篇:VB中调用带参数存储过程的实现 人气:4687
下一篇:判断一个32位程序是否结束 人气:3211
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐