Nächsten wert anzeigen

  • VB.NET

SSL ist deaktiviert! SSL für diese Sitzung aktivieren

    Nächsten wert anzeigen

    also, ich rechne etwas aus, und möchte nun je nach ergbnis aus nem array (oder rechnung, weiss noch nicht genau) den näächstmöglichen wert , bzw den wert mit der kleinsten differenz anzeigen lassen.
    wie würdet ihr das machen ?
    alle werte in ein array und dann vergleichen ?
    wäre aber sehr aufwändig sind ca 100 werte, man könnte die werte auch dynamisch errechnen lassen, wobei da auch die frage ist wie man das dann in code mit dem vergleichen umsetzen kann ,.
    so irgendwie ^^

    VB.NET-Quellcode

    1. Dim ar(100) As Integer '<-- Array mit den Werten
    2. Dim eingabewert As Integer '<-- Eingabewert
    3. Dim diff As Integer = 10000
    4. Dim number As Integer = 0
    5. For i = 0 To ar.Length - 1
    6. Dim tdiff As Integer = Math.Abs(eingabewert - ar(i))
    7. If tdiff < diff Then
    8. diff = tdiff
    9. number = i
    10. End If
    11. Next
    12. '<-- ar(number) ligt jetzt am nähsten dran -->

    Artentus schrieb:

    Also das Teil ist hart obfuskiert, der Deobfuskator erkennt die Chiffrierung nicht und mit manuell alle durchprobieren hats auch nicht geklappt. Ich jag das Teil gerade durch Anubis durch, dann sollte klar sein, was es macht.
    mh es geht ganz konkret um nen widerstandsrechner,
    ich berechne den Widerstand, das ergebnis ist ja nun kein genormter Wert, möchte dann den passenden genormeten Wert anzeigen lassen, der Code oben funktioniert, jedoch nicht richtig, es wird bei nem Widerstandswert von 2 , 1,5 ausgegeben obwohl 1,8 näher dran wäre,. :D

    hiermit berechne ich die Widerstandsreihen ,.

    VB.NET-Quellcode

    1. For i = 0 To 12 Step 1
    2. wert_e12 = (10 ^ i) ^ (1 / 12)
    3. wert_e12 = Math.Round(wert_e12, 1)
    4. wert_e12 = CDbl(wert_e12)
    5. tblog.AppendText(wert_e12 & ",")
    6. Next
    7. 'e24 reihe berechnen
    8. For i = 0 To 24 Step 1
    9. wert_e24 = (10 ^ i) ^ (1 / 24)
    10. wert_e24 = Math.Round(wert_e24, 1)
    11. wert_e24 = CDbl(wert_e24)
    12. tblog.AppendText(wert_e24 & ",")
    13. Next

    hab sie aber mal in ein array gestopft

    VB.NET-Quellcode

    1. Dim widwerte() As Double = {"1", "1,2", "1,5", "1,8", "2,2", "2,6", "3,2", "3,8", "4,6", "5,6", "6,8", "8,3", "10", "1",
    2. "1,1", "1,2", "1,3", "1,5", "1,6", "1,8", "2,2", "2,2", "4,2", "6,2", "9,3", "2,3",
    3. "5,3", "8,4", "2,4", "6,5", "1,5", "6,6", "2,6", "8,7", "5,8", "3,9", "1", "10"}
    Das Beispiel von Bluespide sollte schon funktioniern, allerdings ist die diff als integer deklriert und damit eine Ganzzahl. Double wäre da angebrachter, da auch deine Werte im array Double sind. Wenn du den Code entsprechend umstellst geht das auch...
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    stimmt, bin nurnoch am überlegen ob ich die werte dynamisch berechnen lasse oder alles ins array reinknalle,. (von hand, was mit arbeit verbunden wäre), denn doe for schleife zur berechnung hab ich schon,.
    irgendwie mus man das noch verbinden, also das der wert normal , dann wert*10, mal100 mal1000 ins array geschrieben wird,.

    VB.NET-Quellcode

    1. For i = 0 To 24 Step 1
    2. wert_e24 = (10 ^ i) ^ (1 / 24)
    3. wert_e24 = Math.Round(wert_e24, 1)
    4. wert_e24 = CDbl(wert_e24)
    5. tblog.AppendText(wert_e24 & ",")
    6. tblog.AppendText(wert_e24 * 10 & ",")
    7. tblog.AppendText(wert_e24 * 100 & ",")
    8. tblog.AppendText(wert_e24 * 1000 & ",")
    9. Next

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Bonze“ ()

    Hi!

    Mit LINQ ist das ein Einzeiler. Ich habe es hier über eine Liste gelöst. Die Funktion GetLower: Es werden aus der sortierten(!) Liste alle Werte rausgefiltert, die größer oder gleich dem Suchwert sind. Aus dieser neuen Liste wird der erste Wert rausgenommen ("Take 1")

    VB.NET-Quellcode

    1. Dim allewiderstaende As New List(Of Double)
    2. Private Sub frmWiderstand_load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. With allewiderstaende
    4. .AddRange({1, 1.2, 1.5, 1.8, 2.2, 2.6, 3.2, 3.8, 4.6, 5.6, 6.8, 8.3, 10, 1,
    5. 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.2, 2.2, 4.2, 6.2, 9.3, 2.3,
    6. 5.3, 8.4, 2.4, 6.5, 1.5, 6.6, 2.6, 8.7, 5.8, 3.9, 1, 10})
    7. End With
    8. End Sub
    9. Function getlower(ByVal suchwert As Double) As Double
    10. Return (From wert In allewiderstaende
    11. Order By wert
    12. Where suchwert <= wert
    13. Take 1
    14. Select wert)(0)
    15. End Function


    BTW: Wenn du in deiner Variante ein Array als Doubles definierst, dann weise bitte keine Strings zu, sondern... Doubles.

    LG, der_Kurt