首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QBasic/QB64:如何清理IF THEN IF“梯子”?

QBasic/QB64:如何清理IF THEN IF“梯子”?
EN

Stack Overflow用户
提问于 2018-03-29 14:09:43
回答 6查看 226关注 0票数 1

不确定我在这里是否使用了正确的术语,但是出于某种原因,QBasic无法理解"x =y= z“之类的内容。限制在两个人以内。

为了解决这个问题,我这样做了:

代码语言:javascript
复制
IF sum(1) = sum(2) THEN
    IF sum(2) = sum(3) THEN
        IF sum(3) = sum2(1) THEN
            IF sum2(1) = sum2(2) THEN
                IF sum2(2) = sum2(3) THEN
                    IF sum2(3) = sum3 THEN
                        IF sum3 = sum4 THEN
                            PRINT "This is a Lo Shu Square, with all sums equaling"; sum(1)
                        ELSE
                            PRINT "This is not a Lo Shu Square."
                        END IF
                    END IF
                END IF
            END IF
        END IF
    END IF
END IF
END

当然是有效的,但我感觉有一种更简单的方法来检查所有的和是否相等。有什么建议吗?

EN

回答 6

Stack Overflow用户

发布于 2018-03-30 07:49:40

如果所有的比较都放在一行上,并像这样分开,那么它就会起作用:

代码语言:javascript
复制
REM code to shrink IFTHEN ladder:
IF sum(1) = sum(2) AND sum(2) = sum(3) AND sum(3) = sum2(1) AND sum2(1) = sum2(2) AND sum2(2) = sum2(3) AND sum2(3) = sum3 AND sum3 = sum4 THEN
    PRINT "This is a Lo Shu Square, with all sums equaling"; sum(1)
ELSE
    PRINT "This is not a Lo Shu Square."
END IF
END
票数 3
EN

Stack Overflow用户

发布于 2018-03-31 09:03:22

您还可以将逻辑编码到循环中:

代码语言:javascript
复制
DIM testvals(8)
testvals(0) = sum(1)
testvals(1) = sum(2)
testvals(2) = sum(3)
testvals(3) = sum2(1)
testvals(4) = sum2(2)
testvals(5) = sum2(3)
testvals(6) = sum3
testvals(7) = sum4
DO 
    FOR i = 1+LBOUND(testvals) TO UBOUND(testvals)
        IF testvals(i-1) <> testvals(i) THEN
            PRINT "This is not a Lo Shu square."
            EXIT DO
        END IF
    NEXT
    PRINT "This is a Lo Shu square, with all sums equaling"; sum(1)
LOOP WHILE 1 = 0

这有几个好处:

  1. 如果更改代码,会更容易发现拼写错误。
  2. 在类似的情况下,您始终可以添加和删除测试值。在这种情况下,不需要这样做,但在其他一些情况下,简单地键入testvals(8) = value并将代码更改为代码行中的代码可能是有益的。
  3. it缩短了比较过程,这意味着如果第一个条件为false,它将停止检查并表示它不是一个Lo Shu Square,这类似于一组IF-THEN-ELSE语句(其中每个ELSE都是PRINT "This is not a Lo Shu square.") QB64的<
  4. >d14ELSE>运算符计算两个操作数,即使第一个操作数是0或另一个"false“值。这可能会快得多,尽管在这种情况下你可能不会注意到区别。

另一方面,它也有一些缺点:

在这样的情况下,不使用AND在QB64中是一种不寻常的模式。事实上,这是AND存在的一个很好的原因。

  • 您可以轻松地删除使用AND组合的测试值,而无需对testvals数组中的项重新编号或更改其dimensions.

  • Even。如果您有许多测试值,最好编写一个小程序自己生成IF a AND b AND c AND ... THEN ... END IF块(或者类似于IF-THEN塔以保留短路行为),并将输出粘贴到需要的程序代码中。
票数 1
EN

Stack Overflow用户

发布于 2018-03-31 14:43:16

检查数组的一种更简单的方法:

代码语言:javascript
复制
testvals(1) = sum(1)
testvals(2) = sum(2)
testvals(3) = sum(3)
testvals(4) = sum2(1)
testvals(5) = sum2(2)
testvals(6) = sum2(3)
testvals(7) = sum3
testvals(8) = sum4
FOR i = 1 TO 7
    IF testvals(i) <> testvals(i + 1) THEN
        f = -1
        EXIT FOR
    END IF
NEXT
IF f THEN
    PRINT "This is not a Lo Shu square."
ELSE
    PRINT "This is a Lo Shu square, with all sums equaling"; sum(1)
END IF
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49549121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档