是否可以使用菜单输出变量的值( TI-Basic中的命令?虽然菜单(命令)非常初级,但我相信它在我的程序的特定范围内最适合用户的简单性。在代码中,我为一个变量存储了一个值,然后希望在菜单中输出这个数字。例如:
5->A
Menu("SELECT AN OPTION","YOU HAVE A",1)但是,在引号内,字母A是输出。有没有办法使用不同的语法来实现这一点?如果不是,那么菜单式界面的最佳替代方案是什么?
发布于 2013-10-22 12:10:50
是的,这是可能的。问题是TI-Basic并不真正支持将数字合并成字符串(大多数脚本语言都有非常好的字符串解析)。您可以这样做:
5->A
Menu("SELECT AN OPTION","YOU HAVE"+"2 COOKIES",1)它会将字符串"YOU HAVE“和”2Cookie“组合成"YOU HAVE 2 COOKIES",但是如果你尝试"NUM"+5,它会给你某种类型错误,因为字符串和数字不能组合。
对此的解决方法(在大量代码段中执行起来非常繁琐)是这样的:
"? //this is to store a string in the Ans variable
For(X,1,1+int(log(N //loop for the number of digits of the number
sub("0123456789",iPart(10fPart(N/10^X))+1,1)+Ans //this line pretty much converts
the digit in question of the number (X) to another number, and then sub allows it
to select that number from a string (e.g. sub("0123",3,1) will output 2). Really
I have no idea about the math behind actually getting the digit in question.
End
sub(Ans,1,length(Ans)-1→Str1 //output all except the first character of the
string because it is a placeholder "?" from the frist line.请注意,这绝对不是将数字转换为字符串的唯一方法,但我觉得这是迄今为止发现的最快、最干净的方法。此外,此方法仅适用于整型数字(非十进制),要使其适用于negitive,您只需将1+int(log(A更改为1+int(log(abs(A
正如我所说的,我不知道iPart(10fPart(N/10^X))+1实际上是如何工作的,但正如我所说的,它的输出只是比有问题的数字的值高出1。(高1是因为0将字符串中的一个点作为项目1)。
无论如何,完整的代码应该是这样的:
5->A
"?
For(X,1,1+int(log(A
sub("0123456789",iPart(10fPart(N/10^X))+1,1)+Ans
End
Menu("SELECT AN OPTION","YOU HAVE "+sub(Ans,1,length(Ans)-1),1)对于像这样的小缺陷(其他是缺少功能等),TI-Basic是相当弱的,但不管怎样,它是一种有趣的编程语言。
编辑:我还看到你要求替代方法,所以这里有一些。您可以始终使用输出(或文本(或文本)命令分别绘制到主屏幕/图形屏幕,但这需要您编写整个菜单程序。这样做的一个小优点是,您可以执行以下操作:
5->A
Output(1,1,A在任何你喜欢的位置,而不需要做整个混乱的字符串转换。如果数字是单独的,它将显示为“数字”,但问题出在您尝试将其与字符串合并的地方。(像字符串"YOU HAVE"),所以即使有一个菜单,你也可以这样做:
5->A
Menu("SELECT AN OPTION",A,1)但这没有太大的帮助,因为没有任何东西来描述它的价值。
发布于 2017-02-17 03:43:13
如果您有TI-84+ CE,则可以使用toString()命令,然后连接字符串,如下所示:
5->A
toString(A->Str1
Menu("SELECT AN OPTION","YOU HAVE "+Str1,1https://stackoverflow.com/questions/19504777
复制相似问题