cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 4902|回复: 13

[Nspire] TI-BASIC随机数如何去重?

[复制链接]
发表于 2014-7-14 17:52:00 | 显示全部楼层 |阅读模式
        刚入手ti-nspire cas 大黑机器。感觉其中编程还有一些意思,编写的程序小巧。我编写了一个随机数的问题,即随机产生1-10中的4个不同数字并显示出来,但编好运行后总是在显示结果中4个数字会有重复的。我在VB中用相同思路的代码编写就没有问题,所以现在我把代码写出来,敬请高手指出问题!谢谢!
Define aa()=
Prgm
for i,1,4
Lbl sta
a(i):=int(rand()*10)+1
If i>2 Then
   for j,1,i-1
       if a(i)=a(j) then
          Goto sta
       EndIf
     EndFor
EndIf
Disp a(i)
EndFor
EndGrgm
敬请高手指出问题所在,或者ti-basic本身就不支持这样的随机代码和数组吗?谢谢!
发表于 2014-7-14 20:30:42 | 显示全部楼层
我似乎没见过用圆括号表示下标的语言
而且随机数的话,直接用randint还是ranint我忘了,看看CATALOG怎么说
发表于 2014-7-14 23:17:28 来自手机 | 显示全部楼层
本帖最后由 超越说 于 2014-7-14 23:18 编辑

VB 和TI-BASIC 差距很大,就像TC上运行的程序常常不能在VC++上运行一样。
建议楼主先看置顶贴的编程入门教程。
发表于 2014-7-14 23:17:38 来自手机 | 显示全部楼层
VB 和TI-BASIC 差距很大,就像TC上运行的程序常常不能在VC++上运行一样。
建议楼主先看置顶贴的编程入门教程。

另外,楼主编程的目的,伟大的TI早已为我们想到了, 输入 randInt(1,10,4) 试试看吧
 楼主| 发表于 2014-7-15 06:23:05 | 显示全部楼层
超越说 发表于 2014-7-14 23:17
VB 和TI-BASIC 差距很大,就像TC上运行的程序常常不能在VC++上运行一样。
建议楼主先看置顶贴的编程入门教 ...

谢谢大神认真的回答!你说的randInt(1,10,4)我试了试,但运行的结果是从1-10中随机选4个数字,并不能保证不重复。我希望是从1—10中选出不重复的随机4个数字,如果有好的方法请不吝赐教哟!谢谢
 楼主| 发表于 2014-7-15 06:42:05 | 显示全部楼层
_14522 发表于 2014-7-14 20:30
我似乎没见过用圆括号表示下标的语言
而且随机数的话,直接用randint还是ranint我忘了,看看CATALOG怎么说

请问,应该怎么表示下标呢?我只是看vb是这么表示数组的。也许在TI-BASIC中这样做是错误的?谢谢指导!
发表于 2014-7-15 10:16:18 | 显示全部楼层
If i>2 Then改为If i>1 Then
在TI-basic中,数组是用方括号[]读取数组某项内容,而小括号()一半用于函数的参数输入
建议还是用方括号,这个才是数组正确表示方法
Define aa()=
Prgm
a:={}
for i,1,4
Lbl sta
a[i]:=int(rand()*10)+1
If i>1 Then
   for j,1,i-1
       if a[i]=a[j] then
          Goto sta
       EndIf
     EndFor
EndIf
EndFor
disp a
EndGrgm
发表于 2014-7-15 14:10:45 | 显示全部楼层
lazydog 发表于 2014-7-15 10:16
If i>2 Then改为If i>1 Then
在TI-basic中,数组是用方括号[]读取数组某项内容,而小括号()一半用于函数的 ...

效率高的方法应该是"洗牌"
利用随机数来做下标交换 数组顺序
发表于 2014-7-15 16:47:07 | 显示全部楼层
可以随机一堆数  然后检查前四个有没有重复 有就删去那一个 再检查 直到前四个没有重复 然后输出这四个数
 楼主| 发表于 2014-7-15 18:40:00 | 显示全部楼层
非常感谢各位大神不吝赐教,让我学习了很多,程序已经调试成功了!谢谢!
 楼主| 发表于 2014-7-15 18:40:53 | 显示全部楼层
lazydog 发表于 2014-7-15 10:16
If i>2 Then改为If i>1 Then
在TI-basic中,数组是用方括号[]读取数组某项内容,而小括号()一半用于函数的 ...

谢谢!你的建议非常重要,是我的错误,现在已经修改成功!万分感谢!
发表于 2014-7-17 10:42:50 | 显示全部楼层
敢不敢不要用goto?
NS具有完善的控制结构,9860那种goto的思维就不要带进来了
发表于 2014-7-17 20:54:31 | 显示全部楼层
超越说 发表于 2014-7-14 23:17
VB 和TI-BASIC 差距很大,就像TC上运行的程序常常不能在VC++上运行一样。
建议楼主先看置顶贴的编程入门教 ...

貌似TC是16位数吧,不过作为一个OIer一直用G++。。
 楼主| 发表于 2014-7-18 07:17:04 | 显示全部楼层
wtof1996 发表于 2014-7-17 10:42
敢不敢不要用goto?
NS具有完善的控制结构,9860那种goto的思维就不要带进来了

高手好!你的建议特别好,可是在下才疏学浅,知道goto应该少用或不用,但总是没有思路。如果有时间麻烦你看看我的另一个帖子http://www.cncalc.org/thread-10576-1-1.html,就是请教goto语句的,烦请指导!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-4-29 23:13 , Processed in 0.063555 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表