vb:关于随机数与randomize的几个问题
3个回答
展开全部
这是一个较复杂的数学问题:我记得看到过相关介绍,具体不记得是哪里了。
你可以搜一搜关键字为“产生随机数的算法”的相关内容。大致原理如下:
在计算机程序设计语言中,都有定义了产生随机数的函数,程序员只要调用该函数,就可以产生随机数。数学中,函数需要有一个(或多个)自变量,那么产生随机数的函数,也需要一个自变量。
下面解释vb的rnd函数与randomize函数的作用与关系:
rnd函数需要一个自变量(也叫做产生随机数的种子),来产生一个随机数。但是,我们在使用rnd函数的时候,并没有给过它什么种子数?这就与randomize函数有关了:
1,当使用rnd函数之前,如果没有使用randomize函数,那么,系统就以某一个固定的数值作为rnd函数的种子,从而产生第1个随机数,接下来第2次呢,就以第1次产生的随机数作为种子,来产生第2个随机数,第3次呢,就以第2次产生的随机数作为种子,来产生第3个随机数,....。一直按这个样方法产生一系列随机数,所以,在不使用randomize函数的情况下,每次使用rnd函数产生的随机数序列是相同的。
2,当使用rnd函数之前,如果使用了randomize函数,那么randomize函数会产生一个随机数,然后,当第1次使用rnd函数产生随机数的时候,系统会把由randomize函数产生的随机数给rnd函数作为第1次的种子。
3,randomize函数的使用格式:
randomize
[参数]
其中参数,是一个数字,用来作为randomize函数产生随机数的种子。如果,每次用相同的参数,作为randomize的种子,那么,结果还是一样,得到的序列是相同的。
例如:
randomize
1
for
i
=
1
to
100
print
rnd
next
i
但是,randomize函数的格式中,参数是可选的,当不带参数的时候,系统会将计算机的时钟(具体不知道使用时钟的什么数据)作为randomize函数的种子,这样以来,有于计算机时钟是在变化的,特别是它的变化周期比较长,这样,就可以产生不同序列的随机数了。
例如:
randomize
for
i
=
1
to
100
print
rnd
next
i
大概的原理就是这样,有不当之处请指正。
记得以前学c语言还是数据结构的书上,专门介绍如何编写产生随机数的函数。
你可以搜一搜关键字为“产生随机数的算法”的相关内容。大致原理如下:
在计算机程序设计语言中,都有定义了产生随机数的函数,程序员只要调用该函数,就可以产生随机数。数学中,函数需要有一个(或多个)自变量,那么产生随机数的函数,也需要一个自变量。
下面解释vb的rnd函数与randomize函数的作用与关系:
rnd函数需要一个自变量(也叫做产生随机数的种子),来产生一个随机数。但是,我们在使用rnd函数的时候,并没有给过它什么种子数?这就与randomize函数有关了:
1,当使用rnd函数之前,如果没有使用randomize函数,那么,系统就以某一个固定的数值作为rnd函数的种子,从而产生第1个随机数,接下来第2次呢,就以第1次产生的随机数作为种子,来产生第2个随机数,第3次呢,就以第2次产生的随机数作为种子,来产生第3个随机数,....。一直按这个样方法产生一系列随机数,所以,在不使用randomize函数的情况下,每次使用rnd函数产生的随机数序列是相同的。
2,当使用rnd函数之前,如果使用了randomize函数,那么randomize函数会产生一个随机数,然后,当第1次使用rnd函数产生随机数的时候,系统会把由randomize函数产生的随机数给rnd函数作为第1次的种子。
3,randomize函数的使用格式:
randomize
[参数]
其中参数,是一个数字,用来作为randomize函数产生随机数的种子。如果,每次用相同的参数,作为randomize的种子,那么,结果还是一样,得到的序列是相同的。
例如:
randomize
1
for
i
=
1
to
100
rnd
next
i
但是,randomize函数的格式中,参数是可选的,当不带参数的时候,系统会将计算机的时钟(具体不知道使用时钟的什么数据)作为randomize函数的种子,这样以来,有于计算机时钟是在变化的,特别是它的变化周期比较长,这样,就可以产生不同序列的随机数了。
例如:
randomize
for
i
=
1
to
100
rnd
next
i
大概的原理就是这样,有不当之处请指正。
记得以前学c语言还是数据结构的书上,专门介绍如何编写产生随机数的函数。
展开全部
1.
Randomize
Timer和Time从表意来看都是正确的。因为Timer和Time都可作为数值而用作随即种子
然而从逻辑来说Time显然是不行的
因为Randomize的参数是数值型,如果传Time的话会自动取小时作为种子。
假设现在是21时,那么在这1个小时内Randomize
Time最后都是Randomize
21。也就是在每1小时内生成的随机数序列都是一样的。这显然不能符合“初始化随即种子”的目的。
2.是的。
3.是的。(省略
序列中的下一个随机数。)
4.不。
如果不初始化,假设我们第一次运行程序执行
rnd*10
rnd*10
rnd*10
rnd*10
rnd*10
rnd*10
输出的是0,4,5,1,3,2
那么我们第二次运行程序,同样是执行这6条,还是返回0,4,5,1,3,2
而初始化随即种子以后就不一样了。
是的。初始化1次即可。
初始化随机数可不可以只打前面的randomize
?:
可以,不填写默认按Randomize
timer处理。
Randomize
Timer和Time从表意来看都是正确的。因为Timer和Time都可作为数值而用作随即种子
然而从逻辑来说Time显然是不行的
因为Randomize的参数是数值型,如果传Time的话会自动取小时作为种子。
假设现在是21时,那么在这1个小时内Randomize
Time最后都是Randomize
21。也就是在每1小时内生成的随机数序列都是一样的。这显然不能符合“初始化随即种子”的目的。
2.是的。
3.是的。(省略
序列中的下一个随机数。)
4.不。
如果不初始化,假设我们第一次运行程序执行
rnd*10
rnd*10
rnd*10
rnd*10
rnd*10
rnd*10
输出的是0,4,5,1,3,2
那么我们第二次运行程序,同样是执行这6条,还是返回0,4,5,1,3,2
而初始化随即种子以后就不一样了。
是的。初始化1次即可。
初始化随机数可不可以只打前面的randomize
?:
可以,不填写默认按Randomize
timer处理。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、Randomize
Timer
,msdn里说的是这个,我用程序调试,两个都没提示错误
2、3:
Rnd[(number)]
number
的值决定了
Rnd
生成随机数的方式。
number
小于
0
每次都使用
number
作为随机数种子得到的相同结果。
number
大于
0
序列中的下一个随机数。
number
等于
0
最近生成的数。
number
省略
序列中的下一个随机数。
说明
Rnd
函数返回小于
1
但大于或等于
0
的值。
4、Randomize
初始化rnd
当你循环重复调用rnd时,如果不进行Randomize
初始化,那产生的随机就不会变化。例如,在按钮事件里,调用a=rnd
,每次点击按钮得到的a可能都是一样的。
Timer
,msdn里说的是这个,我用程序调试,两个都没提示错误
2、3:
Rnd[(number)]
number
的值决定了
Rnd
生成随机数的方式。
number
小于
0
每次都使用
number
作为随机数种子得到的相同结果。
number
大于
0
序列中的下一个随机数。
number
等于
0
最近生成的数。
number
省略
序列中的下一个随机数。
说明
Rnd
函数返回小于
1
但大于或等于
0
的值。
4、Randomize
初始化rnd
当你循环重复调用rnd时,如果不进行Randomize
初始化,那产生的随机就不会变化。例如,在按钮事件里,调用a=rnd
,每次点击按钮得到的a可能都是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询