Avatar billede Søren Bech Morsing Praktikant
18. september 2006 - 19:19 Der er 13 kommentarer og
1 løsning

Tilfældige numre, men medtag kun én gang

Jeg skal bruge 80 tilfældige tal mellem 1-99

og har lavet dette:

tallet = 0
Dim udtrukketTal(99)

Function traektal()
    Randomize(timer)
    tallet = Int((storsteTal * Rnd) + mindsteTal)
End Function

For i=1 TO 80)
  traektal()
  do While (udtrukketTal(tallet) <> True)
    traektal()
    exit do
  Loop
  udtrukketTal(tallet) = True
next

' så forventede jeg egentligt at have 80 tal i mit udtrukketTal array hvor værdien er True.

Men den går ikke, hvad gør jeg galt?
Avatar billede nielle Nybegynder
18. september 2006 - 19:25 #1
Du må kun kalde Randomize en gang ialt. Den skal altså ud af traektal.
Avatar billede arne_v Ekspert
18. september 2006 - 19:28 #2
hvis den "exit do" goer hvad jeg tror at den goer saa er jeg skeptisk overfor den
Avatar billede nielle Nybegynder
18. september 2006 - 19:30 #3
Det er ihvertfald den som gør at Do-While løkken aldrig køre mere end en gang.
Avatar billede Søren Bech Morsing Praktikant
18. september 2006 - 19:34 #4
arne_v så kan jeg bruge en: while -> wend i stedet?
- det var mit første forsøg, og så altså uden Exit Do
Avatar billede nielle Nybegynder
18. september 2006 - 19:35 #5
tallet = 0
Dim udtrukketTal(99)
Randomize(timer)

Function traektal()
    tallet = Int((storsteTal * Rnd) + mindsteTal)
End Function

For i=1 To 80
    traektal()
    Do While udtrukketTal(tallet) <> True
        traektal()
    Loop
    udtrukketTal(tallet) = True
Next
Avatar billede nielle Nybegynder
18. september 2006 - 19:35 #6
Ahem,

tallet = 0
Dim udtrukketTal(99)
Randomize(timer)

Function traektal()
    tallet = Int((storsteTal * Rnd) + mindsteTal)
End Function

For i=1 To 80
    traektal()
    Do While udtrukketTal(tallet) = True
        traektal()
    Loop
    udtrukketTal(tallet) = True
Next
Avatar billede nielle Nybegynder
18. september 2006 - 19:36 #7
Det er nok også en god ide at initialisere arrayet til at indeholde False-værdier.
Avatar billede nielle Nybegynder
18. september 2006 - 19:39 #8
Der findes dog en hurtigere måde at blande 99 tal:

Dim talArr(99)
Randomize(timer)

For i=1 To 99
    talArr(i) = i
Next

For i=1 To 99
    i2 = Int((99 * Rnd) + 1)

    swap = talArr(i)
    talArr(i) = talArr(i2)
    talArr(i2) = swap
Next
Avatar billede ernstsauer Nybegynder
18. september 2006 - 19:40 #9
Du skal være opmærksom på at der i rækken af tal kan være 2 eller flere ens tal, så derfor generer flere tale end du skal bruge og gem dem i en fil. denne kalder du ind igen, og gemmen 1. tal(f.ex 8) i et dimA som dit første tal(i dimA(1)), samtidig sætter du et andet dimarealB af hvor du sætte tal 8 som brugt. Når du er nået til dit dimA(80) er fundet har du 80 forskellige tal i den fundne rækkefølge i dimA
Avatar billede kabbak Professor
18. september 2006 - 19:50 #10
Public Sub udtræk()
    Dim talArr()
    Randomize (Timer)

    For i = 0 To 80
        ReDim Preserve talArr(i)
Forfra:
        talArr(i) = Int((99 * Rnd) + 1)
        For t = 0 To i - 1
            If talArr(t) = talArr(i) Then GoTo Forfra
        Next

    Next
End Sub

værdierne er i talArr
Avatar billede Søren Bech Morsing Praktikant
18. september 2006 - 20:39 #11
nielle, du har ændret mening fra <> til =

Er det ikke <> der er korrekt, den skal jo køre så længe den er forskellige fra true
Avatar billede nielle Nybegynder
18. september 2006 - 21:08 #12
Nej, jeg holder fast i at det skal være "=".

Din loop skal fortsætte så længe det tal traektal() har fundet allerede er brugt tidligere. Hvis tallet er brugt tidligere, er udtrukketTal(tallet) sandt. Og så skal der trækkes et nyt, indtil at udtrukketTal(tallet) ikke mere er sandt.
Avatar billede Søren Bech Morsing Praktikant
19. september 2006 - 08:04 #13
svar bare nielle, det blev til:

Randomize (Timer)
Dim udtrukketTal(99) As Boolean
Dim tallet as Integer

Function traektal()
    traektal = Int((storsteTal * Rnd) + mindsteTal)
End Function

For j = 1 To 80
  tallet = traektal()
  While (udtrukketTal(tallet) = True)
    ' træk et nyt tal ind til array udtrukketTal ikke er True
    tallet = traektal()
  Wend
 
  udtrukketTal(tallet) = True
  ' gør et eller andet med tallene bagefter via array udtrukketTal
Next
Avatar billede nielle Nybegynder
20. september 2006 - 18:24 #14
Svar :^)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester