Diskussion:Bedingte Anweisung und Verzweigung
Abschnitt zu Wieviele Bedingungen sind das Maximum?
Bearbeitenoft 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)
- 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
BearbeitenEs 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))
Auswahloperator - lieber Collatz-Problem als 2. Bsp?
BearbeitenDas 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;
AND hat Vorrang vor OR
BearbeitenMeiner 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)
- 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)
- 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)
- 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)