简单计算函数的编写过程_VB.net_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

简单计算函数的编写过程

作者:黑客防线网安VB教程基地 来源:黑客防线网安VB教程基地 浏览次数:0

本篇关键词:过程编写函数计算
黑客防线网安网讯:本人在编写算术运算练习程序时,觉得其中的计算函数下的简单计算函数的编写过程很有意思,当时作了详细记录,现将计算函数整  理为计算程序,并将(不带括号的简单算式的)简单计算函数的...
本人在编写算术运算练习程序时觉得其中的计算函数下的简单计算函数的编写过程很有意思当时作了详细记录,现将计算函数整
  理为计算程序,并将(不带括号的简单算式的)简单计算函数的编制过程整理成文,献给《网络时代》各位读者,敬请批评指正
  
  计算主程序负责初始算式整理、算式中变量的赋值、脱括号及脱括号后的算式整理、调用简单计算函数、输出计算结果
  
  思路:如果第一个运算符是乘除,则计算它前后的两个数,其值作为新算式的第一个数,再继续计算这个新算式;如果是加减则用第
  一个数加减后面的算式(如果是减,还要将其后的+变为-,-变为+)。
  
  这是一个递归的思路,据此得到以下算法:
  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->

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14554-1.html
网站维护教程更新时间:2012-04-03 01:09:10  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer