主题:关于RND函数的问题(请教)
wck1123
[专家分:0] 发布于 2006-12-21 17:51:00
本人是QB的初学者
刚刚学到RND函数,得知其的作用是随机产生一大于0小于1的数
但我只要一运行,结果的值却总是一个".7055475"
不管运行多少次,结果只这一个,很纳闷
谁知道怎么回事请告诉我一下,谢谢了
回复列表 (共22个回复)
沙发
wck1123 [专家分:0] 发布于 2006-12-21 18:05:00
难道是我用的QB版本的问题?
我在RDN之间加上了:randomize timer后 每次随机产生的数就不一样了
迷茫 谁告诉我一下,这是为什么
板凳
冷石_jasv [专家分:1570] 发布于 2006-12-22 09:20:00
这倒不一定.....你关了QB.再上QB运行你的程序...又会得到另一个不断重复的数.
所谓"伪随机" 嘿嘿..就是这么来的...所以老老实实在前面加:randomize timer 吧
3 楼
spd2321231 [专家分:20] 发布于 2006-12-22 21:47:00
RANDOMIZE TIMER的意思是让随机种子由于时间的变化而不断的变化,从而产生的随机数也不一样.电脑产生的随机数其实不是真正意义上的随机,产生随机数的过程就像求一个代数式的值一样,只不过无论代入几这个代数式的值一定会落到0--1之间,RANDOMIZE 可以理解为要代入的值。
4 楼
wck1123 [专家分:0] 发布于 2006-12-24 23:22:00
[quote]这倒不一定.....你关了QB.再上QB运行你的程序...又会得到另一个不断重复的数.
所谓"伪随机" 嘿嘿..就是这么来的...所以老老实实在前面加:randomize timer 吧[/quote]
不管关上多少次,再运行多少次,只要不加randomize,它的值就只会是那一个.
当然,加上for循环的话: for n=1 to 10
print rnd
这样的话,得出的10个数都不相同;但是每次运行的话,得出的10个数还是一样的
5 楼
wck1123 [专家分:0] 发布于 2006-12-24 23:26:00
[quote]RANDOMIZE TIMER的意思是让随机种子由于时间的变化而不断的变化,从而产生的随机数也不一样.电脑产生的随机数其实不是真正意义上的随机,产生随机数的过程就像求一个代数式的值一样,只不过无论代入几这个代数式的值一定会落到0--1之间,RANDOMIZE 可以理解为要代入的值。[/quote]
再请教下,randomize timer是属于什么? 语句定义符还是一个函数名?
6 楼
雪光风剑 [专家分:27190] 发布于 2006-12-25 17:22:00
randomize是系统函数:生成随机种子
系统的伪随机原则是给一个特定的程序点一个特定的随机种子,在此基础上生成一个伪随机数
所以所有相同位置的伪随机数都是一样的,而不同位置的伪随机数则是不同的
randomize是给全程序生成随机种子的,timer是系统值,是当前时间
如果你两天的同一时刻执行程序,得到的结果应该一样
7 楼
wck1123 [专家分:0] 发布于 2006-12-25 20:03:00
[quote]randomize是系统函数:生成随机种子
系统的伪随机原则是给一个特定的程序点一个特定的随机种子,在此基础上生成一个伪随机数
所以所有相同位置的伪随机数都是一样的,而不同位置的伪随机数则是不同的
randomize是给全程序生成随机种子的,timer是系统值,是当前时间
如果你两天的同一时刻执行程序,得到的结果应该一样[/quote]
基本上是明白了.
不知能否给个例子说明下"不同位置的伪随机数则是不同的"
8 楼
雪光风剑 [专家分:27190] 发布于 2006-12-25 20:17:00
[quote]不管关上多少次,再运行多少次,只要不加randomize,它的值就只会是那一个.
当然,加上for循环的话: for n=1 to 10
print rnd
这样的话,得出的10个数都不相同;但是每次运行的话,得出的10个数还是一样的
[/quote]
我是针对这个告诉你的
10个rnd在程序执行的过程中分别相当于在10个不同的位置执行了吧
这就是所谓“不同位置的伪随机数则是不同的”
9 楼
w1212q [专家分:660] 发布于 2006-12-31 16:55:00
'36选7
randomize timner
dim u(35),i
do
cls
t=""
for i=0 to 35
u(i)=0
next
j=0
while j<7
q=fix(rnd*35)
if u(q)=0 then
p$=str(q)+" "
print p$;
u(q)=1
j=j+1
end if
wend
w=fix(rnd*99+1)
d$=" "+str(w)+"%"
print d$
a$=input$(1)
if a$=chr$(27) then exit do
loop
10 楼
ld596888 [专家分:0] 发布于 2007-01-25 00:27:00
p$=str(q)+" "
d$=" "+str(w)+"%"
应该为
p$=str$(q)+" "
d$=" "+str$(w)+"%"
我来回复