Arrayproblem mit Werten

  • Moin-Moin.

    Ich hatte letztens ein Problem, das ich aber gelöscht habe, da nicht einmal BugFix (in meine er war es *fg*) nicht verstanden.

    Script:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aArray_1[5] = ['1','-1,157','-2,164','0.725','0,0001']
    Dim $aArray_2[5] = ['2','-1,101','-2,054','0.750','2,9574']
    Dim $aArray_3[5] = ['3','0,00','1,932','0.845','3,6974']
    Dim $aArray_4[5] = ['4','1,57','2,1','0.9','6,9721']
    Dim $aArray_5[5] = ['5','2,64','2,76','1.052','9,9347']
    Dim $aArray_6[5] = ['6','2,79','2,985','2.727','10,6427']
    Dim $aArray_7[5] = ['7','3,823','3,823','3.025','19,5413']
    Dim $aArray_8[5] = ['8','3,992','4,011','5.703','23,7471']
    Dim $aArray_9[5] = ['9','4,0219','5,23','5.755','29,2434']
    Dim $aArray_10[5] = ['10','4,3','6,4','7,025','33,7453']
    Dim $aArray_11[5] = ['11','4.7','6,82','8.921','39,3435']
    Dim $aArray_12[5] = ['12','5,62','7,9','9.237','45,325']
    Dim $aArray_13[5] = ['13','6,001','8,012','10.002','50,243']
    Dim $aArray_14[5] = ['14','6,247','11,098','10.724','63,769']
    Dim $aArray_15[5] = ['15','10,157','12,341','11.336','75,9124']

    [/autoit] [autoit][/autoit] [autoit]

    ; Ausgabe erfolgt später mit sieben Stellen hinterm Komma,
    $var1= '18,1264987' ; diese Zahl liegt zwischen $aArray_6[4] und $aArray_7[4] abgeglichen werden soll nach dem hintersten Wert des Arrays.

    [/autoit] [autoit][/autoit] [autoit]

    ; nächst kleinerer Wert von $var1, in diesem Fall $aArray_6[4]
    $nk = $aArray_6[4]

    [/autoit] [autoit][/autoit] [autoit]

    ; nächst kleinerer Wert von $var1, in diesem Fall $aArray_7[4]
    $ng = $aArray_7[4]

    [/autoit] [autoit][/autoit] [autoit]

    ; $aArray_?[0], in diesem Fall $aArray_6[0] wenn Array 1 (0,0001), dann Ausgabe "no"
    ; bezieht sich auf: $aArray_6[4]
    $nk_one = $aArray_6[0]

    [/autoit] [autoit][/autoit] [autoit]

    ; $aArray_?[2], in diesem Fall $aArray_6[2] wenn Array 15 (75,9124), dann Ausgabe "no"
    ; bezieht sich auf: $aArray_6[4]
    $nk_too = $aArray_6[2]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,'Werte zu var1', $nk & " - " & $ng & " - " & $nk_one & " - " & $nk_too)

    [/autoit]

    Ich habe, wie man lesen kann, 15 Arrays und 5 Var's..

    $var1 soll später berechnet werden.

    Die Var's $nk - $ng - $nk_one und $nk_too sollen eigentlich auch, abhängig von $var1 berechnet werden, aber genau hier ist mein Problem.

    Ich glaube das Script erklärt sich von selber mit dem kleinen Text den ich gerade geschrieben habe.

    Evtl. kann Mann oder Frau mir ja helfen?


    EDIT-1:
    Im präs. Script darauf hingewiesen, das $nk_one und $nk_too ist auf: $aArray_6[4]

    Und mir fällt gerade ein, was mache ich, wenn $var1 zum Beispiel genau einen Wert trifft? Okay, das sollte ich hin bekommen durch eine If/Else. Habe ich heute abend was zu tun bevor es wieder blutig wird (Neustes Buch von Kathrin S. gestern gekauft. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    2 Mal editiert, zuletzt von Alina (30. Oktober 2010 um 09:27) aus folgendem Grund: gelöst

  • Hi!


    Ich frage mich, was berechent werden soll??
    Größer kleiner kleiner wenn das dann das mmhh ...???

    Irgendwie aus den zusammenhang gerissen! :wacko:

    Für mich ist

    [autoit]

    ; nächst kleinerer Wert von $var1, in diesem Fall $aArray_7[4]

    [/autoit]


    nicht kleiner ??

    Mehr Info´s wehre schön!

    Lg kleiner

  • Ich versteh's so:
    - $var1 ist bekannt (wird irgendwo anders im Skript berechnet)
    - aus den Elementen der 15 Arrays soll der nächstkleinere Wert ($nk) zu $var1 bestimmt werden
    - das selbe für den nächstgrösseren Wert ($ng)

    $nk_one und $nk_too ($nk_two?) sollen dann die Werte des ersten und zweiten Elements des Arrays beinhalten, in der $nk ermittelt wurde. Mit der Bedingung, das $nk (oder $var1?) nicht 0,0001 bzw. 75,9124 ist.

  • Moin Alina,

    Du bist PowerUserin, deshalb frage ich nicht, warum die Werte nicht in einem 2D-Array liegen und schon beim Erstellen des/der Arrays in ein rechenfähiges Format überführt werden.

    Nehmen wir also die "ungünstigen" Umstände als gottgegeben an. Zielt das dann in die Richtung, die Du meinst?

    Spoiler anzeigen
    [autoit]

    Dim $aArray_1[5] = ['1','-1,157','-2,164','0.725','0,0001']
    Dim $aArray_2[5] = ['2','-1,101','-2,054','0.750','2,9574']
    Dim $aArray_3[5] = ['3','0,00','1,932','0.845','3,6974']
    Dim $aArray_4[5] = ['4','1,57','2,1','0.9','6,9721']
    Dim $aArray_5[5] = ['5','2,64','2,76','1.052','9,9347']
    Dim $aArray_6[5] = ['6','2,79','2,985','2.727','10,6427']
    Dim $aArray_7[5] = ['7','3,823','3,823','3.025','19,5413']
    Dim $aArray_8[5] = ['8','3,992','4,011','5.703','23,7471']
    Dim $aArray_9[5] = ['9','4,0219','5,23','5.755','29,2434']
    Dim $aArray_10[5] = ['10','4,3','6,4','7,025','33,7453']
    Dim $aArray_11[5] = ['11','4.7','6,82','8.921','39,3435']
    Dim $aArray_12[5] = ['12','5,62','7,9','9.237','45,325']
    Dim $aArray_13[5] = ['13','6,001','8,012','10.002','50,243']
    Dim $aArray_14[5] = ['14','6,247','11,098','10.724','63,769']
    Dim $aArray_15[5] = ['15','10,157','12,341','11.336','75,9124']

    [/autoit] [autoit][/autoit] [autoit]

    $var1= '18,1264987' ; Ausgabe erfolgt später mit sieben Stellen hinterm Komma
    $nk = 0
    $nk_one = "no"
    $nk_too = "no"
    $ng = 0 ; hier verschließt sich mir der Sinn

    [/autoit] [autoit][/autoit] [autoit]

    ; Suche die Arrayelemente mit dem nächstkleineren und dem nächstgrößeren Wert mit Index 4
    ; Voraussetzung ist, das die Arrays (wie im Beispiel) aufsteigende Werte mit Index 4 haben
    ; Grenzwerte werden beachtet wie ich das verstanden habe
    $num1 = Number(StringReplace($var1, ",", "."))
    If $num1 > Number(StringReplace($aArray_1[4], ",", ".")) And _ ; vielleicht auch >= ?
    $num1 < Number(StringReplace($aArray_15[4], ",", ".")) Then ; vielleicht auch <= ?
    For $i = 1 To 15
    $aTemp = Eval("aArray_" & $i)
    $num2 = Number(StringReplace($aTemp[4], ",", "."))
    $ng = $aTemp[4]
    ConsoleWrite($num1 & " - " & $num2 & @CRLF) ; Testausgabe
    Select
    Case $num2 > $num1
    $aTemp = Eval("aArray_" & ($i - 1))
    ExitLoop
    Case $num2 = $num1
    ExitLoop
    EndSelect
    Next
    $nk = $aTemp[4]
    $nk_one = $aTemp[0]
    $nk_too = $aTemp[2]
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,'Werte zu var1', $nk & " - " & $ng & " - " & $nk_one & " - " & $nk_too)

    [/autoit] [autoit][/autoit] [autoit]

    Exit

    [/autoit]
  • Moin-Moin Großvater.

    Die Daten sind vorgegeben und sehen so aus: '1','-1,157','-2,164','0.725','0,0001'. Leider.

    Deine Lsg. ist aber der Lsöungsweg. Ich sage Danke, auch wenn ich gerade folgende Erklärung noch verfaßt habe.
    Sorry für das schlechte Deutsch und das schlechte erklären, denn damit hatte ich dieses mal echt ein Problem.

    Vielen DANK und jetzt kann ich weiter machen.

    So wäre meine Erklärung gewesen, wenn Großvater nicht die Lösung gepostet hätte:

    Berechnugn von $var1:

    Input1 - Input2 = $var1

    Die beiden Input-Felder werden später noch eingebaut.

    $var1 ist nun berechnet und dann soll der Wert von $var1 gesucht werden in den hintersten werten der Arrays. In diesem Fall den ich im Script angegeben habe liegt $var1 (18,1264987) zwischen 10,6427 und 19,5413. Also ist 10,6427 der nächst kleinere Wert ($nk) und 19,5413 ($ng) der nächst höhere Wert.

    Jetzt gehe ich beim nächst kleineren Wert (in dem Beispiel: 10,6427) zum ersten Wert des Arrays betreffenden Arrays, also ganz nach links und finde dort den Wert 6 und bekomem so $nk_one.

    Den nächst $nk_too finde ich beim gleichen Array jedoch an der Position drei (im Beispiel: 2,985)

    Das sind die Werte die im Beispiel doch nur benötigt werden:
    Dim $aArray_6[5] = ['6','2,79','2,985','2.727','10,6427']
    Dim $aArray_7[5] = ['7','3,823','3,823','3.025','19,5413']

    Hier noch mal das ganze mit einem anderen var1-Wert:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Dim $aArray_1[5] = ['1','-1,157','-2,164','0.725','0,0001']
    Dim $aArray_2[5] = ['2','-1,101','-2,054','0.750','2,9574']
    Dim $aArray_3[5] = ['3','0,00','1,932','0.845','3,6974']
    Dim $aArray_4[5] = ['4','1,57','2,1','0.9','6,9721']
    Dim $aArray_5[5] = ['5','2,64','2,76','1.052','9,9347']
    Dim $aArray_6[5] = ['6','2,79','2,985','2.727','10,6427']
    Dim $aArray_7[5] = ['7','3,823','3,823','3.025','19,5413']
    Dim $aArray_8[5] = ['8','3,992','4,011','5.703','23,7471']
    Dim $aArray_9[5] = ['9','4,0219','5,23','5.755','29,2434']
    Dim $aArray_10[5] = ['10','4,3','6,4','7,025','33,7453']
    Dim $aArray_11[5] = ['11','4.7','6,82','8.921','39,3435']
    Dim $aArray_12[5] = ['12','5,62','7,9','9.237','45,325']
    Dim $aArray_13[5] = ['13','6,001','8,012','10.002','50,243']
    Dim $aArray_14[5] = ['14','6,247','11,098','10.724','63,769']
    Dim $aArray_15[5] = ['15','10,157','12,341','11.336','75,9124']

    [/autoit] [autoit][/autoit] [autoit]

    $var1= '39,9147625'
    $nk = $aArray_11[4]
    $ng = $aArray_12[4]
    $nk_one = $aArray_11[0]
    $nk_too = $aArray_11[2]

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,'Werte zu var1: '& $var1, $nk & " - " & $ng & " - " & $nk_one & " - " & $nk_too)

    [/autoit]

    Jedes der 15 Array's hat doch 5 Werte.
    $var1 soll beim fünften Werte der 15 Array schauen wo es zwischen paßt. 18,1264987 paßt zwischen 10,6427 und 19,5413.
    Somit ist 10,6427 auch gleich $nk und 19,5413 auch gleich $ng.

    Bis jetzt wurde $nk und $ng ermittelt.

    $nk_one ist der erste Wert vom ermittelten $nk (eigentlich muß man dann im Array wo man den $nk ermittelt hat nur den Wert-1 nehmen.

    $nk_too ist der dritte Wert vom ermittelten $nk (eigentlich muß man dann im Array wo man den $nk ermittelt hat nur den Wert-3 nehmen.

    Habe ich mich nun verständlicher ausgedrückt?

    Wenn man sich die MsgBox-Ausgabe anschaut und das bei beiden nun geposteten Beispielen sieht, dann sollte eigentlich mein Problem verständlicher sein.
    Leider weiß ich anders nicht das Problem zu beschrteiben.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    Einmal editiert, zuletzt von Alina (30. Oktober 2010 um 09:26)