cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 3014|回复: 7

循环中的循环——浅谈ES的循环语句实现

[复制链接]
发表于 2010-4-2 22:29:37 | 显示全部楼层 |阅读模式
其实我不想打字的……
还是说思路,因为我举实例很容易举错……

大家都知道,ES的循环是通过狂按等号实现的。
那么,循环中的循环就是在不出错的情况下适时候跳出循环,使循环语句无效。这就跟VB中的Exit Do 是一样的。

例:

Do While A > 1
   A = A - 1
Loop

可以改成

Do while 2 > 1    '死循环
   A = A - 1
   If A > 1 Then Exit Do
Loop

于是,在ES中,我们有

.5(A-1)(Sgn(1-A)+1)+....(以后的语句+控制) --> A
缺陷:A=0时是显而易见的。考虑更换函数为isn和isp,则
(A-1)*isn(A-1)+(....)*isp(A-1) --> A

这种转换方法实质上就是变相的If。

评分

参与人数 1金钱 +3 收起 理由
zasdfgbnm + 3 我很赞同

查看全部评分

 楼主| 发表于 2010-4-2 22:30:13 | 显示全部楼层
当然这种循环不能实现真正意义上的循环。
发表于 2010-4-2 23:24:40 | 显示全部楼层
我觉得给一个实例来研究一下比较好,Σ也可以起到循环作用。
发表于 2010-4-3 09:00:46 | 显示全部楼层
我以前也有类似想法,不过我的想法是用一个变量做记号例如用B,进入内部循环之前把B赋值为1,出来后赋值为0,以达到控制目的,这种方法的一个显著缺点就是在内存寸土寸金的计算器上浪费内存,但是更容易控制,例如:
  1. while (true){
  2.        exp1;
  3.        exp2 ;
  4.        exp3 ;
  5.        while(true){
  6.               inexp1;
  7.               inexp2;
  8.               inexp3;
  9.               if(condition1) break;
  10.        }
  11.        exp4
  12.        if(condition2) break ;
  13. }
复制代码
改成
  1. while (true){
  2.        if(out) exp1;
  3.        if(out) exp2 ;
  4.        if(out) exp3 ;
  5.        out = false;
  6.        inexp1;
  7.        inexp2;
  8.        inexp3;
  9.        if(condition1) out = true;
  10.        if(out) exp4
  11.        if(out) if(condition2) break ;
  12. }
复制代码
发表于 2010-4-3 09:53:11 | 显示全部楼层
在某些情况下我这个方法可以节约代码空间,我现在学习很忙(中科大的学风大家可能听说过),如果有时间(估计要很长)我会搬出算法复杂度理论来计算一下什么时候选用哪种方法更好
发表于 2010-4-3 15:20:30 | 显示全部楼层
比较早发布的那个解方程里就是用的循环思想(不过做出来是错的-.-。。而且代码巨长。。。),当然,那个只有跳进去的,没有跳出来的
(后来的那个二分法就不是了,但是空间节省得多,而且结果正确)
发表于 2010-4-3 15:21:42 | 显示全部楼层
我觉得给一个实例来研究一下比较好,Σ也可以起到循环作用。
鸣人之子 发表于 2010-4-2 23:24
Σ只能做计算的循环,赋值、组合赋值、定积分都不能套用。本来就循环的东西进行循环,没什么实用意义的。
发表于 2010-4-5 09:41:36 | 显示全部楼层
总之还是需要结合一个有一定复杂度的实例来研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-22 22:47 , Processed in 0.074468 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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