Avatar billede notebookonline Nybegynder
27. marts 2007 - 09:36 Der er 19 kommentarer og
1 løsning

Et lille regnestykke

Hej Eksperter, jeg skal have lavet et lille regnestykke og jeg ved simpelthen ikke hvor jeg skal starte.

Her er hvad det drejer sig om:
Jeg har 18 variabler kaldet hcp1 til hcp18
Alle var. er tildelt værdien 0 fra start.

Hvis jeg nu feks. har tallet 36 og vil fordele disse på var hcp1 til hcp18 i rækkefølgen flest til de høje (hcp16,17,18 osv), hvordan gøres dette?

Sort tale? prøv at se her.

hvis jeg feks. har tallet 36 er det jo til at regne ud at alle var. hcp1 til hcp18 skal tillægges 2, men hvis nu jeg har tallet 34 skal kun var. hcp3 til hcp18 have tildelt 2 og de sidste var. hcp1 og hcp2 skal kun have 1

hcp1 første priotet
hcp2 anden priotet
hcp3 trejde priotet
osv.

Er der en snu ekspert der ved hvordan dette skal gøres?
Avatar billede windcape Praktikant
27. marts 2007 - 09:48 #1
Jeg ville anbefale dig at bruge et array til at starte med.

Dim hpc;
hpc(0) = 0;
hpc(1) = 0;
hpc(2) = 0;

Mon ikke selv du har en ide til hvordan du vil løse det så, fordi det virker stadig som sort tale for mig.
Avatar billede notebookonline Nybegynder
27. marts 2007 - 09:52 #2
Lad os prøve på en anden måde:

Du har 18 kasser, kasserne er mærket 1-18
Du har 34 bolde, disse bolde skal lægges i kasserne EN AF GANGEN men flest i kasserne med laveste numre ,altså 2 bolde i del alle på nær nummer 1 og 2

Jeg burde være pædagog :-)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 09:53 #3
Forkert 2 i alle på nær nummer 17 og 18,  det er jo ikke let det her.
Avatar billede softspot Forsker
27. marts 2007 - 09:54 #4
Umiddelbart ville jeg mene der er en matematisk fremgangsmåde, så du kun behøver at gennemløbe array'et en gang. Noget med at dividere tallet og så lægge en evt. overskydende (ifht. den aktuelle hcp) værdi til...

val = 36
for i = 0 to 17
  hcp(17-i) = val div 18
  if val mod 18 > i then
    hcp(17-i) = hcp(17-i) + 1
  end if
next

men det kræver som windscape nævner at du benytter et array i stedet for enkeltstående variable - det er i det mindste den løsning som performer bedst.
Avatar billede softspot Forsker
27. marts 2007 - 10:02 #5
Nå ok, hvis det er de højste der skal have mindst, så skal den lige vendes lidt rundt... sådan her skulle jeg mene:

val = 36
for i = 0 to 17
  hcp(i) = val div 18
  if val mod 18 > i then
    hcp(i) = hcp(i) + 1
  end if
next
Avatar billede softspot Forsker
27. marts 2007 - 10:03 #6
og det kan da godt være du er nød til at ændre divisionen til:

val = 36
for i = 0 to 17
  hcp(i) = int(val / 18)
  if val mod 18 > i then
    hcp(i) = hcp(i) + 1
  end if
next
Avatar billede notebookonline Nybegynder
27. marts 2007 - 10:38 #7
Jeg kikker på det lidt senere.
Avatar billede notebookonline Nybegynder
27. marts 2007 - 11:56 #8
Det giver en fejl i denne linie :  hcp(i) = int(val / 18)
Type mismatch: 'hcp'
Avatar billede softspot Forsker
27. marts 2007 - 12:25 #9
ja, du skal lige huske at dimensionere det array som hedder hcp (placér den evt. før val = 36):

dim hcp(17)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 12:32 #10
Vil det sige jeg skal lave 18 linier som, dim hcp(1)dim hcp(2)  osv.?
Avatar billede notebookonline Nybegynder
27. marts 2007 - 12:32 #11
Nåhhh nej, glem lige det sidste :-)
Avatar billede softspot Forsker
27. marts 2007 - 12:34 #12
OK ;-)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 12:41 #13
Nu laver scriptet da ikke fejl, men jeg får tomme var.

response.write hcp1
response.write hcp2
response.write hcp3
response.write hcp4

Er alle tomme.
Avatar billede -mundi- Nybegynder
27. marts 2007 - 12:49 #14
dim arr(18)
dim tal:tal = 87
dim counter

for i = 1 to 18
    arr(i)=0
next

while tal>0
    counter = 1
    while counter<=18 and tal>0
        arr(counter)=arr(counter)+1
        tal=tal-1
        counter=counter+1
    wend
wend

for i = 1 to 18
    response.write "arr("&i&") = " &arr(i)&"<br>"
next





*******************************************************

response.write hcp1
response.write hcp2
response.write hcp3
response.write hcp4

skal være

response.write hcp(1)
response.write hcp(2)
response.write hcp(3)
response.write hcp(4)
Avatar billede notebookonline Nybegynder
27. marts 2007 - 12:55 #15
Jeps det virker, mange tak for hjælpen
Avatar billede notebookonline Nybegynder
27. marts 2007 - 12:55 #16
Svar for points
Avatar billede softspot Forsker
27. marts 2007 - 13:26 #17
Ja, du skal hente værdierne fra samme array som du putter data i, så referencen til hcp1 hedder hcp(0) (fordi arrays er 0-baserede).

Velbekomme :)
Avatar billede softspot Forsker
27. marts 2007 - 13:30 #18
altså

dim hcp(17)
val = 36
for i = 0 to 17
  hcp(i) = int(val / 18)
  if val mod 18 > i then
    hcp(i) = hcp(i) + 1
  end if
next

for i = 0 to 17
  response.write i & " = " & hcp(i) & "<br>"
next
Avatar billede notebookonline Nybegynder
27. marts 2007 - 13:36 #19
Tak for hjælpen.
Avatar billede softspot Forsker
16. maj 2007 - 18:17 #20
Tak 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