cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 3294|回复: 0

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

[复制链接]
发表于 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为1
A=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金钱 +3 收起 理由
dousha99 + 3 -

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-12-31 01:44 , Processed in 0.064866 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表