2

我将某个变量的布尔表达式传递给I操作的 TI-BASIC 程序I,但布尔表达式只计算一次 - 在程序执行开始时。

这是一个示例程序:

Prompt J
0 -> I

Lbl 1
1 + I -> I
Disp I

If J
Then
Goto 2

Else
Goto 1
End

Lbl 2
End

(这不是我正在编写的实际程序,它更复杂,因此不能使用 for 循环;上面的程序显然可以用 for 循环更优雅地编写。)

我们I从数字 0 开始递增 1。每次递增后,我们检查是否J为真,如果是,则停止。

如果我通过J=I≠5,程序在打印后停止1

如果我传入J=I=5,则不会出现预期结果。我打算让程序在为真时停止I=5,但程序会无限期地继续。这意味着J仅在程序开始时评估。

是否可以在该循环的每次执行中重新评估J


我假设它J被替换为0and 1,一旦它被传入。为了改写我的问题,是否可以将布尔表达式输入/保留为未评估的字符串/文字?然后我会在程序中调用类似的东西eval(J)

4

3 回答 3

2

您更新中的假设是正确的;J 被一个数值代替。

你改写的问题的答案是肯定的,你可以传递一个表达式,但你必须使用一个函数变量而不是一个真正的变量:

Prompt Y1

每当Y1被调用时,它都会重新计算,所以如果你存储I=5Y1,那么Y1当 I≠5 时返回 0,当 I=5 时返回 1。

于 2014-05-02T16:30:59.173 回答
0

我不知道你为什么在这里使用 Lbl/Goto 循环;我建议如果 For 循环对您不起作用,请尝试改用 While 或 Repeat 循环。它们更整洁、更快。

除此之外,

你递增I1 并J≠0每次检查。I并且J是完全不同的变量,除非你让它们相互作用,否则它们不会相互作用。如果您的初始输入是J=0,那么程序将永远运行。

我打算让程序在 I=5 为真时停止,但程序会无限期地继续。

但是代码中没有检查 if 的内容I=5If I=5如果你想让这种情况发生,你应该在某个地方放一个。

是否可以在该循环的每次执行中重新评估 J ?

是的,但您需要手动告诉计算器这样做。

我假设 J 在传入后立即被 0 和 1 替换。

不是这种情况。相反,If J您的代码中的 将输出 FALSE ifJ=0和 TRUE 的任何其他值J

此外,您不需要End在程序结束时使用;在 TI-BASIC 中,该End命令指示代码块的结束,例如If:Then条件和//For循环。WhileRepeat

我建议你在这里阅读:http: //tibasicdev.wikidot.com

于 2014-12-02T22:39:14.250 回答
0
DelVar IPrompt J

是的,我的意思是不要在那里换行。你不需要一个。相信我。

While not(J
I+1->I
Disp I
End

这是您的程序,已优化。你的问题是 J 在你原来的提示之后永远不会改变,所以循环会永远循环下去。是的,您可以在每次迭代中重新评估 J,但如果您希望您的程序正常工作,您确实需要实际执行它。

于 2013-06-18T18:23:59.727 回答