Falschverständnis bei Abbruchbedingung



  • Hallo liebe C++ Gemeinde,

    ich mache momentan einen Lernkurs in C++ und bin somit ziemlich am Anfang. Dabei ist mir eine Besonderheit bei den Schleifen aufgefallen, die bei mir ab und an eine kleine Synapsenblockade verursacht ☺

    Und zwar steht im Buch: "Schleifen werden so lange ausgeführt, bis die Bedingung falsch ist."
    Als Beispiel hier ein kleines Codeschnipsel.
    for (int i = 100; i != 0; i--)

    Mit Bedingung ist hier eher Abbruchbedingung gemeint, oder?
    Verstehe ich das dann richtig, wenn ich es so sehe. Da i nicht gleich 0 ist, ist die Bedingung zum beenden der Schleife nicht gegeben (Abbruchbedingung falsch) und somit wird der Code weiter ausgeführt, bis die Abbruchbedingung erfüllt ist.

    Macht das so Sinn? ☺
    Danke im voraus!



  • @modswanted Ich glaube, du solltest eher von einer "Laufbedingung" satt einer "Abbruchbedingung" sprechen.

    Eine for- oder while-Schleife läuft solange, wie die Laufbedingung wahr ist. Wenn die Laufbedingung nicht mehr wahr ist, wird die Schleife abgebrochen.

    Solange hier also i0i \neq 0 ist, läuft die Schleife. Wenn i=0i=0 ist, dann ist die Laufbedingung nicht mehr wahr und die Schleife bricht ab.

    Es fällt oft leichter, nicht zu viele "nicht" in einem Satz zu haben.



  • Ja stimmt, so kann man das auch sehen! Ist auch eher der logischere Gedanke, den man ja in dem Moment im Kopf hat.

    Ich habe vergessen zu erwähnen, dass der Ausdruck "Abbruchbedingung" nicht von mir stammt, sondern so in den Unterrichtsunterlagen dargelegt ist. Abbruchbedingung ist wohl der offizielle Term dafür, trägt aber eben oft eher mehr zur Verwirrung bei, als hilfreich zu sein.

    Danke dir für das "Gegenangebot", werde das eher so probieren immer zu denken.
    Grüße!



  • @modswanted sagte in Falschverständnis bei Abbruchbedingung:

    Abbruchbedingung ist wohl der offizielle Term dafür

    Wer sagt das?

    Der offizielle Begriff ist nur "condition", also "Bedingung". Siehe Abschnitt stmt.for in https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4928.pdf

    Zitat:

    for ( init-statement conditionopt{}_\text{opt} ; expressionopt{}_\text{opt} ) statement
    [...]
    the condition (8.5) specifies a test, sequenced before each iteration, such that the loop is exited when the condition becomes false

    Ok, das ist also "negativ" formuliert, also wenn die Bedingung unwahr ist, wird die Schleife beendet.



  • @wob Sorry, ich muss das leider wieder aufgreifen, weil das immerwieder in dem Lehrheft vorkommt und ich mich dadurch eher verwirrt, als gelehrt fühle. Habe das sogar leider in meinem ersten Post genau falsch aufgeschrieben, weil mich das kirre macht.
    So steht es original in einem Kapitel.


    " Hinweis:
    Die Bedingungen, die die Ausführung einer Schleife steuern, werden auch Abbruchbedingungen genannt. C++ wertet Abbruchbedingungen allerdings genau anders
    herum aus, als es dem normalen Sprachgebrauch entspricht. Wenn die Abbruchbedingung wahr ist, wird die Schleife ausgeführt. Ist die Abbruchbedingung dagegen
    falsch, wird die Schleife nicht ausgeführt. Wir benutzen daher in diesem Kapitel einfach den Ausdruck „Bedingung“. "

    Dann, im Laufe des Kapitels gibt es ein Beispiel einer for-Schleife.

    for (int i = 100; i != 0; i--)
    

    Und dazu dann die Anmerkung.

    " Bitte denken Sie daran, dass Schleifen so lange ausgeführt werden, bis die Bedingung
    falsch ist. Daher muss die Bedingung in dem Beispiel auch i != 0 lauten. Wenn Sie
    hier nämlich die Bedingung i == 0 verwenden, ist der Ausdruck direkt falsch, da ja
    i im Vorlauf auf den Wert 100 gesetzt wird. Die Anweisungen in der Schleife würden
    dann also gar nicht ausgeführt. "

    Und irgendwie ist mir einerseits verständlich, was da in der Gleichung passiert und dann aber, wenn ich dieses "Abbruchbedingung falsch" im Kopf habe, komme ich durcheinander.
    Kann man das irgendwie auch anders ausdrücken, sodass auch so ein Holzkopf wie ich, diesen Absatz versteht? Oder baut diese Aussage auf etwas auf, was in dem Heft aber leider nicht steht, sodass es schwieriger wird, den Zusammenhang zu verstehen?

    Sonst verbringe ich noch die restliche Lernzeit damit, mir diesen Absatz aus dem Gedächtnis zu löschen und je mehr ich das versuche, desto stärker wird die Schweißnaht meiner Synapsen 😠



  • Nenn es doch einfach Laufbedingungen. Die Bedingungen muss erfüllt sein, damit die Schleife läuft. Oder auch: Solange die Bedingung erfüllt ist, läuft die Schleife.

    Ich kenne es nur als Bedingungen oder Condition im Englischen. Ich glaube nicht, dass Abbruchbedingung oder auch Laufbedingung irgendwie ein offizieller Begriff sei. Auch in anderen Programmiersprachen nicht.
    Von daher nimm einen Begriff mit dem du es dir gut merken kannst.

    Es kann aber auch helfen, einfach zu üben. Oder mal zu überlegen wie while Schleifen und for schleifen zusammenhängen.
    Bei while(i != 0) stellt sich die Frage dir vermutlich nicht wie die Bedingung hier zu intepretieren ist, oder?



  • @Leon0402

    Danke dir schonmal für die Antwort... irgendwie werde ich das noch so verankern, dass es für mich logisch in meinem Schädel bleibt ☺

    Bei while(i != 0) stellt sich die Frage dir vermutlich nicht wie die Bedingung hier zu intepretieren ist, oder?

    Ja, ist meiner Meinung nach logisch. Solange / während i nicht gleich 0 ist, soll die Anweisung durchgeführt werden. Ich bleib dran, danke dir.



  • Es gibt schon den Begriff Abbruchbedingung in der Informatik - damit ist nicht zwingend gemeint, daß diese true sein muß, um die Schleife zu beenden, sondern nur, daß anhand dieser Bedingung entschieden wird, ob die Schleife weiterläuft oder abbricht, s.a. Schleife (Programmierung).
    Für die C++ Schleifen sollte man aber tatsächlich besser von Laufbedingung sprechen.

    In Pascal gibt es z.B. die repeat-until Schleife, welche abbricht, wenn die Bedingung true ist.


Anmelden zum Antworten