Avatar billede klausbobby Nybegynder
03. september 2002 - 13:06 Der er 24 kommentarer og
1 løsning

Funktion i Visual Basic

Hej Eksperten.dk

Jeg har et lille programeringsproblem, som jeg meget gerne vil have hjælp til. Jeg ønsker at programere en funktion, som har nogle søgekriterier i sig.

Jeg vil give dig et eksempel på mit problem:


X/Y    230    220    200    180    160      140     

90    13649  13612  13465  13122  12639    11440     

80    13084  13007  12853  12492  11983    10615     

70    11816  11756  11411  11240  10524    9101     

60    9633    9581    9397    9101    8506 7264     

50    7269    7268    7123    6890    6382 5470     

40    4903    4838    4778    4584    4286 3583     

30    3088    3065    2987    2833    2531 2043     

20    1419    1405    1359    1275    1113  862     

10    468    455      448    402      341  290     

0      213    213      197    183      161  134   

Her har du mine dataer.

X= {90,80,70,60.....0}

Y= {230,220,200...140}

Z= {alle værdier fra 13649 til 134}

Nu ville jeg gerne, at jeg kunne søge på en Z værdi, og computeren retunere den højeste X værdi og den Y værdi, der passer til X værdien, til mig. MEN X må ALDRIG overstige 90 eller gå under 0, og Y må SKAL være mellem 140 og 230.

Hvis jeg f.eks. skriver Z= 13649, så skulle computeren gerne retunere 90, 230 til mig, da det jo er den højeste X værdi ved det givne Z punkt. Dette er simpelt, da jeg jo kender X og Y værdierne til 13649, men hvis jeg f.eks skriver 10000, kender jeg jo ikke den højeste X værdi og Y værdien til denne. Y værdien skal ikke være den højeste - den skal bare være mellem 140 og 230.

Jeg har en søge-interpolerings-funktion i Excel, men når jeg bruger den, finder computeren værdier, der ligger over 90 og 230 og det er det jeg søger efter. En funktion, der kan begrænse søgningen, så den ikke overskrider mine grænser.

Hvis jeg f.eks indtaster 10000 i den funktion jeg har giver den mig: X= 75 og Y=141. Dette er godtnok, men indtaster jeg 12000 giver den mig: X=99 og Y=141 - dette er jo over min grænse.

Samtidig skal programmet også kunne finde ud af
følgende:

Når ovenstående program/funktion har fundet den højeste X værdi (mellem 0 og 90) til et givet punkt Z punkt og den Y værdi, der passer til x værdien (mellem 140 og 230), skal programmet nu kigge i nedenstående tabel:

Y/X
      0    10  20  30  40  50    60  70  80  90

230  11,5 9,3  9,4  9,9 11,1 12,0  9,3  8,8  8,0  7,6

220  13,3 8,1 10,0  9,7 11,1 11,6 10,0  8,7  8,6  8,8

200  10,3 13,9 9,9 11,0 12,4 12,3 10,4  8,8  9,3  9,8

180  12,7 9,2 12,5 12,8 13,1 13,5 12,5 11,4  9,9 11,2

160  20,9 48,9 17,7 16,7 18,1 15,9 17,9 15,4 14,0 14,2

140  37,5 38,6 27,2 26,2 29,0 24,7 25,0 25,6 27,4 33,8

X= {90,80,70,60.....0}
Y= {230,220,200...140}
Z= {resten af værdierne)

Her må de fundne X/Y værdier ALDRIG overskride 23. 

DVS:   
Hvis jeg f.eks i funktion 1 indtaster følgende Z værdi (jeg tager én jeg kender punkterne til):  13649
       
Skal programmet retunere følgende X værdi til mig: 90                       
Og følgende Y værdi: 230                                   
Derefter skal programmet gå ind i tabllen nederst og checke 90, 230. I dette tilfælde er det 7,6, så den kan godt bruges.
Havde Z punktet i den nederste tabel været f.eks 25,3 ved et givet X/Y punkt, kunne den ikke bruges.
I tilfælde hvor det nederste Z punkt er over 23, skal programmet selv finde den højeste X værdi (i øverste tabel), der ligger på eller under 23, så den hele tiden finder den næsthøjeste X værdi, indtil den passer i nederste tabel, hvor X/Y punktet skal være under 23.

Dette ser lidt indviklet ud, men jeg håber meget I kan hjælpe mig (kan I ikke hjælpe mig, håber jeg I har en adresse, man kan henvende sig til sig for yderligere hjælp).

Venlig hilsen
Morten Bro Pedersen
Avatar billede martin_moth Mester
03. september 2002 - 13:19 #1
Meget mystisk - jeg _havde_ kommenteret spørgsmålet, lukket min browser, kikket ind senere, og min kommentar var der stadig - men nu er den væk??? Hvorfor???

Nå - Det jeg skrev var noget i retning af:

Jeg var gået i gang med at svare på dit sp., men så at de samme Z-værdier optræder flere steder i tabellen - altså kan man ikke umiddelbart interpolere. Således forstår jeg ikke helt reglerne for hvordan man skal aflæse X,Y-værdier ud fra en vilkårlig Z-værdi...?

Så før jeg kan svare, så fortæl mig lige følgende:

Input Z=10000, hvad er output (X=?, Y=?)?
Input Z=9101, hvad er output (X=?, Y=?)

Bemærk, at tallet 9101 optræder 2 gange i tabellen.
Avatar billede martin_moth Mester
03. september 2002 - 13:21 #2
PS - jeg har set at du har lukket spørgsmålet og oprettet et magen til igen - ???

Ligemeget - bare svar på ovenstående, så vi kan komme videre ;o))
Avatar billede klausbobby Nybegynder
03. september 2002 - 13:28 #3
Ved 10000 får jeg følgende X=75 og Y=141

Ved 9101 får jeg X = 62 og Y=163
Avatar billede klausbobby Nybegynder
03. september 2002 - 13:29 #4
Jeg kan sende det program jeg bruger til at interpolere til dig....
Avatar billede klausbobby Nybegynder
03. september 2002 - 13:32 #5
Umiddelbart kan jeg ikke se om du har svaret (jeg er ny på Eksperten, så jeg ikke helt klar over hvordan det virker....:O))
Men hvis du har svaret kan du så ikke sende en mail til mig på mop@skov.dk og fortælle hvordan jeg ser dine svar?????
Avatar billede martin_moth Mester
03. september 2002 - 13:46 #6
Bare rolig - jeg har ikke svaret endnu. Når jeg svarer, vil der stå "svar" i stedet for kommentar - og er du glad for svaret, acceptere du og giver mig og eventuelle andre point...

Tilbage til dit spørgsmål:
Hvordan hulen kan du få Z=9101 til at give X=62 og Z=163?

Der er 2 steder man kan aflæse Z=9101 i din tabel - den ene aflæsning giver X,Y = 60,180, den anden giver X,Y=70,140 - hvordan får du det til 62,163?

Jeg kan absolut heller ikke gennemskue hvordan du får de angivne værdier for Z=10000?

Du bliver lige nødt til at forklare lidt bedre, hvad det er du gør for at få de resultater - og dermed forklare hvordan programmet skal virke :o)
Avatar billede klausbobby Nybegynder
03. september 2002 - 13:52 #7
Det ville være nemmere hvis jeg sendte det program jeg bruger til dig, så kan du selv se det.
Avatar billede klausbobby Nybegynder
03. september 2002 - 13:56 #8
Jeg kan godt se, at mit program giver en for lille X værdi, men det er jo også et interpoleringsprgram jeg har....
Avatar billede martin_moth Mester
03. september 2002 - 13:56 #9
OK - så send det da til martin_moth@yahoo.com.

Jeg kunne bare godt tænke mig, at du fortalte hvordan du når frem til de resultater, da de virker mystiske i mine øjne?
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:02 #10
Programmet skal virke således:

Jeg indtaster en tilfældig Z værdi (mellem 134 og 13649 selvfølgelig), så skal programmet de X/Y punkter, hvor X er højest (mellem 0 og 90 og 140 og 230).

Samtidig må Z værdien i tabel 2 ikke overstige 23. Z værdien i tabel 2 finder jeg ved det X,Y punkt jeg fandt ovenfor. Er Z værdien over 23 i tabel2, skal programmet nu finde en mindre X værdi i tabel 1, så den til sidst kommer til at passe med 23 (eller under)
Avatar billede martin_moth Mester
03. september 2002 - 14:13 #11
Se - det er den her sætning jeg ikke fatter:

"Jeg indtaster en tilfældig Z værdi (mellem 134 og 13649 selvfølgelig), så skal programmet de X/Y punkter, hvor X er højest (mellem 0 og 90 og 140 og 230)"

Hvis jeg nu indtaster Z=9500 - hvad så? Hvor er "X så højest"?

Der findes en række (med X=60), hvori der er en værdi større og mindre end den valgte Z

MEN der findes også en anden række (med X=70), hvor der er 2 Z-værdier der ligger hhv. over og under den ønskede Z-værdi.

Hvordan er reglerne - skal du have X-værdien for den række, hvori den indtastede Z-værdi befinder sig - og hvis der er 2 rækker, skal den så tage den med den højeste X-værdi? Skal der interpoleres - og i så fald mellem hvilke værdier?

PS - dit regneark indeholder referencer til andre ark, så det har jeg droppet - du behøver ikke sende mig de andre, jeg skal bare forstå problemet, så skal jeg nok svare :o)
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:22 #12
Ved 9500 findes den største X værdi ved 72, 140
Avatar billede martin_moth Mester
03. september 2002 - 14:24 #13
Hvoddn det - vis mig lige beregningen der når frem til X=72?
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:26 #14
Hvis jeg f.eks. indtaster 10000, så findes den et sted mellem 70 og 80 (x) og 140 (y).

Men den findes også et sted mellem 60 og 70 (X) og et sted på hele rækken henad (Y)
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:27 #15
jeg kan ikke vise dig en beregning, for det er et program, der interpolere dwet for mig....
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:28 #16
Du kan da også se at 9500 ligger et sted mellem 9101 og 10615 ved Y=140...
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:35 #17
Er du stadig ikke helt med???
Avatar billede klausbobby Nybegynder
03. september 2002 - 14:50 #18
Er der mulighed for at vi kan skrives ved i morgen?? Jeg blvier nemlig nødt til at gå....

Hvis du har tid i morgen kan du skrive en mail til mig på mop@skov.dk når du kommer på nettet (før kl. 15.00) og så kan vi mødes herinde på Eksperten.dk og snakke videre om mit problem.
Avatar billede martin_moth Mester
03. september 2002 - 14:54 #19
Du må vide hvordan interpoleringen principielt skal foretages - ellers kan du ikke bede om hjælp til det.

Så med tabellen og Z=9500 som input må du kunne vise mig et regnestykke, der når frem til X,Y = 72,140 - det kan jeg så leve en generel funktion ud af :o)
Avatar billede bak Forsker
03. september 2002 - 20:07 #20
Martin-> nu er denne katagori jo ikke lige mit speciale, så jeg har lavet en excel-version, der arbejder som jeg kan læse spørgsmålet.
Hent den på http://tommy.bak.homepage.dk/tabel.xls  og se om du kan lave en funktion ud af det (der er ingen vba i den), men den kan måske hjælp lidt forståelsemæssigt
/BAK
Avatar billede martin_moth Mester
04. september 2002 - 09:56 #21
Bak -> dit regneark giver jo andre resultater end klausbobby siger det skal give? For Z=9500 skal resultatet være X,Y = 72,140!

Jeg kan stadig ikke se, hvordan man skal kunne interpolere noget som helst ud fra den tabel, idet de samme Z-værdier optræder flere steder med forskellige X,Y-værdier.

Z=9500 optræder - hvis man interpolere - både i rækken med X=60 og X=70 - hvordan vægtes den enkelte X-værdi, så man når frem til X=72, som jo er facit??? Det fatter jeg ikke!

Skal det forstås således, at man ignorere linien med X=60, derefter siger at X=70 for Z=9101 og X=80 for Z=13084 (ydergrænserne i rækken med X=70) - hvis man gør det, kan man interpolere sig frem til at X=70+(80-70)/(13084-9101)*(9500-9101)=71 (og ikke 72!!!)

Eller skal man udføre en interpolation som ovenstående for alle de rækker hvori den søgte Z findes, og derefter interpolere mellem resultaterne for hver række?

Uanset hvordan man vender og drejer det, kan jeg ikke se hvordan X nogensinde kan blive større end 71 for Z=9500???

Det er sikkert mig der er dum, eller også er det klausbobby der ikke rigtig ved hvordan han helt grundlæggende skal bruge tabellen - han har endnu ikke formået at forklare hvordan Z=9500 giver X,Y=72,140, og så længe den forklaring mangler kan jeg ikke hjælpe en tøddel:o(

Jeg tror jeg trækker mig fra dette sp, med mindre der kommer nyt i sagen ;o)
Avatar billede klausbobby Nybegynder
04. september 2002 - 10:16 #22
Som du kan se i den tabel Bak har opstillet, så finder funktionen altid den højeste X værdi, når Tabel 2 er 23 eller under.

Du har helt ret i, at ved Z= 9500 er den højeste X værdi 71, men så bliver tabel 2 25,5 (eller noget i den retning) og det går jo ikke...

Kan du se fidusen i det?
Avatar billede martin_moth Mester
04. september 2002 - 10:31 #23
Nej - uanset hvordan jeg vender og drejer det, kan jeg ikke få noget som helst til at hænge sammen - så længe jeg ikke får en helt overordnet generel regel for hvordan man skal aflæse den tabel, kan jeg ikke komme videre. Ingen kan fortælle mig hvordan Z=9500 giver X,Y=72,140 - så jeg giver op.

Held og lykke :o)
Avatar billede klausbobby Nybegynder
04. september 2002 - 10:38 #24
Det er sgu iorden!!

Tak for din indsats.

KlausB
Avatar billede klausbobby Nybegynder
04. september 2002 - 13:23 #25
Spørgsmål lukket.
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