Diskussion:Bedingte Anweisung und Verzweigung

Letzter Kommentar: vor 3 Jahren von Haraldmmueller in Abschnitt AND hat Vorrang vor OR

Abschnitt zu Wieviele Bedingungen sind das Maximum?

Bearbeiten

oft müssen mehrere Bedingungen wahr sein, dh es werden mehrere ausdrücke geprüft. ich weiss leider nicht wieviele maximal möglich sind, aber wenn jemand mehr weiss wäre ein weiterer abschnitt sinnvoll. -- son of Náin 09:36, 21. Okt. 2009 (CEST)Beantworten

Deine Frage kann so einfach gar nicht beantwortet werden, da sie von vielen variablen Faktoren abhängt – wie z.B. welche Programmiersprache und ggf. begrenzte Speichergrößen, die entweder durch die Sprache oder den jeweils genutzten Übersetzer selbst, aller spätenstens aber wenn der Hauptspeicher voll ist, begrenzt werden. --92.229.52.44 14:03, 28. Dez. 2011 (MEZ)

Begriffe

Bearbeiten

Es wäre schön, wenn noch die Begriffe "einseitige Auswahl" und "zweiseitige Auswahl" erwähnt werden. Die bedingte Anweisung entspricht dann einer einseitigen Auswahl und die Verzweigung einer zweiseitigen Auswahl. Der Begriff der Auswahl ist damit einheitlicher und eleganter, als die beiden Unterbegriffe bedingte Anweisung und Verzweigung. (nicht signierter Beitrag von 138.246.2.240 (Diskussion) 14:50, 30. Dez. 2013 (CET))Beantworten

Auswahloperator - lieber Collatz-Problem als 2. Bsp?

Bearbeiten

Das 2. Bsp beim ?:-Operator ist willkürlich. Wär's nicht "schöner", wenn hier die Iteration des Collatz-Problems gezeigt wird?

  int n;
  ...
  n = n%2==0 ? n/2 : 3*n+1;

... evtl. "optisch lockerer" als

  int n;
  ...
  n  =  n % 2 == 0 ? n / 2 : 3 * n + 1;

--Haraldmmueller (Diskussion) 10:51, 29. Jul. 2018 (CEST)Beantworten

AND hat Vorrang vor OR

Bearbeiten

Meiner Meinung nach fehlt im Artikel noch die sehr wichtige Information, dass die Bedingung AND (und) vor OR (oder) ausgewertet wird.

Beispiel: Drei Variablen sollen ausgewertet werden. A, B und C. A und B können die Werte 0 und 1 enthalten und der Wert von C kann zwischen 0 und 2 liegen. Wenn man nun die Prüfung von IF-THEN so anlegen möchte, dass die Bedingung immer dann erfüllt ist, wenn A oder B den Wert 1 haben und gleichzeitig C kleiner als 2 ist, dann wäre der folgende Code fehlerhaft:

IF A=1 or B=1 and C<2 THEN ...

Grund für den Fehler: Weil AND vorrangig vor OR ist, führt dieser Code dazu, dass die Bedingung immer dann erfüllt ist, wenn B=1 und gleichzeitig C<2 ist, oder wenn A=1. Will man die ursprüngliche Aufgabe realisieren, dann muss der Code folgendermaßen lauten:

IF A+B>0 and C<2 THEN ...

OR kann in diesem Fall also gar nicht verwendet werden und muss durch A+B>0 ersetzt werden. --77.21.163.85 19:05, 12. Mär. 2021 (CET)Beantworten

Naja - das hat mit bedingten Anweisungen und Verzweigungen eigentlich nichts zu tun, sondern mit der Präzedenz der Operatoren in Bedingungsausdrücken. Üblicherweise definiert man das so, wie Du sagst - analog zu den arithmetischen Operatoren, wo ja auch Punkt- vor Strichrechnung gilt -, und ja, wär vielleicht interessant. Man müsste natürlich auch noch dazuschreiben, dass "not" noch stärker bindet (analog zum unären Minus in der Arithmetik, wo ja -3 + 4 als (-3) + 4 interpretiert wird und daher 1 ergibt und nicht als -(3 + 4)): not a and b ist wahr dann, wenn a falsch und b wahr ist, klammert also als (not a) and b und nicht als not (a and b). Aber wie gesagt - alles Operatorpräzedenz, steht dort nach "In der Logik ...". --Haraldmmueller (Diskussion) 19:16, 12. Mär. 2021 (CET)Beantworten
Ich hab einmal einen Satz zur Auswertung ergänzt, der u.a. auf den Präzedenz-Artikel verweist. --Haraldmmueller (Diskussion) 19:25, 12. Mär. 2021 (CET)Beantworten
Noch zu Deinem Beispiel: Die normale Umformulierung ist
IF (A=1 or B=1) and C<2 THEN ...
mit Klammern. Die "Trickumformung" auf A+B>0 kann böse in die Hose gehen, etwa wenn der Datentyp von A und B nur 1 bit Breite hat (weil A und B lt. Deiner Vorgabe nur die Werte 0 und 1 enthalten können) und dann in (D)einer Programmiersprache 1+1=0 ergibt ... Solche "intelligenten Tricks" verwendet man daher in professioneller Programmierung nicht (mehr) - meine Entwickler kriegen eine freundliche Ermahnung, wenn ich sowas sehe, und dürfen das umformulieren. --Haraldmmueller (Diskussion) 20:12, 12. Mär. 2021 (CET)Beantworten