Avatar billede jonas_h Nybegynder
03. september 2003 - 20:59 Der er 17 kommentarer og
1 løsning

Blanding af et array

Ok, jeg skal lave et system som blander kort. Det er opbygget således, at der er 78 kort og hvert kort har fået tildelt et bestem nummer (1-78). Hvis jeg så har et array hvor:
  arrKort(0) = 1
  arrKort(1) = 2
  arrKort(2) = 3
Osv osv osv, op til nummer 78 er blevet tildelt. Hvordan får jeg så blandet numrene, så
  arrKort(0) = 2
  arrKort(1) = 3
  arrKort(3) = 1
osv osv, så numrene nu er blevet blandet? Der må selvfølgelig ikke være et tal som går igen to gange, så det skal der også holdes styr på!

Hvis I ikke forstår hvad jeg mener, så spørg endelig! Det er lidt svært at forklare...
Avatar billede nmh Nybegynder
03. september 2003 - 21:03 #1
Benyt et array til at holde styr på hvilke numreder er brugt.
Vælg et tilfældigt tal mellem 1 og 78 .
Giv det til det første kort og marker tallet som brugt.
Således fortsættes indtil alle tal er brugt.
Avatar billede jonas_h Nybegynder
03. september 2003 - 21:05 #2
Hmm, ja det var også sådan jeg havde tænkt mig at gøre det. Men ville gerne have koderne!
Avatar billede nmh Nybegynder
03. september 2003 - 21:06 #3
det skal du få. jeg går i gang
Avatar billede squashguy Nybegynder
03. september 2003 - 21:07 #4
For i=0 to 78-1
    a = Int(Rnd()*78)

    b = arrKort(i)
    arrKort(i) = arrKort(a)
    arrKort(a) = b
Next
Avatar billede nmh Nybegynder
03. september 2003 - 21:07 #5
dim brugte(78),antal
antal=0
while antal<79
  vælg et tal mellem 1 og 78
Avatar billede nmh Nybegynder
03. september 2003 - 21:12 #6
dim brugt(78),p,n
p=1
while p<79
  n=Round(Rnd*78)
  if not brugt(n) then
    kort(p)=n
    p=p+1
    brugt(n)=true
  end if
wend
Avatar billede nmh Nybegynder
03. september 2003 - 21:15 #7
det vil nok være en god ide, om dine kort er nummereret naturligt.
altså dim kort(78)
så kortene er kort(1), kort(2),...,kort(78)
det burde vist virke.
(Int(rnd*78) vil vist aldrig kunne give mere end 77.)
Avatar billede jonas_h Nybegynder
03. september 2003 - 21:21 #8
Hmm den forstod jeg ikke lige.. Kan du prøve at forklare det mere børnehaveagtigt? :)
Avatar billede squashguy Nybegynder
03. september 2003 - 21:21 #9
77 er også toppen af arrayen...
Avatar billede nmh Nybegynder
03. september 2003 - 21:23 #10
jeg har lige testet det som et VBscript og det virker. Det ser sådan ud:
dim brugt(78),p,n,kort(78)
p=1
while p<79
  n=Round(Rnd*78)
  if not brugt(n) then
    kort(p)=n
    p=p+1
    brugt(n)=true
  end if
wend

for i=1 to 78
  s=s & kort(i) & "'"
next
msgbox s
Avatar billede eagleeye Praktikant
03. september 2003 - 21:24 #11
Gør sådan her, en liste med alle kort som byttes i et array som man vælger en tilfældig ud fra og putter ind dit kort array:

<%
strKort = ",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25"
strKort = strKort & ",26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44"
strKort = strKort & ",45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63"
strKort = strKort & ",64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,"

randomize
for i = 0 to ubound(arrKort)
  str = mid(strKort,2,len(strKort)-2)
  arr = split(str,",")
  index = Int(rnd*(ubound(arr)+1))
  arrKort(i) = arr(index)
  strKort = Replace(strKort, "," & arr(index) & ",", ",")
next

for i = lbound(arrKort) to ubound(arrKort)
  Response.Write arrKort(i) & ":<br>"
next
Avatar billede nmh Nybegynder
03. september 2003 - 21:25 #12
ok, i min version er kortene nummereret fr 1 til 78
kort(0) findes ikke, men det er blot at ændre en smule.
Avatar billede squashguy Nybegynder
03. september 2003 - 21:26 #13
i min version er kortene også nummeret 1 til 78. kort 1 har plads 0 i arrayet.
Avatar billede nmh Nybegynder
03. september 2003 - 21:33 #14
Nu svarer kort-arrayet til dit oprindelige, og en lille rettelse er lavet.
dim brugt(78),p,n,kort(77)
p=0
while p<78
  n=Round(Rnd*77)
  if n=0 then n=1
  if not brugt(n) then
    kort(p)=n
    p=p+1
    brugt(n)=true
  end if
wend
Avatar billede nmh Nybegynder
03. september 2003 - 21:53 #15
Nu har du 3 forskellige løsninger.
Hvis jeg skulle vælge, ville jeg nok vælge squashguys løsning, som jeg synes er enkel og elegant.
Avatar billede nmh Nybegynder
15. september 2003 - 14:47 #16
Hvordan går det med projektet?
Avatar billede jonas_h Nybegynder
15. september 2003 - 16:17 #17
Ups, har helt glemt at give point!
Efter nogle ændringer i dit forslag, virkede det perfekt! Kunne ikke rigtigt bruge squashguys, men det kan du vel kun være glad for :)
Avatar billede nmh Nybegynder
15. september 2003 - 16:22 #18
jeg takker for point.
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