Hej. För att komma åt dina labels via ett nummer så skapar du först en som heter lbl. Sen kopierar du upp den i valfritt antal och kommer ihåg att svara ja på frågan om ett index ska skapas. Då heter den första lbl(0), den andra lbl(1), den tredje lbl(2) osv. Som Thomas säger ovan Lär dig skriva på Pelle:s vis med kode och /kode i början och slutet. Om jag har förstått frågan rätt så vill du slumpa n antal unika nummer? Koden är inte direkt snygg, och inte speciellt funktionell eftersom man inte kan avsluta programmet. Tack ska ni ha för all hjälp. Har nu tagit fram en prototyp till ett litet utbildningsprogram för mitt jobb.Slumpgenerator
Efter ett lååångt uppehåll (5 år) från programering är jag ringrostigt på G igen. Skönt.
Mitt problem:
Jobbar med att bygga in en slumpgenerator i ett VB projekt. Jag vill att den ska slumpa 15 olika tal som bara ska representeras en gång var.
Någon som har något tips?
Vidare undrar jag:
Om jag namnger t.ex. några label till lbl1, lbl2, lbl3, lbl4, osv..., är det då möjligt att "ropa" på en specifik label genom att ange lbl och sedan en varabel med värdet, t.ex. 2. Alltså lbl(varabelvärdet).
/JoakimSv: Slumpgenerator
ThomasSv:Slumpgenerator
här kommer ett litet förslag
Dim i As Long, num As Long, n As Long
Dim LottoArray(35) As Long
' du kan byta namn på detta till vad du vill
'************************ slumpar nummer 7 - 12
i = 1
Do Until i > NumSize '7
Label14.Visible = True
num = Int(Rnd * 35) + 1'till vilket antal du vill
If LottoArray(num) = False Then
LottoArray(num) = True
DoEvents
i = i + 1
Sleep 1000
End If
Loop
n = 1
For i = 1 To 35
If LottoArray(i) <> 0 Then
Text2(n).Text = CStr(i)' byt ut text2 till ditt val
n = n + 1
End If
Next
denna rutinen använder jag och det sorterar dragna nummer i fallande ordning
danlennSv:Slumpgenerator
Det är så apptitligt att läsa när man använder Pelles
<code>
Dim i As Long, num As Long, n As Long
Dim LottoArray(35) As Long
' du kan byta namn på detta till vad du vill
'************************ slumpar nummer 7 - 12
i = 1
Do Until i > NumSize '7
Label14.Visible = True
num = Int(Rnd * 35) + 1'till vilket antal du vill
If LottoArray(num) = False Then
LottoArray(num) = True
DoEvents
i = i + 1
Sleep 1000
End If
Loop
n = 1
For i = 1 To 35
If LottoArray(i) <> 0 Then
Text2(n).Text = CStr(i)' byt ut text2 till ditt val
n = n + 1
End If
Next
End Sub
</code>
Fö var det snygg kod.Sv: Slumpgenerator
Om det är detta du vill finns en metod jag brukar använda.
Skapa en array där element i = i (Alltså typ {1,2,3,4,5} et.c.
Slumpa mellan 1 och intMax (I detta exempel 5).
Ersätt element[intMax] med slumptalet och element[slumptalet] med intMax. (Temporär variabel).
Dekrementera intMax.
Upprepa processen tills intMax = 1.
Jag började funera hur jag löste ett sånt problem du har förut och så började jag skriva.
Det är kul att komma på gamla metoder man en gång använt!
Koden är i C, men bör inte vara så svår att översätta. Om du vill kan säkert någon som orkar "översätta" den, annars gör jag det:
<code>
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i, slump[9] = {1,2,3,4,5,6,7,8,9};
for(i = 8; i > -1; i--)
{
int index, temp;
index = rand()%(i+1); //Detta är en slö-metod (men man slipper i alla fall divisionsspill)
temp = slump[i];
slump[i] = slump[index];
slump[index] = temp;
}
for(i=0; i < 9; i++)
printf("%d ",slump[i]);
getchar();
main();
}
</code>Sv:Slumpgenerator
Men det är ju bara att lägga in ett villkor så.
Någon kanske vill skriva om den...?
Men algoritmen verkar i alla fall vara stabil.Sv: Slumpgenerator
Public Function RandomNumbers(Min As Long, Max As Long, Count As Long) As Long()
Dim I As Long
Dim J As Long
Dim Numbers As Collection
ReDim Result(1 To Count) As Long
Set Numbers = New Collection
For I = Min To Max
Numbers.Add I
Next
For I = 1 To Count
J = Int(Rnd * Numbers.Count) + 1
Result(I) = Numbers.Item(J)
Numbers.Remove J
Next
RandomNumbers = Result
End Function
Sub TestRandom()
Dim I As Long
Dim Result() As Long
Result = RandomNumbers(1, 35, 9)
For I = 1 To 9
Debug.Print Result(I)
Next
End Sub
Sv: Slumpgenerator
Ta det lugnt i julstressen.