⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9921.txt

📁 关于编程技术技巧的文章
💻 TXT
📖 第 1 页 / 共 4 页
字号:
-PUSH BX 
-MOV AX,3500 
-INT 21 
-MOV DX,BX 
-MOV BX,ES 
-MOV DS,BX 
-MOV AX,2505 
-INT 21 
-POP BX 
-POP ES 
-POP DS 
-INT 20 
-RCX 
-W 
-Q 
C:\> 

  可把EXIT1.COM加到AUTOEXEC.BAT中,这样若遇到死循环只需按屏
幕打印键即可退回到DOS提示符。 
                 
***********************************************************

                   简单计算函数的编写过程 

                        作者:胡晓磊
                  E-mail: scjlhxl@163.net

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

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

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

  这是一个递归的思路,据此得到以下算法:
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 
本文摘自网易《网络时代》。
        
***********************************************************
***********************************************************

◆服务台◆

Dev-Pascal 1.2  (3004K)
一个Pascal编译器和开发环境。它包括一个debugger,示例程序,
帮助文件和一个安装生成工具。
相关站点: http://www.bloodshed.nu/devpascal.html
下载: http://person.zj.cninfo.net/~yao/download/devpas12.zip

Dev-C++  3.0 (6750K)
一个 C/C++ 编译器和开发环境。
它由一个多窗口的、面向对象的代码编辑器和一个能够快速编译、
连接和运行的编译器所组成。它有语法高亮和起源文件编辑等功能。
它还包含一个调试器和一个安装建立工具,包含有 150 多个 include 
文件和 100 多个库文件。
相关站点: http://www.bloodshed.nu/devc.html
下载: http://person.zj.cninfo.net/~yao/download/devcpp30.zip

ClassExplorer Pro for C++ Builder 4   (800k)
在 C++ Builder 中添加强大的代码导航、建立和文档功能。
ClassExplorer Pro 分析你正在工作的项目,提供快捷方式的浏览、
类显示和类继承关系浏览器。你还可以添加类的数目,包括区域、方
法和特征 (自动生成特征) 等。ClassExplorer 还可以给你的类生成
一个完全的在线帮助系统。
相关站点: http://www.toolsfactory.com/classexplorer.html
下载: http://person.zj.cninfo.net/~yao/download/cex4bcb404.exe

以上软件均出自于我的主页,欢迎您常来光临。
http://person.zj.cninfo.net/~yao (169、163均可访问)

***********************************************************
***********************************************************

◆有问必答◆

059. mailto: yaozheng@kali.com.cn?subject=059
请问,我想自己做一个两端有modem,通过电话线,拨号连接,然后
传送文件的小程序。我主要使用VB,PB编程,所以使用了mscomm控
件。但由于传送过程没有加任何协议,所以每一千个字节总有两三个
字节出错,但我不知怎么加协议,或者怎么控制传送不出错。请不吝
赐教!或有现成的原程序参考一下更好!谢谢!
刘国伟 liuguowei@263.net

060. mailto: yaozheng@kali.com.cn?subject=060
我有一个问题请指教:
现象:在装入WIN98时,有网卡(3COM Ethenet III 3c5098)出现
*.cab无法解压等错误,无法忽略,如果重启动,则重新装入,装好
后出现Iexplore错误,无法进入资源管理器。如在上面出现*.cab错
误,把网卡卸掉,能正常安装,网卡再装上配置好后,重启会发现
注册表错误已FIXED,在控制面板中无ODBC管理。装入DCOM98仞无,
出现注册表错误已FIXED,装入开发工具VB5.0后ODBC出现,但点击
出现ODBC管理器按添加选中一驱动程序(WINDOW使用控制面板文件
...ODBCCP32.CPL出错。如运行ODBCAD32.exe,按添加一驱动程序出
现odbcad32在015c:7boe3905的模块MSVCRT40.dll中导致无效页面。
在装入WIN95时,无问题,但装入应用时ODBC也出现同样错误。
请问这是怎么回事?谢谢! ljchu@sz.utl.com.hk

061. mailto: yaozheng@kali.com.cn?subject=061
各位大虾:我自己有一插卡(另一显示控制卡,同显示器),在
DOS下,我通过读取汉字点阵来控制我的控制卡和显示器,请问在
windows下,是否能获得将显示的字符点阵?或如何编写设备驱动
程序来控制它。如有其他类似情况请付示例。kenttang!
mtang@ipacssh.online.sh.cn

062. mailto: yaozheng@kali.com.cn?subject=062
请问哪里可以找到《深入浅出windows mfc程序设计》一书的配套
磁盘。 x_power@21cn.com

如果您有什么疑难问题,就请把问题发往 yaozheng@kali.com.cn
主题为“提问”,我会把问题放在杂志上的,希望编程高手们能
不吝赐教,也希望这个栏目能成为大家交流的场所。

***********************************************************
***********************************************************

◆编者的话◆


本刊已加入【CHINA-EZL】中国电子杂志联盟
联盟主页地址 http://china-ezl.yeah.net

如果您觉得这份刊物还不错的话,欢迎把它介绍给您的朋友.
不知道您看了这期刊物有什么想法或者是意见,欢迎向我提出来.
本人感激不尽,我的联系方法如下:

E-mail:yaozheng@kali.com.cn
ICQ#:  43260473
Homepage:http://biancheng.126.com 【163】
          http://person.zj.cninfo.net/~yao 【169】
◆欢迎光临我的主页,一个集编程、软件、鬼故事为主的个人主页         
                                                

◆《编程技术》订、退方法:

请到本刊主页进行订退工作 http://person.zj.cninfo.net/~yao

投稿:向yaozheng@kali.com.cn发封邮件     主题:投稿
提问:向yaozheng@kali.com.cn发封邮件     主题:提问

**************************THE END**************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -