在TI-BASIC程序中以非评估形式重新评估或存储布尔值

时间:2012-12-03 00:51:12

标签: ti-basic

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

以下是一个示例程序:

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增加1,从数字0开始。每增加一次,我们检查J是否为真,如果是,我们就停止。

如果我传入J=I≠5,程序会在打印1后停止。

如果我传入J=I=5,则不会产生结果。 我希望程序在I=5为真时停止,而是程序无限期地继续。这意味着J仅在程序开始时进行评估。

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


我认为J在传入后会被01替换。要重新解释我的问题,是否可以输入/保留布尔表达式为一个未评估的字符串/文字?然后我会在程序中调用类似eval(J)的内容。

3 个答案:

答案 0 :(得分:2)

您的更新中的假设是正确的; J正在被数值取代。

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

Prompt Y1

每当调用Y1时,它都会重新评估,因此如果您将I=5存储到Y1,那么每当I≠5时,Y1将返回0 I = 5。

答案 1 :(得分:0)

DelVar IPrompt J

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

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

这是您的程序,已经过优化。你的问题是在原始提示之后J永远不会改变,所以循环将永远四处转转。是的,您可以在每次迭代中重新评估J,但如果您希望程序正常工作,则需要实际执行此操作。

答案 2 :(得分:0)

我不知道为什么你在这里使用Lbl / Goto循环;我建议如果For循环不适合你,那么尝试使用While或Repeat循环。它们更整洁,更快。

除此之外,

您将I递增1并每次都检查J≠0IJ是完全不同的变量,除非您让它们互动,否则它们不会互相交互。如果您的初始输入为J=0,则程序将永久运行。

  

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

但代码中没有任何内容可以检查I=5。如果你想要这样的话,你应该把If I=5放在某个地方。

  

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

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

  

我认为J一旦被传入就会被0和1替换。

事实并非如此。相反,如果If J,代码中的J=0将输出FALSE,而J的任何其他值则输出为TRUE。

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

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