Avatar billede junior Nybegynder
25. april 2001 - 22:28 Der er 3 kommentarer og
1 løsning

Sortering og beregningsrutine.

Jeg sidder og arbejder på et program, der skal kunne tage en liste
af tal, og lave en beregning på hvordan det er smartest at fordele
værdierne.

Tallene har hver knyttet en idtekst til sig og ligger hulter til bul-
ter i et array i formatet

idtekst, tal

Det jeg søger er hjælp til en rutine, der kan beregne hvordan det vil
være smartest at fordele tallene i X antal nye arrays, således at når
man lægger tallene sammen i hvert enkelt af de nye arrays, er de for-
delt således at værdierne for hvert enkelt array kommer tættest på
et max man har forudbestemt....

Eks:

tal1, 10
tal2, 7
tal3, 1
tal4, 8
tal5, 12
tal6, 18
tal7, 24
tal8, 2
tal9, 5


Max værdi 25

Her kunne det så se f.eks. sådan her ud:

Array1:

tal7, 24
tal3, 1

Array2:

tal6, 18
tal9, 5
tal8, 2

Array3:
tal1, 10
tal2, 7
tal4, 8

Array4:
tal5, 12

Så at det eneste array der kommer spild i er array4

Det kunne også være at der er flere array der ikke kan nå op på MAX værdi,
men det skulle rutinen jo kunne beregne.

Jeg kan godt sortere et array således at jeg får tallene i rækkefølge efter
værdi, det har jeg noget kode til, men jeg mangler en ide til hvordan man
kan lave en rutine der kan beregne placeringen i de X antal array der nu
er nødvendig i forhold til MAX værdi.

På Forhånd Tak
Avatar billede xelor Nybegynder
26. april 2001 - 08:27 #1
Er der en grænse for hvor mange tal, der må være i hver array ? Eller er det kun vigtigt at summen af arrayet rammer grænseværdien ?
Er antallet af arrays vigtige ? Skal der være så få arrys som muligt eller....?
Avatar billede proaccess Nybegynder
26. april 2001 - 09:49 #2
Du kan prøve at lege med denne...

Jeg har tilføjet et gruppenummer til dit array!!!
Det er således ikke flere nye arrays, som returneres men derimod opdateres dit nummerfelt

[code start]

Public Type group
  text As String
  value As Long
  number As Long
End Type

Public Function testArrayG(maxVærdi As Long)

\' Dan arrayG
  Dim arrayG(9) As group, i As Integer, j As Integer
  For i = 1 To 9
    arrayG(i).text = \"Tal \" & i
    arrayG(i).value = Choose(i, 10, 7, 1, 8, 12, 18, 24, 2, 5)
    arrayG(i).number = 0
  Next

\' Sortér arrayG efter faldende værdi
  For i = 1 To 8
    For j = i + 1 To 9
      If arrayG(i).value < arrayG(j).value Then
        arrayG(0) = arrayG(i)
        arrayG(i) = arrayG(j)
        arrayG(j) = arrayG(0)
      End If
    Next
  Next
 
\' Angiv hvilket nummer hvert element tilhører
  Dim ma As Long, nu As Long
  While ma <> maxVærdi
    ma = maxVærdi
    nu = nu + 1
    For i = 1 To 9
      If arrayG(i).value <= ma And arrayG(i).number = 0 Then
        arrayG(i).number = nu
        ma = ma - arrayG(i).value
      End If
    Next
  Wend
 
\' udskriv arrayG
  For i = 1 To 9
    MsgBox arrayG(i).text & \": \" & arrayG(i).value & \" - \" & arrayG(i).number
  Next
 
End Function

[Code end]
Avatar billede junior Nybegynder
26. april 2001 - 12:13 #3
Xelor:

Det er vigtigt at summen kommer så tæt på som muligt, den behøver ikke nødvendigvis at ramme grænse værdien.

Der er ingen begrænsninger på hvor mange værdier der må være i et array, men der skal gerne være så få array som muligt.

Jeg ved godt at det er en svær opgave og den kan for så vidt godt løses på den måde som proaccess viser med at tage et mindre og mindre tal indtil at man når den pågældende værdi, men jeg har behov for en mere komplex rutine der kan tage højde for at en værdi måske kunne være udnyttet bedre i et andet array, ved f.eks. at bytte den ud med 2 mindre værdier osv...

Proaccess:

Jeg vil ikke helt afvise dit svar med det samme, for der er en god ide bag det.

Den funktion jeg søger skal kunne bruges på et array med X antal tal, således at jeg f.eks. kan læse værdier ind fra en tekst-fil eller en database.

Alle:

En anden ting i skal lægge mærke til er at der er 2 værdier i mit array, 1 for talværdien og en tekstværdi der er som en slags beskrivelse, teksten skal selvfølgelig følge tallene, men det er kun dem som er vigtige i sorteringen.
Avatar billede junior Nybegynder
03. maj 2001 - 15:15 #4
Eftersom der ikke er vist yderligere interesse selvom jeg er kommet med flere forklaringer, har jeg selv løst problemet ved at søge hjælp andetsteds.

Desværre.
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