Jeg skal nu bruge en kode der kan sortere disse tal således, at hvis iTal(3) har den højeste værdi får iTalSorter(3) værdien 1. Hvis iTal(5) er det næsthøjeste (eller samme værdi) får iTalSorter(5) værdien 2 osv.
Hvis man f.eks. fortsætter med eksemplet fra før skal iTalSorter(1 to 6) se såden ud:
For iLoop = 1 To 6 Debug.Print iTal(iLoop), iTalSorter(iLoop) Next
End Sub
Private Sub Sorter()
Dim iTalUdvalgt(1 To 6) As Integer Dim iTemp As Integer, iLoop As Integer, jLoop As Integer
For iLoop = 1 To 6 iTalSorter(iLoop) = iTal(iLoop) Next
For iLoop = 1 To 5 For jLoop = iLoop + 1 To 6 If iTalSorter(iLoop) < iTalSorter(jLoop) Then iTemp = iTalSorter(iLoop) iTalSorter(iLoop) = iTalSorter(jLoop) iTalSorter(jLoop) = iTemp End If Next Next
For iLoop = 1 To 6 iTemp = iTalSorter(iLoop) For jLoop = 1 To 6 If iTal(jLoop) = iTemp And iTalUdvalgt(jLoop) = 0 Then iTalUdvalgt(jLoop) = iLoop Exit For End If Next Next
For iLoop = 1 To 6 iTalSorter(iLoop) = iTalUdvalgt(iLoop) Next
Jeg er imponeret. Det virker simpelthen perfekt. Jeg har svært ved at overskue det, når der er for-next løkker inden i for-next løkker. vil du ikke kort forklarer hvad der sker i de 2 store for-next løkker (de 2 i midten).
Det virker som om du er utrolig dygtig til dette her så jeg har lige et andet spørgsmål:
Lad os antage at vi også har et array der hedder: Dim iTal2(1 to 6) As Integer
Når f.eks iTal(3) og iTal(4) har den samme værdi, som også er den højeste. Så er det iTalSorter(3) der får værdien 1 og iTalSorter(4) der får værdien 2.
Kan man lave det sådan at hvis to iTal variabler har den samme værdi, skal der tages højde for hvilken iTal2 værdi der er den højeste, når iTalSorter skal bestemmes
Du HAR sikret dig de 50 point. Men hvis du kan løse det overstående får du 20 point mere. Hvis du ikke gider (jeg kunne forestille mig at, koden ville blive rimelig kompliceret) eller ikke kan, skal du bare sige til, så får du straks de 50 point. På forhånd tak
Det at have 2 for-next løkker inden i hinanden er ikke så svært, man skal blot huske at den inderste køres igennem for hver gang en ydre kører...
For A=1 to 3 For B=A+1 to 4 Print A, B Next Next
Vil give dette: (hvor A er første tal og B det andet) 1 2 1 3 1 4 2 3 2 4 3 4
Det er også dette jeg udnytter, når jeg laver min sortering (den første \"store\" blok) For hvert af de 5 første (jeg behøver ikke den 6\'e, den bliver allivevel mindst til sidst) elementer i dit array, gennemløber jeg resten, for at se om der skulle være en større, hvis det er tilfældet, så byttes de om, og sammenligningen fortsætter.
I den anden store blok, løber jeg hvert af vores sorterede tal igennem, og for hvert af dem løber jeg gennem vores oprindelige tal for at finde det første, som ikke allerede er udvalgt. Dette tal bliver så udvalgt med nummeret for placeringen i vores sorterede array. Disse udvælgelser lægges til sidst ind i iTalSorter() og er således resultatet.
Med hensyn til et 2.array\'s indblanding så er det en større omgang, som jeg desværre ikke lige kan overskue...
MEN du kunne jo prøve at forestille dig at samle iTal() og iTal2() til et komma-tal, og derefter at køre sorteringen igennem...
For iLoop = 1 To 6 Debug.Print iTal(iLoop), iTal2(iLoop), iTalSorter(iLoop) Next
End Sub
Private Sub Sorter()
Dim iTalDecimal(1 To 6, 1 To 2) As Single, iDeci As Single Dim iTalUdvalgt(1 To 6) As Integer Dim iLoop As Integer, jLoop As Integer
For iLoop = 1 To 6 For jLoop = 1 To 2 iTalDecimal(iLoop, jLoop) = iTal(iLoop) + iTal2(iLoop) / 100 Next Next
For iLoop = 1 To 5 For jLoop = iLoop + 1 To 6 If iTalDecimal(iLoop, 1) < iTalDecimal(jLoop, 1) Then iDeci = iTalDecimal(iLoop, 1) iTalDecimal(iLoop, 1) = iTalDecimal(jLoop, 1) iTalDecimal(jLoop, 1) = iDeci End If Next Next
For iLoop = 1 To 6 For jLoop = 1 To 6 If iTalDecimal(jLoop, 2) = iTalDecimal(iLoop, 1) And iTalUdvalgt(jLoop) = 0 Then iTalUdvalgt(jLoop) = iLoop Exit For End If Next Next
For iLoop = 1 To 6 iTalSorter(iLoop) = iTalUdvalgt(iLoop) Next
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.