Knoten im Programmablauf

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Knoten im Programmablauf

    Hi,
    ich hab in meinem Programmablauf ein Problem mit von Funktionen berechneten Variablen.
    Meine Situation:
    (V = Variable, F = Funktion)

    V1 = Fx(V3)
    V2 = Fy(V1)
    V3 = Fz(V2)

    Selbst wenn alle 3 Variablen zur gleichen Zeit erzeugt würden, würde es nicht funktionieren... Wie entwirre ich das?
    @Cistbesser Das sieht sehr nach Iteration aus.
    Du musst für V3 einen Startwert vorgeben und damit V1, V2 und V3' berechnen.
    Sieh Dir die Differenz zwischen V3 und V3' an und mach die nächste Runde, und das so lange, bis die Differenz klein genug ist.
    Überwache die Differenzen. Wenn sie größer werden, musst Du einen besseren Startwert vorgeben.
    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.
    mir sähe das nach was aus, was Zirkelbezügen ähnelt, und Excel sollte sowas anmeckern.
    Vlt. liefert es stattdessen einfach falsche Ergebnisse.
    Oder du hast die Logik falsch übertragen.
    Aber kann auch tatsächlich sein, dass Excel da eine gewisse Anzahl Iterationen durchführt - mir war, als könne man irgendwo irgendwas mit Iterationen einstellen - aber vergessen, und vlt. stimmt das nichtmal.
    In den Excelzellen stehen der Funktionsaufruf direkt drin. Er greift dann eben ins entsprechende Modul und rechnet. Das einzige, was ich gemacht habe, ist, dass ich für jede Zelle eine Variable in meinem Code angelegt habe und -wie oben dargestellt- ihr den Funktionsaufruf übergeben habe. Das entspricht ja aber dem, was Excel auch macht. Ob es jetzt eine Zelle oder Variable ist, die die Funktion aufruft, ist ja egal.
    @Cistbesser Dann mach es genau so, wie ich es Dir in Post #1 erläutert habe. Wahrscheinlich ist der Startwert einfach 0.
    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!
    Hier mal die Abfolge was bei mir passiert:
    1. Durchlauf:
    V3 = 1 'startwert
    .
    .
    V3' = 0.866 ..

    2. Durchlauf
    V3 = V3' '=0.866
    .
    .
    V3' = 0.866 ..

    Die Differenz wird spätestens mit dem dritten Durchlauf 0. Jedoch liegt V3 immer noch um 0.06 daneben. Ich hab den Sollwert mal spaßeshalber manuell eingegeben und voila, es kommt raus was soll. V1 und V2 bekommen auch nur noch konstante Werte übergeben.

    Edit: Weiter oben im Code stehen Variablen, die erst später berechnet werden. Chaos pur. Soll ich einfach eine Iteration durch den ganzen Scheiß laufen lassen? Ansonsten bräuchte ich ca 50 GoTo's.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cistbesser“ ()

    Cistbesser schrieb:

    Chaos pur.
    Poste mal den ganzen Code.
    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!
    320 Zeilen Chaos. Die Unterteilung ist nach der Tabellentitel sortiert. Ich habe die Anweisung so wenig zu ändern wie möglich was den Zugriff angeht. Die Variablennamen sind ebenfalls beschissen, allerdings habe ich die so gewählt damit ich die Möglichkeit habe, die Werte etc mit dem Ursprungsprogramm zu vergleichen. (Ka ob ich jetzt gegen irgendwelche Datenschutzklauseln verstoße die ich unterschrieben hab, mir wurscht.)

    Ich hängs an weils hier noch unübersichtlicher wird.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Cistbesser“ ()

    Cistbesser schrieb:

    Chaos
    ohne eine Programm-Struktur.
    Sorry. Da werf ich das Handtuch.
    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!

    Cistbesser schrieb:

    den relevanten Teil
    Da gehören die Sub / Function-Deklaration und ggf. ein paar Klassenvariablen mit dazu, dass es bei C&P nicht völlig nackt da steht.
    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
    Die Funktionen kann ich leider nicht aushändigen.
    Dein Tipp von gestern hat mich darauf gebracht, alles in eine Schleife zu setzen und x-mal durchzugehen. Die meisten Werte stimmen jetzt auch, aber es gibt noch ein paar -zT krasse- Abweichungen im Bereich "Wicklung".

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

    @Cistbesser OK.
    Du greifst mit Form1.Datas... und Form1.tbXXX auf Elemente einer Un-Instanz von Form1 zu, das ist ein NoGo. Zu Instanzen von Forms gugst Du hier. Das Modul darf keinen FormX-Aufruf enthalten!!!!!
    Mach Dir zunächst eine Klasse, in der die Daten gehalten werden. Füttere deren Instanz in der Form mit allen Informationen und dann gibst Du der Sub Stator(xxx) diese Instanz als Argument mit.
    Wenn Du so weit bist, reden wir weiter.
    Und
    Pi ist als Math.PI in .NET verfügbar.
    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!