We help IT Professionals succeed at work.

We've partnered with Certified Experts, Carl Webster and Richard Faulkner, to bring you a podcast all about Citrix Workspace, moving to the cloud, and analytics & intelligence. Episode 2 coming soon!Listen Now

x

# random test

on
Medium Priority
182 Views
hi,

I need have some data for my test. this is something I want to do

(1) generate 5 random numbers ( for example 3,5,3,6,9) and then calculate their probability like (3/26, 5/26, 3/26, 6/26, 9/26) then

(2) write this probabilities to a text file. the program should allow me do more than one test, for example if I need 3 test data. The program will give 3 rows in a text file like below

0.1  0.2  0.3  0.2  0.2

0.4  0.1  0.2  0.1  0.2

0.1  0.1  0.1  0.4  0.3

this is something I just write, but I don't know how to continue, and how to write to a text file. Could someone help me about this? thanks in advance
-------------------------------------------------------------------
Dim c As Integer
Dim min_num As Integer
Dim max_num As Integer

min_num = 1
max_num = 10

Randomize
c= min_num + Int(Rnd() * (max_num - min_num))
------------------------------------------------------------------------

Comment
Watch Question

## View Solution Only

Commented:
Dim t as integer
Dim buf as string
Dim i as integer
Dim prob(0 to 4) as integer
Dim total as integer
Dim nums(0 to 4) as integer
Dim c As Integer
Dim min_num As Integer
Dim max_num As Integer

For t = 1 to X ' CHANGE X TO NUMBER OF TIMES YOU WANT TO DO RANDOMIZE TEST
min_num = 1
max_num = 10
For i = 1 to 5
Randomize
nums(i) = min_num + Int(Rnd() * (max_num - min_num))
total = total + nums(i)
next i

For i = 1 to 5
prob(i) = c / total
buf = buf & prob(i) + " "
next i
buf = buf & vbcrlf
next t

Open "C:\Result.txt" for binary as #1
Put#1, , buf
Close#1

Commented:
Change at the line:
For t = 1 to X -> X to number of times you want to do test. (lines you want to print)

in line:
Open "C:\Result.txt" -> change the filename to where you want to print result.

Just this :)

Commented:
hi, CSecurity

I have run time error in this line.
nums(i) = min_num + Int(Rnd() * (max_num - min_num))

thanks

Commented:
Sorry for the code.
Replace this line:

For i = 1 to 5
Randomize

To

For i = 0 to 4

:)

Commented:
Change For i = 1 to 5 to 0 to 4

It exists multiple times in code... Be careful

Commented:
thanks,

I change Change For i = 1 to 5 to 0 to 4, but below

but there is a "type mismatch" error problem.
buf = buf & prob(i) + " "   ----------------> type mismatch

-------------------code-------------------------------------
Dim t As Integer
Dim buf As String
Dim i As Integer
Dim prob(0 To 4) As Integer
Dim total As Integer
Dim nums(0 To 4) As Integer
Dim c As Integer
Dim min_num As Integer
Dim max_num As Integer

For t = 1 To 3 ' CHANGE X TO NUMBER OF TIMES YOU WANT TO DO RANDOMIZE TEST
min_num = 1
max_num = 10
For i = 0 To 4
Randomize
nums(i) = min_num + Int(Rnd() * (max_num - min_num))
total = total + nums(i)
Next i

For i = 0 To 4
prob(i) = c / total
buf = buf & prob(i) + " "
Next i
buf = buf & vbCrLf

Next t

Open "C:\Result.txt" For Binary As #1
Put #1, , buf
Close #1
----------------------------------------------------------------------

Commented:

I put "Str" in this line like,

buf = buf & Str(prob(i)) + " "

0  0  0  0  0
0  0  0  0  0
0  0  0  0  0

Commented:
because you stored the values into nums() rather thant prob(), the code you posted in no where was buf assigned any value? so ti will always be 0 xD

Commented:

so what should I do in order to have random probability matrix. the sum in each row is equal to 1
Commented:
I tested this code and works well:

Dim t As Integer
Dim buf As String
Dim i As Integer
Dim prob(0 To 4) As Double
Dim total As Integer
Dim nums(0 To 4) As Integer
Dim c As Integer
Dim min_num As Integer
Dim max_num As Integer
Dim tmp As String

For t = 1 To 3 ' CHANGE X TO NUMBER OF TIMES YOU WANT TO DO RANDOMIZE TEST
min_num = 1
max_num = 10
For i = 0 To 4
Randomize
nums(i) = min_num + Int(Rnd() * (max_num - min_num))
total = total + nums(i)
Next i

For i = 0 To 4
prob(i) = nums(i) / total
If Len(Str(prob(i))) > 3 Then prob(i) = Left(Str(prob(i)), 3)
buf = buf & prob(i) & " "
Next i
buf = buf & vbCrLf

Next t

Open "C:\Result.txt" For Binary As #1
Put #1, , buf
Close #1

Not the solution you were looking for? Getting a personalized solution is easy.

Commented:

thanks,

I take off the line
'If Len(Str(prob(i))) > 3 Then prob(i) = Left(Str(prob(i)), 3)

because I want to sum of each row equal to 1

Commented:
ok... as you like...

Commented:
hi, CSecurity

I posted another question in C language. if you can help me implement in VB or C it would be great. if you want me open another topic please let me know. I really want to finish this program

http://www.experts-exchange.com/Programming/Programming_Languages/C/Q_22049608.html

Commented:
You want in VB or C?

Commented:

either C or VB is ok.

but if you can give me both will be great!!  I will open the same topic in VB section.

Commented:
Open it in vb and give me link... I have not enough time for C now
##### Thanks for using Experts Exchange.

• View three pieces of content (articles, solutions, posts, and videos)
• Ask the experts questions (counted toward content limit)
• Customize your dashboard and profile