|
2楼
楼主 |
发表于 2007-4-6 00:06:28
|
只看该作者
用CASIO4X00型计算器编写公路工程测量程序浅见
我们已经进入了全电脑化时代,许多好用、实用的程序语言也发展得空前繁盛。纵观公路工程测量这个领域,使用便携式电脑利用专业软件与全站仪联机通讯测量已不是什么稀奇事,使用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编写则为:
L01bI0 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◣ L06szA: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 |
|