高手们帮忙把这段C++改写成VBS,谢谢了

anxieealug 2017-10-01 01:58:01
请问各位大牛,如何将这段C++改写成VBS呢?我需要用VBS执行srand()函数和rand(),并将结果以msgbox输出结果,高手们帮帮忙,谢谢了~~

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>

int main()
{
int i;
srand((unsigned)time(NULL));
for (i=0; i<10; i++)
{
cout<<rand()<<"/t";
}
cout<<endl;
return 0;
}
...全文
1200 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-10-10
  • 打赏
  • 举报
回复
真不知道你老是在纠结 Randomize干什么…… 你要是真有必要,可以自己写 Randomize过程、Rnd()函数,替代VBA运行库中的这两个。
舉杯邀明月 2017-10-10
  • 打赏
  • 举报
回复
1. Randomize是“过程(Sub)”,不是“函数(Function)”,因此它没有返回值。   它的作用是“给你做某事”,并且因为它“一定会成功完成的”,因此它用不着返回结果、状态。 2. 即使是“函数”,它也是返回“函数结果”而不是返回参数值!   当然,一些函数功能“正是需要把参数值作为函数值返回”的除外:比如象VarPtr()、StrPtr()之类的、     或者VB6中写个函数用于“返回标准模块中某过程/函数的地址(入口地址)”的等等。
anxieealug 2017-10-09
  • 打赏
  • 举报
回复
感谢chen0813兄的解答~~ 那如果想获取Randomize的值可以获取吗?用msgbox显示Randomize调用的参数,代码怎么写呢?直接msgbox Randomize提示运动错误
anxieealug 2017-10-06
  • 打赏
  • 举报
回复
感谢chen8013兄的不吝赐教
舉杯邀明月 2017-10-06
  • 打赏
  • 举报
回复
引用 9 楼 anxieealug 的回复:
[quote=引用 7 楼 Chen8013 的回复:] [quote=引用 6 楼 anxieealug 的回复:] 上个贴子里代码好像写错了,如果要产生0到99999的随机数,代码应该是这样写吧? Dim i Call Randomize For i = 1 To 10 MsgBox "第" & i & "个随机数:" & int(99999 * rnd()), 64,"随机数" Next
已经给你说了 Rnd()的返回值是[0, 1),你要想得到0到99999的随机数值, 当然应该是这个啊: Int(100000 * Rnd()) 刚才突然想起,VBS中的变量都是Variant类型的,   如果要结果是“整数”,我在4楼说的那个“简单写法”是不能用的(我在VB6代码中经常用那样的写法)。 随机序列初始化过程 Randomize的参数,要求是“任何有效的数值表达式”,   你直接用“时间”作为参数,是不合法的,会引起运行时错误。 如果你要用“时间”作为参数,需要转换一下: CSng( CDate("16:00")) 比如: Call Randomize(CSng( CDate("16:00"))) 或者这样写: Randomize CSng(CDate("16:00"))[/quote] chen0813兄,已结贴给分,再请教点问题 如果要在CDate中加入日期,比如今天是2017.10.06,想加入这个日期,在代码中这样写: Dim i Call Randomize (CSng( CDate("2017/10/06 16:00"))) For i = 1 To 1 MsgBox "第" & i & "个随机数:" & int(100000 * rnd()), 64,"随机数" Next 运行后返回了一个数值,但是当我把时间改成2017/10/06 16:10时,返回的数值却没有变化,这是为啥呢?是日期格式写错了吗? 直接用Randomize (),每次运行返回的数值都不一样,想知道Randomize()是怎么获取数值的,如果当下的时间是2017.10.06 14:30,那么Randomize()获取的数值又是多少呢? 如果想知道,当时间到达是2017.10.06 14:35时,则Randomize()在这个时间获取的数值是多少,应该怎么用代码实现呢?[/quote] 注意“数据精度”问题啊! 你把“日期”也加入其中: CSng( CDate("2017/10/06 16:00"))的值是43014.67,CSng( CDate("2017/10/06 16:10"))的值也是43014.67,   这样初始化后的随机数序列,能有变化吗!!! 给你说了不传参数时,它以“当前时间”作为随机数种子,   调用Randomize()时,这个参数每次总会有差别的,它的序列自然就不会相同。   出现“两次调用,种子值相同”的机率,概率是几乎为0的,   这比你“只买一注彩票,就‘自信满满的要中500万大奖’”的机率还低很多很多倍!!!! (理论上为 1除以2^32,实际上还受“时机”的直接影响,造成的了更低得很多的“事实机率”) 它具体怎么“取数据”,你管那么多干吗!   也许是系统时钟的时、分、秒、毫秒微秒等组成;   也可能是操作系统启动之后的“时钟计数器”取低4字节作为参数,谁知道呢!!! 你如果真想知道,反汇编MSVBVM60.dll来看看吧 …………
anxieealug 2017-10-06
  • 打赏
  • 举报
回复
引用 7 楼 Chen8013 的回复:
[quote=引用 6 楼 anxieealug 的回复:] 上个贴子里代码好像写错了,如果要产生0到99999的随机数,代码应该是这样写吧? Dim i Call Randomize For i = 1 To 10 MsgBox "第" & i & "个随机数:" & int(99999 * rnd()), 64,"随机数" Next
已经给你说了 Rnd()的返回值是[0, 1),你要想得到0到99999的随机数值, 当然应该是这个啊: Int(100000 * Rnd()) 刚才突然想起,VBS中的变量都是Variant类型的,   如果要结果是“整数”,我在4楼说的那个“简单写法”是不能用的(我在VB6代码中经常用那样的写法)。 随机序列初始化过程 Randomize的参数,要求是“任何有效的数值表达式”,   你直接用“时间”作为参数,是不合法的,会引起运行时错误。 如果你要用“时间”作为参数,需要转换一下: CSng( CDate("16:00")) 比如: Call Randomize(CSng( CDate("16:00"))) 或者这样写: Randomize CSng(CDate("16:00"))[/quote] chen0813兄,已结贴给分,再请教点问题 如果要在CDate中加入日期,比如今天是2017.10.06,想加入这个日期,在代码中这样写: Dim i Call Randomize (CSng( CDate("2017/10/06 16:00"))) For i = 1 To 1 MsgBox "第" & i & "个随机数:" & int(100000 * rnd()), 64,"随机数" Next 运行后返回了一个数值,但是当我把时间改成2017/10/06 16:10时,返回的数值却没有变化,这是为啥呢?是日期格式写错了吗? 直接用Randomize (),每次运行返回的数值都不一样,想知道Randomize()是怎么获取数值的,如果当下的时间是2017.10.06 14:30,那么Randomize()获取的数值又是多少呢? 如果想知道,当时间到达是2017.10.06 14:35时,则Randomize()在这个时间获取的数值是多少,应该怎么用代码实现呢?
舉杯邀明月 2017-10-05
  • 打赏
  • 举报
回复
“64”的作用,是给消息框指定一个图标。   0表示不用图标,你给定16、32、48、64,可以看到消息框中有4种不同的图标。 调用Randomize时,如果不指定参数,默认就是以系统当前时间作为随机数种子的。   VBS、C 的标准随机数函数,都是用的伪随机数算法。当然它们的具体实现细节应该是有差异的。   VB/VBS中的Rnd()函数,返回值是单精度值,范围是[0, 1) ;而C的 rand()函数返回值是16bit的整数,值域是0到32767。 如果你要产生“5位整数”,那就是10000到99999。用这个算式就可以达到目的:
u = 10000 + int(90000 * rnd())
不过,要想“简单点”写,用这个算式也是可以的:
u = 10000 + 89999 *rnd()
anxieealug 2017-10-05
  • 打赏
  • 举报
回复
上个贴子里代码好像写错了,如果要产生0到99999的随机数,代码应该是这样写吧? Dim i Call Randomize For i = 1 To 10 MsgBox "第" & i & "个随机数:" & int(99999 * rnd()), 64,"随机数" Next
anxieealug 2017-10-05
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
“64”的作用,是给消息框指定一个图标。   0表示不用图标,你给定16、32、48、64,可以看到消息框中有4种不同的图标。 调用Randomize时,如果不指定参数,默认就是以系统当前时间作为随机数种子的。   VBS、C 的标准随机数函数,都是用的伪随机数算法。当然它们的具体实现细节应该是有差异的。   VB/VBS中的Rnd()函数,返回值是单精度值,范围是[0, 1) ;而C的 rand()函数返回值是16bit的整数,值域是0到32767。 如果你要产生“5位整数”,那就是10000到99999。用这个算式就可以达到目的:
u = 10000 + int(90000 * rnd())
不过,要想“简单点”写,用这个算式也是可以的:
u = 10000 + 89999 *rnd()
感谢高手的耐心解答,如果要产生0到99999的随机数,代码是不是这样写: Dim i Call Randomize For i = 1 To 10 MsgBox "第" & i & "个随机数:" & int(90000 * rnd()), 64,"随机数" Next 还有就是Randomize函数的问题我表述得可能不是很清楚,其实我想问的是,如果当前系统时间是15:00,但是我却想用16:00作为随机数种子,那代码应该怎么写呢?先谢过~~
舉杯邀明月 2017-10-05
  • 打赏
  • 举报
回复
引用 6 楼 anxieealug 的回复:
上个贴子里代码好像写错了,如果要产生0到99999的随机数,代码应该是这样写吧? Dim i Call Randomize For i = 1 To 10 MsgBox "第" & i & "个随机数:" & int(99999 * rnd()), 64,"随机数" Next
已经给你说了 Rnd()的返回值是[0, 1),你要想得到0到99999的随机数值, 当然应该是这个啊: Int(100000 * Rnd()) 刚才突然想起,VBS中的变量都是Variant类型的,   如果要结果是“整数”,我在4楼说的那个“简单写法”是不能用的(我在VB6代码中经常用那样的写法)。 随机序列初始化过程 Randomize的参数,要求是“任何有效的数值表达式”,   你直接用“时间”作为参数,是不合法的,会引起运行时错误。 如果你要用“时间”作为参数,需要转换一下: CSng( CDate("16:00")) 比如: Call Randomize(CSng( CDate("16:00"))) 或者这样写: Randomize CSng(CDate("16:00"))
anxieealug 2017-10-03
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
这种太简单了。
' VBS 代码:
Dim i
Call Randomize
For i = 1 To 10
   MsgBox "第" & i & "个随机数:" & Rnd(), 64,"随机数"
Next
感谢两位高手的解答,想再请教下Chen8013兄 MsgBox "第" & i & "个随机数:" & Rnd(), 64,"随机数" 那个64的作用是什么呢?还有如果我想生成5位数整数的随机数,这段代码该怎么写呢? Randomize调用的参数,如果当前系统时间是15:00,那我想把15:00的参数写进Randomize里面应该怎么写呢? 谢谢啦~~结贴后给分,麻烦你罗~~
脆皮大雪糕 2017-10-02
  • 打赏
  • 举报
回复
楼上正解,没啥好补充的了,看看能否蹭到分
舉杯邀明月 2017-10-01
  • 打赏
  • 举报
回复
这种太简单了。
' VBS 代码:
Dim i
Call Randomize
For i = 1 To 10
   MsgBox "第" & i & "个随机数:" & Rnd(), 64,"随机数"
Next

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧