passende for-schleife

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von chicco84.

    passende for-schleife

    hallo zusammen,

    ich muss aus einer messreihe die 1024 werte beinhaltet, die durchschnittliche größe des parameters berechnen, wobei der datensatz so eingeteilt ist, dass er in 32 größenklassen eingeteilt ist und das ganze je 32mal... also insg. 1024 werte. da die reihe folgendermaßen aufgebaut ist:

    größe1, größe2, größe3,...größe32, größe1, größe2,...

    bräuchte ich also den wert des index(0), dann index(32), usw... für jede größe muss ich die werte aufsummieren und mit einem gegebenen wert zur größenklasse multiplizieren.
    leider kann ich es nur, wenn ich jeder größe eine eigene variable zuteile (was ich aber sehr mühsam finde) mit dieser for-schleife:

    VB.NET-Quellcode

    1. For i = 0 To 1023 Step 32
    2. groesse0(i) = CInt(spalte(i))
    3. Next

    wobei ich i um jeweils 1 erhöhe, bis 31...
    kann man das nicht verkürzen und in einer variable zusammenfassen? für die multiplikationsfaktoren hab ich eine eigene variable in der diese zusammengefasst sind.
    wäre super, wenn ihr ideen hättet 8o
    Das sieht mir sehr nach einem Histogramm aus, was Dir da vorschwebt.
    Beispiel: In einem 1000x1000 Bild mit 256 Graustufen willst Du die Anzahl der Häufigkeit der Helligkeit 0, der Helligkeit 1, ... 255 ermitteln.

    Annahme: der Wertebereich geht von 0 ... 65535.
    Du musst also Deine Einzelwerte auf einen Zielbereich (0 ... 31) reduzieren. Dazu musst Du die Werte "shiften":

    VB.NET-Quellcode

    1. Wert = (Wert AND &hF8) Div &h800


    Die entsprechenden Werte (hier &hF8 und &h800) musst Du deinen konkreten Zahlen anpassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Keine Ahnung ob ich verstanden habe was Du möchtest, aber vielleicht kannst Du hier ja etwas herausziehen:

    VB.NET-Quellcode

    1. ' Messwert Array
    2. Dim Messwert(1023) As Integer
    3. ' Array der Faktoren
    4. Dim Faktor() As Integer = {hier sollte die Liste der Faktoren stehen}
    5. ' berechnen der gewichteten Summe
    6. Dim Summe As Double = 0
    7. For i As Integer = 0 To 1023
    8. Summe += Messwert(i) * Faktor(i Mod 32)
    9. Next i
    10. ' Mittelwert
    11. Dim Mittelwert As Double = Summe / 1024
    super, danke!

    genau das hab ich gebraucht :)

    EDIT:

    nur für mein verständnis... das Mod 32 bewirkt, dass es immer nur jeden 32. wert nimmt?

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

    chicco84 schrieb:

    das Mod 32 bewirkt, dass es immer nur jeden 32. wert nimmt?

    Die mathematische Funktion heisst eigentlich Modulo und bewirkt in diesem Fall hier dass er nach dem 32.Wert wieder bei 0 anfängt. Mathematisch definiert ist es als Rest der Integerdivision in diesem Fall durch 32.

    Also ist z.B:

    Quellcode

    1. 5 mod 32 = 5
    2. 31 mod 32 = 31
    3. 32 mod 32 = 0
    4. 35 mod 32 = 3