Natsprinter>> Jeg ville nok placere randomize allerøverst i koden, så den ikke bliver kørt, hver gang findTal() køres. Min erfaring er nemlig, at gentagen brug af randomize i samme kode, vil resultere i en meget forudsigelig kode af en eller anden grund.
Det kan dog være, at det ikke gælder, når den er placeret i en funktion?
<% Set plade = Server.CreateObject("Scripting.Dictionary") Set plader = Server.CreateObject("Scripting.Dictionary") Randomize
'sorter et array Function BSort(arr) Dim i, j, x For i=0 To UBound(arr)-1 For j=i+1 To UBound(arr) If arr(i) > arr(j) Then x = arr(i) arr(i) = arr(j) arr(j) = x End If Next Next BSort = arr End Function
For i=1 To 1000 Do plade.RemoveAll
For j=0 To 14 Do num = Int(Rnd*99)+1 Loop While plade.Exists(num)
plade.Add num, 1 Next
strPlade = Join(BSort(plade.Keys), ",")
Loop While plader.Exists(strPlade)
plader.Add strPlade, i Next
For Each key In plader Response.Write "Plade " & plader(key) & ": " & key & "<br>" Next %>
<% Set pladecheck = Server.CreateObject("Scripting.Dictionary") Set plader = Server.CreateObject("Scripting.Dictionary")
Randomize
'sorter et array Function BSort(arr) Dim i, j, x For i=0 To UBound(arr)-1 For j=i+1 To UBound(arr) If arr(i) > arr(j) Then x = arr(i) arr(i) = arr(j) arr(j) = x End If Next Next BSort = arr End Function
For i=0 To Ubound(plade,1) Response.Write "<tr style=""width:50px"">"
For j=0 To Ubound(plade,2)
s = plade(i, j) If s = 0 Then s = " "
Response.Write "<td style=""width:35px;text-align:center"">" & s & "</td>" Next
Response.Write "</tr>" Next
Response.Write "</table>" End Sub
' træk ny plade Function NewPlade() Dim i, j Dim num, plade, column ReDim plade(2,8)
pladecheck.RemoveAll
' 3 rækker For i=0 To 2 ' 5 tal i hver række j = 0 Do num = Int(Rnd*90)+1 ' [1-90]
' er tallet allerede udtrukket? If Not pladecheck.Exists(num) Then
column = Int(num/10)
If num = 90 Then ' "gamle ole" skal ligge sammen med 80'erne column = column-1 End If
' kolonne optaget? If plade(i, column) = 0 Then plade(i, column) = num pladecheck.Add num, 1 j = j+1 End If End If Loop Until j=5 Next
NewPlade = plade End Function
' træk x plader For i=1 To 10 Do plade = NewPlade() Call ShowPlade(plade) strPlade = Join(BSort(pladecheck.Keys), ",") Loop While plader.Exists(strPlade) Next %>
' træk x plader For i=1 To 10 Do plade = NewPlade() Call ShowPlade(plade) strPlade = Join(BSort(pladecheck.Keys), ",") Loop While plader.Exists(strPlade)
plader.Add strPlade, plade ' **************** Next
Ja, den bestemmer antallet. ShowPlade er i øvrigt heller ikke placeret korrekt i den kodestump, den skal først kaldes, når pladen med sikkerhed er unik
Prøv med denne nye sub, og følgende ændring i NewPlade:
' sorter kolonne Sub SortColumn(ByRef plade, column) Dim i, j, x
For i=0 To 2 If plade(i, column) > 0 Then For j=i+1 To 2 If plade(j, column) > 0 And plade(i, column) > plade(j, column) Then x = plade(i, column) plade(i, column) = plade(j, column) plade(j, column) = x End If Next End If Next End Sub
' træk ny plade Function NewPlade() Dim i, j Dim num, plade, column ReDim plade(2,8)
pladecheck.RemoveAll
' 3 rækker For i=0 To 2 ' 5 tal i hver række j = 0 Do num = Int(Rnd*90)+1 ' [1-90]
' er tallet allerede udtrukket? If Not pladecheck.Exists(num) Then
column = Int(num/10)
If num = 90 Then ' "gamle ole" skal ligge sammen med 80'erne column = column-1 End If
' kolonne optaget? If plade(i, column) = 0 Then plade(i, column) = num pladecheck.Add num, 1 j = j+1 End If End If Loop Until j=5 Next
' sorter kolonner For i=0 To UBound(plade, 2) Call SortColumn(plade, i) Next
er du ikke en ven at lave hele koden som den skal være :-) tak
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.