kai901 发表于 2021-4-2 10:38:25

卡西欧非编程型科学计算器实现子程序和循环的方法

本帖最后由 kai901 于 2021-4-3 09:14 编辑

以下所有sgn^2(x)均为E15√(abs(x));以下所有类似var=Condition?$1:$2的式子均写为var=Condition*($1-$2)+$2。这个式子是var=Condition*$1+!Condition*$2的变形,因为前者可以少写一次Condition,更省字符数,所以一定要用前者。
1个循环/子程序:
B~~~~; //循环(子程序)前只执行一次的语句B~~~~; //B为是否执行的开关,运行前B应该赋值为1
D=(D!=$1)?D:~~; //当D未达到需要的停止循环(子程序)的数值时,对D赋值;当D达到需要的停止循环(子程序)的数值时,D的值不变以免继续触发循环(子程序)。制定需要的条件可以达到子程序的效果。C=sgn^2(D);C~~~~; //C为循环(子程序)的开关C~~~~; //第5行和第6行为循环(子程序)的语句
B=1-C;//循环(子程序)执行后要更新是否执行主程序的开关的值B~~~~; //循环(子程序)结束后执行的语句B~~~~;0/(B-1); //程序结束。需要不定时调用子程序时应该去掉该句
2个并列的循环/子程序://注释参考上一条B~~~~;B~~~~;
D=(A!=0)D:~~; //这里的条件判断是为了保证两个循环(子程序)的计步器不同时启动C=sgn^2(D);C~~~~;C~~~~;
B=1-(A||C) //保证当任意一个循环(子程序)运行时不触发夹在两者之间的主程序B~~~~;B~~~~;
E=(C!=0)?E:~~; //这里的条件判断是为了保证两个循环(子程序)的计步器不同时启动A=sgn^2(E)*(1-C); //这里的双重条件判断是为了保证两个循环(子程序)不同时执行A~~~~;A~~~~;
B=1-(A||C) //保证当任意一个循环(子程序)运行时不触发结尾的主程序B~~~~;B~~~~;
0/(B-1)虽然开关变量可以用判断式代替,但是考虑到输入这么多相同的式子违背了编程的根本目的,所以宁愿多花2个变量来节省时间和可输入的字符数。
1个嵌套循环://注释参考上面//嵌套循环需要在运行前设置计步器的初值B~~~~;B~~~~;
A=sgn^2(E);C=sgn^2(D);AC~~~~;AC~~~~;E=(D!=$1)?E:~~~~; //这里和常见的嵌套循环不一样D=(D!=$1)?~~~~:1; //循环的赋值语句顺序应该和循环的嵌套顺序相同,也就是说写完循环内语句之后也是先写外循环再写内循环
B=(E==$2) //当外循环的计步器达到终值时执行主程序B~~~~;B~~~~;
0/(B-1)
考虑到可使用的变量(9个)和程序长度(es/es plus系列为99个字符,classwiz系列为199个字符)都十分有限,上述的3种循环(子程序)足以涵盖极大多数可能的需求。下面以一个计算九九乘法表的奇数列的平方和再平方的嵌套循环伪代码例子具体说明循环怎么写:/先设置D和E为1A=sgn^2(E);C=sgn^2(D);AC(DE)² M+; //不是all clear的ac键E=(D==9)?E+2:E;D=(D==9)?1:D+1;
B=(E==11) //要考虑E最后的取值M=M^(1+B); //最终结果在M
0/(B-1)
页: [1]
查看完整版本: 卡西欧非编程型科学计算器实现子程序和循环的方法