卡西欧计算程序.docx
《卡西欧计算程序.docx》由会员分享,可在线阅读,更多相关《卡西欧计算程序.docx(30页珍藏版)》请在冰点文库上搜索。
![卡西欧计算程序.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/862db066-e201-4cea-bfcb-64efc8c4b870/862db066-e201-4cea-bfcb-64efc8c4b8701.gif)
卡西欧计算程序
1、=>……条件转移成立符号,其用法相当于BASIC中的IF……THEN(假设语句相当于假如……然后,IF相当于条件……THEN相当于结果)语句
2、≠>……条件转移不成立符号,其用法相当于BASIC中的IF……ELSE语句通常二者连用,相当于BASIC中的IF……THEN……ELSE语句(它的英语形式一般为ifa>bthenc>delseifb>athe……)
3、⊿……条件转移结束符号,与=>和≠>配合使用,放在条件语句最后面。
4、LbI……标记命令。
用于将一段语句作转换标记。
后可接字母、数字、符号,但不能超过两个字节,如不能用≥10的数字作行标,否则会出现出错信息。
5、Goto……(条件)转移命令。
前面可加条件语句,与BASIC中的GOTO作用相同。
通常与LbI一起用,如果所转移的行号无效,则会显示:
GOERROR(详见说明书)出错信息
6、Dsz……减量循环命令。
可减少未知数的数量。
7、Isz……增量循环命令。
8、Pause……暂停命令。
后可接0~9之间的整数n,可使某一数据显示n/2秒钟,然后继续运行下面的程序。
它被认为是一个语句。
9、Fixm……变量锁定命令。
该命令能使其所有变量值(A~Z)均当成定数处理。
当程序运行时,将不需要输入变数(“{}”内的变数除外),而是将存贮器中原有的数值来完成计算。
10、{}……变量输入命令。
只程序在循环使用时经常发生改变的数字,如里程、和宽度。
它的输入方式可以使很多种如{AB}{A,B}{AB}都可以。
注意“{”和“}”必需成对输入。
否则会出现SynERROR(详见说明书)出错信息。
11、=、≠、>、<、≤、≥……条件运算关系算子,常与Goto命令构成条件转换语句。
12、Prog……在正常情况是下打开程序的快捷键。
在编程过程中是运行子程序命令,后接子程序名(一定要加引号,且要注意空格,否则会出现SynERROR(详见说明书)的出错信息。
13、↓……换行,只保留计算过程不显示计算结果。
当不想对其换行时也可用:
代替。
14、◣……数据显示命令。
该命令输入后会自动换行。
保留计算过程并显示计算结果。
有一条总原则即:
①学会运用程序的语言,尽可能使程序变得简明扼要;我们编写程序应该尽可能地使程序变得简明扼要,能省略的要一定省略。
烦琐的语句过多的字节只能使计算器的运算速度变慢没有任何好处,而且相当站用内存。
学会节省字节和使用符号是相当重要的。
尤其要灵活运用计算器语句因为它会使你更多的节省字节达到预期效果。
比如下程序就灵活运用了Dsz(减量循环命令)。
比如使其能输入10个数值,并计算10个数值的平均值。
一般程序求10个数字的平均值需要有11个数字的提示符号。
但学会灵活运用了Dsz(减量循环命令)那么只要有三个就可以了,这样就大大节省了字节的占用。
例程序如下:
A=10
C=0
Lbi1
{B}
C=B+C
DszA
Goto1
C÷10
但要注意的是:
如果你是初学者或你对程序的编程不熟练,首先一定要先按照你的思路把程序步骤一步一步的列好在确定它能正确的计算后在想办法对其进行精简修改,否则只会使程序出现过多的错误;②尽可能使程序所包含的子程序减少;子程序过多就会造成程序结构松散,有的计算器主程序需要三个或四子程序,过多的子程序只会引起程序之间紊乱、混淆。
子程序过多对在使用时查找也比较麻烦。
而且子程序过多如果其中某个环节出现错误很难发现其错误所在,在编写程序时要尽量的少编写子程序,即使要编写子程序时也要注意尤其在容易出错的地方要多加注意。
有弊就有利如果你对子程序了解得多了那么可以几个主程序合用一个之程序也到到了要求的减少程序的字节使程序更简化。
例程序如下:
CXCD
Lbi1Lbi1
Prog”V”Prog”V”
B=L-(K-S)◣B=L+(K-S)◣
Goto1Goto1
V
Y=√A2B2+B2X2÷A
③尽量少用或不使用扩充变数存贮器,如A[1]、A[2]等:
使用扩充存贮器是一个利少弊多的做法。
每扩充一个存贮器就要减少10个字节的容量,而每个扩充存贮器至少要占四个字节,比一个A~Z变量净增三个。
有时你会觉得变量存贮器不够用。
其实不尽然,一般程序变量数很少会超过26个,只是你不懂得去使用。
一般来说,两个相对独立的程序步骤之间根本不需要考虑变量重复问题。
针对某一个程序,只要不是固定变量({}内的变量),也就是那些通过计算出来的用于下一步计算的数值。
我们就可以通过重复赋值来得到某些计算量。
反正在下一轮循环中该量是变化的。
明白了各种命令的含义和注意事项就可以编程了。
举例有公式如下:
CX程序名称
Lbl0↓起始标记命令语句
QMNFJ↓数据输入语句(指公式循环运算时的不变量)
{KDE}↓数据输入语句(指公式循环运算时变量)
S=K—Q:
G=F+J↓公式运算命令
X=M+ScosF↓公式运算命令
Y=M+SsinF↓公式运算命令
Prog”j”↓运行子程序命令
Goto0↓循环运算语句
J子程序名称
H=X+DcosG◣公式运算、数据显示语
I=Y+DsinG◣公式运算、数据显示语
T=X—EcosG◣公式运算、数据显示语
U=Y—EsinG◣公式运算、数据显示语
本版本是道路版的升级版,程序只改变了SHELL程序,从SHELL中拆分出WORK-SET(工作设置程序),加入SDPY(隧道放样)。
FileName:
RESET 初始化程序
Norm1:
50→C:
12345→J
"RESETPW"?
I:
I=J=>500→DimZ 为数据库增加额外变量500个,在SET、SETPFDYS程序根据实际再增减变量以保证不浪费内存
50→Z[C+22]:
本程序设置变量个数目前50个刚刚够用。
"PASSWORDS"?
I:
I→Z[C+39] 重设要素保护密码
Cls:
Stop
FileName:
DATLOCK 要素保护密码确定认程序
Cls:
Norm1:
50→C
"PASSWORDS"?
J:
Cls:
J≠Z[C+39]=>Stop
FileName:
SHELL(外壳程序)
50→C ;在扩充变量预留前50个给别的程序用。
如不够就适量加大。
RESET,SHELL,SET,SETPFDYS,这几个程序中C值必需一致
Norm1
Z[C+23]→N 当前分段要素N坐标
Z[C+24]→E 当前分段要素E坐标
Z[C+25]→M 当前分段要素起点桩号
Z[C+26]→H 当前分段要素起点方位角(正北)单位:
弧度
Z[C+27]→A 当前分段要素起点曲率有左偏负右偏正(注意不是半径)
Z[C+28]→R 当前分段要素终点曲率有左偏负右偏正(注意不是半径)
Z[C+29]→L 当前分段要素长度
Z[C+3]→W 斜桩角度
LbiS
Prog"PROGMODE";进入模式功能选择
LbiA
Deg:
Norm1:
Cls
Z[C+1]→G:
"ZH"?
G ;桩求桩号
IfG=-1:
ThenProg"WORK-SET":
GotoS:
IfEnd 进入工作设置
G→Z[C+1]
Z[C+2]→B:
"JL"?
B:
B→Z[C+2] ;B横向距离,左正右负
LbiB
Prog"ZBJS" ;坐标正算
Fix3:
Cls ;设置三位小数
"ZH=":
Locate4,1,G ;第一行显示桩号
"X=":
Locate3,2,X;第二行显示X(N)坐标
"Y=":
Locate3,3,Y ;第三行显示Y(E)坐标
Prog"GCJS" ;高程计算
"Z":
Locate2,4,Z+Z[C+41] ;第四行显示Z坐标
Locate10,4,B ;第四行显示横向距离
0→I
Do:
I+1→I:
I=1000=>Goto1:
LpWhileNot(Getkey=57OrGetkey=27OrGetkey=26);锁定键盘,并在几十秒后自动返回
Getkey=57=>Goto1
IfGetkey=26=>Prog"SDFY":
GotoB:
EndIf
Pol(Z[C+35]-X,Z[C+36]-Y)
Cls:
"DL":
Locate3,1,I:
Locate12,1,Z[C+45]
"→":
Locate3,2,B:
Locate12,2,Z[C+49]
"FWJ"
J<0=>J+360→J:
J◤DMS◢
J→Z[C+46]
I→Z[C+47]
Goto1
FileName:
SDFY隧道放样
Cls
Z[C+2]→V
Z[C+41]→D
Z[C+43]→I:
"DQD-Z"?
I:
I→Z[C+43]
Z[C+42]→J:
"R"?
J:
J→Z[C+42]
Z[C+40]→K:
"R-DL"?
K:
K→Z[C+40]
Abs(V-K)→P
√(P2+(I-Z-D)2)→U 计算实际半径
Fix3:
Cls ;设置三位小数
"ZH=":
Locate4,1,G
"R":
Locate2,2,U
Locate10,2,U-J
IfI-Z-D-J>0:
ThenI-Z-D-√(J2-P2)→P:
0→O
ElseIfP-J>0:
ThenP-√(J2-(I-Z-D)2)→O:
0→P
ElseP-√(J2-(I-Z-D)2)→O:
I-Z-D-√(J2-P2)→P
IfEnd:
IfEnd
"H":
Locate2,3,O
Locate8,3,"V"
Locate9,3,P
Locate1,4,Z+D
Locate9,4,I
0→T
Do:
T+1→T:
T=1000=>Return:
LpWhileNot(Getkey=57OrGetkey=27);锁定键盘,并在几十秒后自动返回
Getkey=57=>Return
IfV-K>0:
ThenV-O→B:
ElseV+O→B:
IfEnd
FileName:
ZBJS 坐标计算程序
Prog"READDAT"
Rad
G-M→Q
IFAR=0:
ThenIfA=R:
Then1→J:
Else3→J:
IfEnd:
ElseIfA=R:
Then2→J:
Else3→J:
IfEnd:
IfEnd判断线元类型
IfJ=1:
ThenH→F:
N+QCos(H)→X:
E+QSin(H)→Y:
IfEnd 直线段直接计算
IfJ=2:
ThenH+QR→F:
Rec(Abs(2Sin(Abs(0.5QR))÷R),H+QR÷2):
N+I→X:
E+J→Y:
IfEnd 圆弧段直接计算
IfJ=3:
ThenGoto5:
IfEnd
X+BCos(F+W)→X
Y+BSin(F+W)→Y
Deg:
Return
Lbi5 用五点通用坐标计算计算缓和段
0.5(R-A)÷L→K
AQ→I
KQ2→J
0.0469100770→P:
H+IP+JP2→O
0.2307653449→P:
H+IP+JP2→T
0.5→P :
H+IP+JP2→D
0.7692346551→P:
H+IP+JP2→F
0.9530899230→P:
H+IP+JP2→P
0.1184634425→I
0.2393143352→J
0.2844444444→Y
N+Q(ICos(O)+JCos(T)+YCos(D)+JCos(F)+ICos(P))→X
E+Q(ISin(O)+JSin(T)+YSin(D)+JSin(F)+ISin(P))→Y
H+AQ+KQ2→F
X+BCos(F+W)→X
Y+BSin(F+W)→Y
Deg:
Return
FileName:
TURNZH(坐标反算)
Prog"INNEZ"
Z[C+37]→U
Z[C+38]→V
0→B:
M+L÷2→G:
Prog"ZBJS"
LbiS:
Rad
U-X→I:
V-Y→J
IfI=0AndJ=0:
ThenGotoA:
IfEnd
Pol(I,J)
LbiA:
Rec(I,J-F)
G+I→G:
IFAbs(I)>0.0001:
ThenProg"ZBJS":
GotoS↙
J→B
G→Z[C+1]
J→Z[C+2]
Prog"GCJS"
FileName:
INNEZ实测坐标输入程序
LblS:
Norm1:
Cls
Z[C+50]=2=>Goto1
Z[C+37]→I
I<0=>Goto1
"DQD-N"?
I 输入待求点N坐标
I<0=>Goto1
I→Z[C+37]
Z[C+38]→I:
"DQD-E"?
I 输入待求点E坐标
I<0=>Goto1
I→Z[C+38]
Z[C+43]→I:
"DQD-Z"?
I输入实测高程
I<0=>Goto1
I→Z[C+43]
Return
Lbi1
I=-1=>Then2→Z[C+50]
IfI=-2:
ThenProg"WORK-SET":
GotoS:
IfEnd 进入工作设置
Prog"INFWJDLDH"
Z[C+50]=1=>GotoS
Return
FileName:
INFWJDLDH 实测坐标(用方位角,距离,高差)输入程序
LbiS:
Deg:
Norm1:
Cls
Z[C+46]→J:
"DQD-FWJ"?
J
J<0=>Goto1
J→Z[C+46]
Z[C+47]→I:
"DQD-DL"?
I:
I→Z[C+47]
Z[C+48]→K:
"DQD-DZ"?
K:
K→Z[C+48]
Z[C+49]→P:
"RHT"?
P:
P→Z[C+49]
Rec(I,J)
Z[C+35]+I→Z[C+37]
Z[C+36]+J→Z[C+38]
Z[C+44]+Z[C+45]+K-P→Z[C+43]
Return
Lbi1
IfJ=-2:
ThenProg"WORK-SET":
GotoS:
IfEnd 进入工作设置
1→Z[C+50]
Return
FileName:
WORK-SET测站设置程序
Norm1:
Cls
50→C
Z[C+32]→I:
"DAT123"?
I:
I→Z[C+32] 平曲线要素数库类型选择1为内置式,2文件式,3实时输入(查看当前要素值)
Z[C+4]→I:
"0123"?
I:
I→Z[C+4] 选择本程序模式0为坐标正算,1坐标反算,2横向边仰坡放样,3,纵向边仰坡放样(隧道进出口用到)
Z[C+41]→I:
"GC-DH"?
I:
I→Z[C+41] 放样点高差常数
Z[C+35]→I:
"STATION-N"?
I:
I→Z[C+35] 设置测站N坐标
Z[C+36]→I:
"STATION-E"?
I:
I→Z[C+36] 设置测站E坐标
Z[C+44]→I:
"STATION-Z"?
I:
I→Z[C+44] 设置测站Z坐标
Z[C+45]→I:
"STATION-HI"?
I:
I→Z[C+45] 设置仪高
Cls
FileName:
PROGMODE程序功能模式选择
Z[C+4]→I
I=0=>Return;正算模式
I=1=>Prog"TURNZH" ;反算模式
I=2=>Prog"HXBYP" ;横向边仰坡放样模式
I=3=>Prog"ZXBYP";纵向边仰坡放样模式
FileName:
HXBYP 横向边仰坡放样程序
Cls:
Norm1
Z[C+40]→I:
"QPD-DL"?
I:
I→Z[C+40] 输入起坡点与中桩距离常数
Z[C+41]→I:
"QPD-DZ"?
I:
I→Z[C+41] 输入起坡点与中桩高差常数
Z[C+42]→I:
"i"?
I:
I→Z[C+42] 输入边仰坡坡度,左仰坡(路堑)为正,右仰坡(路堑)为负,左边坡为负,右边坡为正
Cls:
Z[C+43]→I:
"DQD-Z"?
I:
I→Z[C+43] 输入实测高程
Prog"TURNZH"
Prog"GCJS"
(Z[C+43]-Z-Z[C+41])Z[C+42]+Z[C+40]→B
Fix3:
B-Z[C+2]◢显示与设计位置的偏差
B→Z[C+2]
FileName:
ZXBYP 纵向仰坡放样程序(隧道进口使用)
Cls:
Norm1:
Z[C+33]→I:
"QPD-ZH"?
I:
I→Z[C+33] 输入起坡点桩号
Z[C+34]→I:
"QPD-Z"?
I:
I→Z[C+34] 输入起坡点高程
Z[C+42]→I:
"i"?
I:
I→Z[C+42] 仰坡时(隧道进出口仰坡,进口为正,出口为负)
Cls:
Z[C+43]→I:
"DQD-Z"?
I:
I→Z[C+43] 输入实测高程
Prog"TURNZH"
Z[C+42](Z[C+43]-Z[C+34])+Z[C+33]→G
Fix3:
G-Z[C+1]◢显示与设计位置的偏差
G→Z[C+1]
FileName:
SET设置程序
LbiS
Norm1
50→C
50→Z[C+22]本程序设置变量个数目前50个刚刚够用。
0→K
Z[C+5]→I:
"1Or2"?
I:
I→Z[C+5];选择1线或者2线
180Z[C+3]÷π→J:
"XZJJ"?
J:
Jπ÷180→Z[C+3] ;斜桩夹角
IfI=1:
ThenZ[C+8]→Z[C+6]:
Z[C+9]→Z[C+7]
Z[C+12]→Z[C+16]:
Z[C+13]→Z[C+17]:
Z[C+18]→Z[C+20]
ElseZ[C+10]→Z[C+6]:
Z[C+11]→Z[C+7]
Z[C+14]→Z[C+16]:
Z[C+15]→Z[C+17]:
Z[C+19]→Z[C+20]
IfEnd
Z[C+7]+3→Z[C+31]
0→I:
"1PQX,2SQX,3YSDS"?
I ;1输入平曲线要素,2输入竖曲线要素,3输入1、2线夹平竖曲线交点(变坡点)数量以让程序规划内存建立要素数据为,其它值退出本程序
I≠0=>Prog"DATLOCK"
I=1=>Goto1:
I=2=>Goto2:
I=3=>Goto3
Prog"SETPFDYS"
Stop
Lbi1 ;平曲线要素输入部分
Z[C+6]→D
-1→Z[D+3]
For1→JToZ[C+16]
Cls:
"PQX":
Locate9,1,J
Z[D+1]→I:
"N"?
I:
I→Z[D+1] ;请输入N坐标
Z[D+2]→I:
"E"?
I:
I→Z[D+2];请输入E坐标
Z[D+3]→I:
"R"?
I:
I→Z[D+3] ;请输入半径R
Z[D+4]→I:
"LS1"?
I:
I→Z[D+4];请输入缓和曲线1长度
Z[D+5]→I:
"LS2"?
I:
I→Z[D+5] ;请输入缓和曲线2长度
D+5→D
Next
1→Z[D-2]
GotoS
Lbi2 ;竖曲线要素输入部分
Z[C+7]→D
-1→Z[D+3]
For1→JToZ[C+17]
Cls:
"SQX":
Locate9,1,J
Z[D+1]→I:
"BPDZH"?
I:
I→Z[D+1] ;请输入变坡点桩号
Z[D+2]→I:
"BPDGC"?
I:
I→Z[D+2];请输入变坡点高程
Z[D+3]→I:
"R"?
I:
I→Z[D+3] ;请输入半径R
D+3→D
Next
1→Z[D]
GotoS
Lbi3 ;要素点数输入部分
Z[C+12]→I:
"1PQXDS"?
I:
I→Z[C+12];输入1线平曲线点数,最小值为3
Z[C+13]→I:
"1SQXDS"?
I:
I→Z[C+13];输入1线竖曲线点数,最小值为3
Z[C+18]→I:
"1JDZH"?
I:
I→Z[C+18] ;输入1线平曲线第一个交点的交点桩号
Z[C+14]→I:
"2PQXDS"?
I:
I→Z[C+14];输入2线平曲线点数,最小值为3
Z[C+15]→I:
"2SQXDS"?
I:
I→Z[C+15];输入2线竖曲线点数,最小值为3
Z[C+19]→I:
"2JDZH"?
I:
I→Z[C+19];输入2线平曲线第一个交点的交点桩号
C+Z[C+22]→Z[C+8] 1线路平曲线要素指针偏移基数
Z[C+8]+5Z[C+12]→Z[C+9] 1线路竖曲线要素指针偏移基数
Z[C+9]+3Z[C+13]→Z[C+10] 2线路平曲线要素指针偏移基数
Z[C+10]+5Z[C+14]→Z[C+11] 2线路竖曲线要素指针偏移基数
Z[C+11]+3Z[C+15]→Z[C+21] 要素数据库结束指针
Z[C+21]+1→Z[C+30]
Z[C+21]→DimZ 增加额外变量
-1→K
GotoS
FileName:
SETPFDYS 交点要素=>分段要素
Norm1
50→C
Rad
Z[C+6]+5→D
Z[C+21]+1→F
F+6→DimZ
-1→Z[F] 设置分段要素开始标志
Z[C+20]→V ;从数据库读入当前线第一个平曲线交点桩号
0→G
Pol(Z[D+1]-Z[D-4],Z[D+2]-Z[D-3]);计算第一条直线的距离I,计算方位角J
J→H
Z[D-4]→Z[F+1] 直线段
Z[D-3]→Z[F+2]
V-I→Z[F+3]
For1→GToZ[C+16]-2
Pol(Z[D+1]-Z[D-4],Z[D+2]-Z[D-3]) ;计算第本交点与下一交点的距离I,计算方位角J
J→H
Pol(Z[D+6]-Z[D+1],Z[D+7]-Z[D+2])
I→W:
J-H→K ;计算转角K,负值是左转角,正值是右转角
IFAbs(K)>π:
ThenIfK>0:
ThenK-2π→K:
ElseK+2π→K:
IfEnd:
IfEnd
Z[D+3]→R;从数据库读入半径R
Z[D+4]→L;从数