Mit break aus for(..;..;..) raus?



  • Jester schrieb:

    - Was genau bedeutet für euch "mathematisch validierbar"?
    - Warum sind while-Schleifen in C++ grundsätzlich nicht validierbar?

    Mathematisch validierbar heisst, dass man eine exakte Laufzeitanalyse durchführen kann. Und sobald nicht kalkulierbare Faktoren mitspielen, zB Benutzereingaben oder externe Signale, ist das nicht mehr möglich. Das zweite war wohl etwas unglücklich formuliert. Rein von der Definition einer while würde ich es so formulieren. Wenn man auf reale Anwendungen schaut, wäre es wohl richtiger zu sagen, while Schleifen sind nicht grundsätzlich validierbar, egal ob mit oder ohne break.



  • Simon2 schrieb:

    alos schrieb:

    Simon2 schrieb:

    also schrieb:

    ich hab jetzt die ersten paar seiten gelesen und da hat keiner geschrieben, dass man dieschleife in ne funktion paken und dann return machen kann, darum schreibich es jetzt mal.

    Hättest mal bis zur 4. lesen sollen:

    Seite 4 suche nach return -> 0 treffer.

    OK, dann hättest Du halt mit Verstand suchen sollen 😉

    Gruß,

    Simon2.

    Post mal den Link dazu (links oben neben der uhrzeit die url)



  • also schrieb:

    ...
    Post mal den Link dazu (links oben neben der uhrzeit die url)

    http://www.c-plusplus.net/forum/viewtopic-var-t-is-182958-and-postdays-is-0-and-postorder-is-asc-and-start-is-20.html

    pale dog schrieb:

    Jester schrieb:

    Simon2 schrieb:

    while(irgendeine Bedingung && !(erste Operation erfolgreich))
       zweite Operation
    

    Wieso nicht ?

    Mach bitte aus erste Operation was zwei- oder dreizeiliges. 🙂

    bool erste_operation_erfolgreich()
    {
      ...
    }
    

    4 zeilen 😉

    7. Post von oben.

    Gruß,

    Simon2.



  • Nicht die Abbruchbedinung in ne Funktion, sondern die ganze Schleife.

    void machWasInDerSchleifeFunktion() {
       for(...) {
          if(...) return;
       }
    }
    


  • groovemaster schrieb:

    Jester schrieb:

    - Was genau bedeutet für euch "mathematisch validierbar"?
    - Warum sind while-Schleifen in C++ grundsätzlich nicht validierbar?

    Mathematisch validierbar heisst, dass man eine exakte Laufzeitanalyse durchführen kann. Und sobald nicht kalkulierbare Faktoren mitspielen, zB Benutzereingaben oder externe Signale, ist das nicht mehr möglich.

    Das stimmt nicht wirklich. Es mag Fälle geben, wo das so ist. Trotzdem ist das nicht immer beim Anliegen von Benutzereingaben oder externen Signalen der Fall. Die meisten Echtzeitsysteme überwachen irgendwas externes und haben sehr genaue Laufzeitschranken.

    Diese Art der Validierbarkeit ist jedenfalls völlig unabhängig von der Anzahl der Bedingungen und ob break verwendet wird oder nicht.



  • also schrieb:

    Nicht die Abbruchbedinung in ne Funktion, sondern die ganze Schleife.

    void machWasInDerSchleifeFunktion() {
       for(...) {
          if(...) return;
       }
    }
    

    Was sollte bei einem return anders sein als bei einem break ?
    (Obwohl ich zugeben muss, dass ich so ein return auch öfter verwendet habe als ein break).

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Was sollte bei einem return anders sein als bei einem break ?

    findest du schon selber raus :p



  • also schrieb:

    Simon2 schrieb:

    Was sollte bei einem return anders sein als bei einem break ?

    findest du schon selber raus :p

    Klar: Gar nichts.
    Wollte eigentlich nur wissen, wo Du falsch denkst, aber anscheinend liegt Dir das nicht. :p

    Gruß,

    Simon2.



  • Simon2 schrieb:

    also schrieb:

    Simon2 schrieb:

    Was sollte bei einem return anders sein als bei einem break ?

    findest du schon selber raus :p

    Klar: Gar nichts.
    Wollte eigentlich nur wissen, wo Du falsch denkst, aber anscheinend liegt Dir das nicht. :p

    Ne, falsch denken liegt mir nicht.
    Das ganze in ne funktion zu machen ist einfach übersichtlicher. wenn ich irgendwo in möglicherweise geschachtelten schleifen ein break hab, muss ich erst wieder suchen wo es jetzt weiter geht. bei nem return weiß ich genau das ich wieder aus der funktion raus bin und es nach dem aufruf weiter geht. wenn du in der funktion mit break noch ein switch hast, dann wirds ganz übersichtlich.



  • Hi,

    das Schachteln der Schleife in einer Funktion trennt sie aber nur von ihrer "Umgebung" ... hier ist aber die Rede von "in sich kompizierten Schleifen" und die vereinfachst Du mit einem return nur unwesentlich (den Spezialfall mit dem switch mal ausgenommen).

    Letztlich ist aber natürlich erlaubt, was gefällt.

    Gruß,

    Simon2.



  • Jester schrieb:

    Das stimmt nicht wirklich.

    Doch, das stimmt. Deine Formulierung zeigt ja schon, dass du es "nicht wirklich" verneinst. :p

    Jester schrieb:

    Es mag Fälle geben, wo das so ist. Trotzdem ist das nicht immer beim Anliegen von Benutzereingaben oder externen Signalen der Fall. Die meisten Echtzeitsysteme überwachen irgendwas externes und haben sehr genaue Laufzeitschranken.

    Vor einiger Zeit hatte ich zB noch viel mit Automatisierung zu tun, wo sehr viel mit externen Signalen gearbeitet wird, und kann daher deine Aussage nur stützen. Aber darum geht es nicht. Es geht um die grundsätzliche Validierbarkeit einer Schleife, und die hast du damit auch nicht bewiesen. Egal ob man break verwendet oder nicht, Schleifen sind nicht grundsätzlich validierbar. Es hängt einfach vom jeweiligen Szenario ab. Deshalb finde ich die Aussage von otze's Infolehrer einfach unsinnig. Ende der Geschichte.



  • groovemaster schrieb:

    Jester schrieb:

    Das stimmt nicht wirklich.

    Doch, das stimmt. Deine Formulierung zeigt ja schon, dass du es "nicht wirklich" verneinst. :p

    Ne, was ich damit sagen wollte: Deine Aussage ist in der Allgemeinheit falsch, man muß sie stärker einschränken, damit sie richtig ist. Leider habe ich die Erfahrung gemacht, dass viele Leute nicht verstehen, dass eine Aussage schlicht falsch ist, wenn sie ein Gegenbeispiel zulässt und belegen die "Korrektheit" dann mit einem Beispiel für das die Aussage eben stimmt. Daher habe ich mir angewöhnt das eben vorsichtiger zu verneinen. Falsch ist es trotzdem und das muß man auch sagen dürfen. 🙂



  • Dann können wir uns vllt. darauf einigen, dass Schleifen weder grundsätzlich validierbar noch grundsätzlich nicht validierbar sind. Vollkommen unabhängig von break. 🙂


Anmelden zum Antworten