Hej, Hej Katarina, Som jag tolkar hennes orginalkod så skall samma siffra inte komma upp två gånger...Slumpgenerator i VB
Jag behöver lite hjälp med att skapa en slumpgenerator som skall slumpa fram talen 1 till 8, 20 ggr.
Talen vill jag sedan spara undan i en array eller liknande.
Hur kan jag ändra koden så att jag kan spara undan flera värden?
Sub RandomNumberGenerator()
Dim NumberOfQuestion As Integer
NumberOfQuestion = 8
Const intLowest As Integer = 1
Dim RanGenFlag As Boolean
Dim arrRandom(1 To 8) As Integer
Randomize
arrRandom(1) = Int((NumberOfQuestion + 1 - intLowest) * Rnd) + intLowest
For i = 2 To NumberOfQuestion
Do
RanGenFlag = False
arrRandom(i) = Int((NumberOfQuestion + 1 - intLowest) * Rnd) + intLowest
For j = 1 To i - 1
If arrRandom(j) = arrRandom(i) Then RanGenFlag = True
Next j
Loop Until RanGenFlag = False
Next i
For i = 1 To NumberOfQuestion
Range("A1").Offset(i, 0).Value = arrRandom(i)
Next i
End Sub
Tacksam för hjälp
/KatarinaSv: Slumpgenerator i VB
En enklare variant för att slumpa ett antal fasta värden (jämför med en kortlek) är att först skapa arrayen med värdena i valfri ordning, t ex 1 till 8. Därefter slumpar man fram två tal mellan 1 och 8 och byter plats på dessa element, och återupprepar proceduren lämpligt antal gånger. Jag skulle tro det räcker med typ 10 ggr för att få en tillräckligt bra slumpmässighet i det hela.
<code>
' Obs! Pseudokod : Variabeldeklarationer saknas och Rnd(8)
' måste bytas mot kod som slumpar heltal mellan 1 och 8
Randomize Timer
Dim values(1 to 8) as integer
For i=1 to 8
values(i)=i
Next i
For i=1 to 10
k=Rnd(8)
l=Rnd(8)
' byt plats på element k och l
temp=values(k)
values(k)=values(l)
values(l)=temp
Next i
</code>
Vill du återupprepa proceduren 20 ggr så får du skapa en två dimensionell array:
<code>
' Obs! Pseudokod
Randomize Timer
Dim values(1 to 20,1 to 8) as integer
For n=1 to 20
For i=1 to 8
values(n,i)=i
Next i
For i=1 to 10
k=Rnd(8)
l=Rnd(8)
' byt plats på element k och l
temp=values(n,k)
values(n,k)=values(n,l)
values(n,l)=temp
Next i
Next n
</code>
Sist men inte minst bör du använda Randomize Timer i vb6 om jag minns rätt...då skapas ett slumptalsfrö utifrån datorklockan.Sv:Slumpgenerator i VB