Doppelte for-Schleife

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von p.ginczek.

    Doppelte for-Schleife

    Hallo zusammen,

    Ich bin ein blutiger Anfänger und habe ein Problem hoffentlich könnt ihr mir helfen.

    Ich möchte 2 for- Schleifen gleichzeitig und nicht nacheinander.

    Unten hab ich den Code den ich zurzeit habe, aber wie man sieht laufen die nicht gleichzeitig sondern die äußere einmal dann die komplette innere und dann erst wieder die äußere.
    Ich hoffe mein Problem ist zu verstehen.
    Danke im vorraus.

    Gruß Philipe


    VB.NET-Quellcode

    1. Dim H2 As Double
    2. For H2 = 0 To H Step (H / 50)
    3. Dim i1 As Integer
    4. For i1 = 0 To 50
    5. 'ListBox3.Items.Add(i1)
    6. v = Math.Sqrt((2 * g * H2) / (1 + (I / (M * R1 ^ 2))))
    7. E_pot = M * g * (H - H2)
    8. E_kin = 0.5 * M * (v ^ 2)
    9. w = Math.Sqrt(((2 * M * g * (H2)) / I) - ((M * (v ^ 2)) / I))
    10. E_rot = 0.5 * I * w ^ 2
    11. t = v / a
    12. Punkte(H2).X = Math.Round(t * 15) '* 15 '+ ((PB_Graph1.Width) / 2)
    13. Punkte(H2).Y = Math.Round(v * 15) '* 15 '+ ((PB_Graph1.Height) / 2)
    14. With ListView1.Items.Add(Math.Round((H - H2), 4))
    15. .SubItems.Add(Math.Round((v), 4))
    16. .SubItems.Add(Math.Round((E_pot), 4))
    17. .SubItems.Add(Math.Round((E_kin), 4))
    18. .SubItems.Add(Math.Round((E_rot), 4))
    19. .SubItems.Add(Math.Round((t), 4))
    20. End With
    21. Next
    22. Next H2
    Hi
    da wird es einige Komplikationen geben, insbesondere, da der von RushDen einfach mal so in den Raum geworfene Weg nicht ohne Nebenweg, der dir nicht gefallen wird, geht. Hier mal einiges, was mir auf den ersten Blick auffällt:
    1. Könntest du dein Vorhaben nicht wesentlich besser über ein datengebundenes (!) DataGridView lösen?
    2. Könntest du hier die Daten nicht vorweg in eine Klasse ablegen und die Berechnungen parallelisiert und synchronisiert durchführen und anschließend das DataGridView an die Daten binden? Für die Datenbindung gibt's ein paar Ressourcen hier im Tipps&Tricks-Bereich, einfach mal danach schauen.
    3. x^2 ist effizienter über x*x darstellbar

    Wenn dir das immer noch zu ineffizient ist, kannst du es ggf. auch auf der Grafikkarte rechnen?

    Gruß
    ~blaze~
    @p.ginczek Willkommen im Forum. :thumbup:
    Kannst Du das etwas motivieren?
    Für Parallel.For musst Du eine Prozedur schreiben, die als Input ausschließlich den Integer-Index der äußeren schleife bekommt.
    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!
    @RodFromGermany
    Achtung, es handelt sich um Double in der Schrittweite (und zwar auch, wenn H Integer o.Ä. ist). Abkürzend ließe sich übrigens einfach schreiben

    Visual Basic-Quellcode

    1. For H2 As Double = 0 To H Step (H/50)

    oder, glaube ich (verwende ich nie, da ich's als unübersichtlich empfinde)

    Visual Basic-Quellcode

    1. For H2 = 0 To H Step (H/50)

    (oder 0.0 statt 0? Ich weiß nicht genau, ob das sinnvoll implementiert wurde)

    Gruß
    ~blaze~

    ~blaze~ schrieb:

    Double in der Schrittweite
    Jou.
    For i = 0 To 50
    und
    H2 = i / 50
    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!

    p.ginczek schrieb:

    Ich möchte 2 for- Schleifen gleichzeitig und nicht nacheinander.
    sowas gibt es nicht.
    Entweder 2 Schleifen sind ineinander verschachtelt - wie bei deim Beispiel, oder die sind hintereinander.
    Genau genommen kannst du mit NebenThreads tatsächlich 2 gleichzeitige Schleifen creiern - aber ich kann mir nicht vorstellen, dass es das ist, was du willt.

    Erklär mal, was du damit eiglich erreichen willst.
    Danke für die vielen Antworten.
    Ich möchte mit dem Programm erreichen, dass verschiedene Werte in Abhängigkeit von der Höhe berechnet werden.
    Und dann in einer Listview ausgegeben werden.
    Dafür ist die äußere for-Schleife.
    Gleichzeit soll aber auch die PointF Array gefüllt werden mit den Momentanwerten. Dafür ist die innere for-Schleife.
    Ich könnte eigentlich diese Werte auch aus der Listview lesen aber das will ich eigentlich nicht.

    Zudem allem kommt das ich ein blutiger Anfänger bin.
    Hat sich erledigt hoffe ich :)

    Habs so gelöst

    VB.NET-Quellcode

    1. Dim H2 As Double = 0
    2. Dim i1 As Integer
    3. For i1 = 0 To 50
    4. H2 = i1 * (H / 50)
    5. ListBox3.Items.Add(i1)
    6. v = Math.Sqrt((2 * g * H2) / (1 + (I / (M * R1 ^ 2))))
    7. E_pot = M * g * (H - H2)
    8. E_kin = 0.5 * M * (v ^ 2)
    9. w = Math.Sqrt(((2 * M * g * (H2)) / I) - ((M * (v ^ 2)) / I))
    10. E_rot = 0.5 * I * w ^ 2
    11. t = v / a
    12. Punkte(i1).X = Math.Round(t * 15) '* 15 '+ ((PB_Graph1.Width) / 2)
    13. Punkte(i1).Y = Math.Round(v * 15) '* 15 '+ ((PB_Graph1.Height) / 2)
    14. With ListView1.Items.Add(Math.Round((H - H2), 4))
    15. .SubItems.Add(Math.Round((v), 4))
    16. .SubItems.Add(Math.Round((E_pot), 4))
    17. .SubItems.Add(Math.Round((E_kin), 4))
    18. .SubItems.Add(Math.Round((E_rot), 4))
    19. .SubItems.Add(Math.Round((t), 4))
    20. End With
    21. Next i1