是否可以使用 TI-Basic 中的 Menu( 命令输出变量的值?虽然 Menu( 命令非常初级,但我相信它最好在我的程序的特定范围内允许用户简单。在代码中,我为变量存储了一个值,然后想在菜单中输出这个数字。例如:
5->A
Menu("SELECT AN OPTION","YOU HAVE A",1)
但是,在引号内,字母 A 是输出。有没有办法使用不同的语法来实现这一点?如果不是,那么菜单式界面的最佳替代方案是什么?
对的,这是可能的。问题是 TI-Basic 并不真正支持将数字合并为字符串(大多数脚本语言都有很好的字符串解析)。你可以这样做:
5->A
Menu("SELECT AN OPTION","YOU HAVE"+"2 COOKIES",1)
它将字符串“YOU HAVE”和“2 COOKIES”组合成“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.
[请注意,这绝对不是将数字转换为字符串的唯一方法,但我觉得它是迄今为止发现的最快和最干净的方法。此外,此方法仅适用于 int 数字(非十进制),要使其适用于负数,您只需更改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 对于像这样的小缺陷(其他缺乏功能等)相当薄弱,但不管它是一种有趣的编码语言。
编辑:我还看到你要求替代方法,所以这里有一些。您总是可以使用 Output( 或 Text( 命令分别绘制到主屏幕/图形屏幕,但这需要您编写一个完整的菜单程序。这样做的一个小优点是您可以执行以下操作:
5->A
Output(1,1,A
在您喜欢的任何位置,而不必将整个混乱转换为字符串。如果数字是单独的,它会显示为“数字”,但问题在于您尝试将其与字符串合并。(如字符串“YOU HAVE”)所以即使有一个菜单,你也可以这样做:
5->A
Menu("SELECT AN OPTION",A,1)
但这并没有太大帮助,因为没有描述价值是什么。
如果您有 TI-84+ CE,您可以使用toString()命令,然后连接您的字符串,如下所示:
5->A
toString(A->Str1
Menu("SELECT AN OPTION","YOU HAVE "+Str1,1