我们已经进入了全电脑化时代,许多好用、实用的程序语言也发展得空前繁盛。纵观公路工程测量这个领域,使用便携式电脑利用专业软件与全站仪联机通讯测量已不是什么稀奇事,使用SHAHP PC-E500型和其它的微型计算机的人也不少。电脑我们比较熟悉,我在此不再赘述;SHAHP PC-E500型微型计算机是一款基于BASIC语言上的微型电脑,功能已很多,能编出很复杂的程序,内存也较大,有32KB、64KB、128KB、256KB四种,有输出、输入设备,数据通信设备,其功能已与一台X86相当了。但两者价格也不菲,SHAHP PC-E500型微机为2000~3000元左右,相当于一台低配置的台式电脑的价钱,而笔记本电脑至少在万元以上。它们都很娇贵,而且损耗也大,加之测量是一项野外工作,往往一台电脑能用1~2年就不错了。它们对于工程量小、造价低、线型较简单的改建工程来说,可算是一件奢侈品了,况且有了硬件还不够,还需要一套正确、实用的程序才能完成测量工作,实际上这样一套程序是较难编写、也不容易得到的(中科院编的一套程序要一万多元),对于那些非计算机专业的测量工作者来说确是一件难事。       那么什么样的机器适合我们呢?答案是CASIO 4X00型计算器,之所以称之为计算器,是因为它是一款基于科学计算器上的具有简单的程序语言的科学计算器。其中能较好地编程的机器型号目前有CASIO fx-4500型和CASIO fx-4800型两种(以下简称4500和4800)。它们价格低廉、有一定的编程功能,体积小巧,且程序的编写也比较简明。前者内存较小,只能存贮1103个字节,因而只能应付一些较为简单的公式计算,和科学计算。由于其内存有限,对于稍复杂的程序它要么是装不下,要么是运行速度太慢,对于我们快速测量的要求来说,不能很出色地完成。而后者则较之前者有了很大改进,首先是它扩大了内存容量,达到了4500个字节,还有就是它更好用了,已具有了简单的人机对话功能,出现了菜单和子菜单。另外它还增加了一些实用的新命令、新功能和许多科学常数。      Dsz(计数减循环)和Isz(计数加循环)是4800新增加的两个命令。     下面我们来看一个例子:有4个不同的数值,求4个数的平均数。 该程序用4500编写为:               若用4800编写则为: L01:LbI0                                         L01:LbI0  L02:Z=0:C=0                                   L02:A=4:C=0  L03:LbI1                                         L03:LbI1  L04:{B}                                          L04:{B} L05:C=B+C                                      L05:C=B+C L06:Z=0=>Z=1:Goto1◣             L06:DszA:Goto1  L07:Z=1=>Z=2:Goto1◣              L07:C=C÷4⊿ L08:Z=2=>Z=3:Goto1◣             L08:A=A-1:Goto1  L09:Z=3=>C=C÷4◣             L02中如A=-4则L06中L10:C⊿ 的Dsz用Isz替代即可。L11:Goto0        再就是自动解答功能,4500有单个公式编辑功能,而4800则多了一个公式解答功能,其原理是用牛顿法解方程。      举个例子:      有一方程式:X=2Y+5求当X=2时的Y值。      将该方程式存入公式存贮器中,按解答键“SOLVE”计算器就会显示:X?输为2,立即显示:Y=-1.5。此项功能被称为自动解答功能。      4800还在4500的基础上增加了一些科学常量,如:阿佛加德罗常数、万有引力常数等,笔者在此就不再哆嗦了,详情请参阅机器的《操作说明书》。 在熟悉了计算器之后,我们来谈谈程序的编写。 作为一台可编程的多功能科学计算器,自然有其一套比较完整程序语言。4500和4800使用的程序语言可以算做简单的BASIC语言,有的命令如GOTO、PAUSE就与BASIC语言的一模一样。现在我们就型计算的程序语言来说说。 其主要命令有: 1、=>…………… 条件转移成立符号,其用法相当于BASIC中的IF……THEN语句 2、≠>……………条件转移不成立符号,其用法相当于BASIC中的IF……ELSE语句通常二者连用,相当于BASIC中的IF……THEN……ELSE语句 3、 ………… 条件转移结束符号,与=>和≠>配合使用,放在条件语句最后面。 4、 Goto………… (条件)转移命令。前面可加条件语句,与BASIC中的GOTO作用相同。通常与LbI一起用,如果所转移的行号无效,则会显示:GO ERROR的出错信息。 5、 LbI……………标记命令。用于将一段语句作转换标记。后可接字母、数字、符号,但不能超过两个字节,如不能用≥10的数字作行标,否则会出现出错信息。 6、 Dsz………… 增量循环命令。用法参考前面的例子。 7、 Isz……………减量循环命令。用法同Dsz。 8、 Pause…………暂停命令。后可接0~9之间的整数n,可使某一数据显示n/2秒钟,然后继续运行下面的程序。 9、 Fixm…………变量锁定命令。该命令能使其后的所有变量值(A~Z)均当成定数处理。当程序运行时,将不需要输入变数(“{}”内的变数除外),而是将存贮器中原有的数值来完成计算。(可参考4500说明书) 10、{}……………变量输入命令。“{”和“}”必需成对输入。否则会出现Syn ERROR 11、=、≠、>、<、≤、≥……条件运算关系算子,常与Goto命令构成条件转换语句。12、Prog…………运行子程序命令。后接子程序名(一定要加引号,且要注意空格)否则会出现Syn ERROR的出错信息。如为4500则可不加“”号。 13、 …………数据显示命令。该命令输入后会自动换行。      如果要将某一值(如:缓和曲线Ls)直观显示则可在该存贮器名(假设为L)后加“Ls”为L“Ls”即可。显示数据时计算器会显示Ls=###,并出现disp字样。明白了各种命令的含义,我们就可着手编程了。稍安勿躁,在编程前,有一条总原则即:尽可能使程序变得简明扼要;尽可能使程序所包含的子程序减少;尽可能不使用扩充变数存贮器,如Z[1]、Z[2]等。      原因如下:      ①我们都知道一个词:效率。一个程序应该尽可能地变得简明扼要,能省的坚决省略。过繁冗的语句既会使程序的运行速度变慢,又占用字节,对于内存容量较少的4500计算器来说,节省字节是很重要的,见例A。要注意的是:如果你对程序不太熟练,则必需先按步骤编好并经过调试能运行以后,再着手精简工作,否则只会忙中添乱;      ②子程序过多就会造成程序结构松散,有的计算器里大小程序有十几个甚至几十个,而只有四、五主程序,我们如果要运行某一个落在后面的主程序的话就得越过大量子程序去选取。子程序过多还可能引起程序之间紊乱、混淆,且出现错误也不容易查出。所以我们要尽量地少编子程序;      ③使用扩充存贮器是一个利少弊多的做法,君不见:每扩充一个存贮器就要减少10个字节的容量,而每个扩充存贮器至少要占四个字节,比一个A~Z变量净增三个。有时你会觉得变量存贮器不够用。其实不尽然,一般程序变量数很少会超过26个,只是你不懂得去使用。一般来说,两个相对独立的程序步骤之间根本不需要考虑变量重复问题。针对某一个程序,只要不是固定变量({}内的变量),也就是那些通过计算出来的用于下一步计算的数值。我们就可以通过重复赋值来得到某些计算量。反正在下一轮循环中该量是变化的。见例B。 例A:有程序如下①:                           简化后程序如下②: L01:LbI0                                                          L01:LbI0 L02:B>0=>Goto1◣                             L02:B≤0=>Goto1◣ L03:B≤0=>Goto2◣                            L03:C>0=>A=1◣ L04:LbI1                                                           L04:A=2      L05:C>0=>A=1◣                               L05:Goto2 L06:C≤0=>A=2◣                              L06:LbI1 L07:Goto3                                                         L07:C>0=>A=3◣ L08:LbI2                                                            L08:A=4 L09:C>0=>A=3◣                               L09:LbI2 L10:C≤0=>A=4◣                               L10:A“Arg=” ⊿ L11:Goto3                                                         L11:Goto0 L12:LbI3 L13:A“Ang=” ⊿ L14:Goto0       运行!结果相同,而字节数和步骤数却大为减少了。既提高了运行速度又节省了内存,何乐而不为呢?程序②为什么会比程序①简单呢?原因就是它巧妙地运用了数学中的补集原理。我们知道B>0的补集就是B≤0,所以在L03行中B≤0就变得可有可无了。同样道理,在L06、L10行中C≤0也可以精简掉。       例B:      有一程序如下:                      修改后程序如下:L01:LbI0                                                  L01:LbI0 L02:{BDX}                                               L02:{BDX} L03:A=B+D⊿                              L03:A=B+D⊿ L04:C=A+X⊿                             L04:A=A+X⊿ L05:Y=C+D⊿                             L05:A=A+D⊿ L06:Goto0                                                L06:Goto     经过比较,我们不难看出:修改后的程序是将A用作常变量对其连续赋值,腾出了C、Y来用于表示其它变量。掌握这几个编程序要领后,我们来说说程序结构。通常,一个主程序由行标、计算器状态设定语句、运行子程序语句、数据输入语句、条件转换语句、公式运算语句、数据显示语句、循环运算语句等组成。子程序与主程序不同的是无循环运算语句。      例如:      有一个主程序如下:  L01:LbI0……………………………………………… 行标 L02:Norm…………………………………………… 计算器状态设定语句 L03:Deg……………………………………………… 计算器状态设定语句  L04:{ABCD}………………………………………… 数据输入语句(指定变量) L05:A“X0 [1] [2] 下一页
|