Einführung in die Programmierung - HS 2024

Lösungen Kahoot Quiz - Woche 3

Dieses Programm terminiert nicht. Um zu verstehen, wieso dieses Programm nicht terminiert, können wir die Bedingung, die von der while Schleife geprüft wird, genauer analysieren. Zuerst sehen wir, dass in jeder Iteration x dekrementiert wird, sofern x > 0 gilt. Da der Post-Dekrement Operator verwendet wird, evaluiert der Ausdruck x-- zu dem aktuellen Wert (bevor x dekrementiert wird) von x. Somit gilt nach zwei Iterationen der Zustand x == 1. Wenn nun die Bedingung erneut geprüft wird, evaluiert 0 < x-- noch immer zu true (da x == 1 gilt und der Post-Dekrement Operator zum Wert von x evaluiert, bevor x dekrementiert wird). Allerdings gilt nach der Evaluierung x == 0. Wenn nun erneut die Bedingung geprüft wird, ist die erste Bedingung x == 0 wahr. Somit wird die zweite Bedingung aufgrund der Kurzschlussauswertung nicht überprüft und x bleibt konstant 0. Somit wird auch in jeder folgenden Iteration die Bedingung x == 0 wahr sein, da der Wert von x nicht mehr verändert wird.

Wir wissen, dass in Java die Precedence von "unary post-increment" (also x++) und "unary pre-increment" (also ++x) höher ist als die Precedence von dem Operator + (Addition). Da in Java Operanden von Operatoren von links nach rechts evaluiert werden, wird zuerst x++ evaluiert. Dieser Ausdruck evaluiert zu dem alten Wert von x (also x == 2). Allerdings wird x um 1 erhöht. Somit gilt nach der Evaluierung von x++ folgendes: x == 3. Wenn nun ++x ausgewertet wird, gilt nach der Auswertung x == 4. Da bei "unary pre-increment" der Ausdruck zum neuen Wert (in dem Fall x == 4) ausgewertet wird, ist unser komplette Ausdruck x = 2 + 4 (nachdem die Operanden ausgewertet wurden). Nun wird noch die Addition und das Assignment gemacht, was dazu führt das x == 6 am Schluss gilt.

Wir wissen, dass in Java die Precedence von "unary post-increment" (also x++) höher ist als die Precedence von dem Operator + (Addition). Da in Java Operanden von Operatoren von links nach rechts evaluiert werden, wird zuerst x++ evaluiert. Dieser Ausdruck evaluiert zu dem alten Wert von x (also x == 2). Allerdings wird x um 1 erhöht. Somit gilt nach der Evaluierung von x++ folgendes: x == 3. Wenn nun nochmals x++ ausgewertet wird, gilt nach der Auswertung x == 4. Allerdings gilt auch hier wieder, dass der Ausdruck x++ zu x == 3 ausgewertet wird. Der komplette Ausdruck nach der Auswertung der Operanden des + Operator ist somit x = 2 + 3. Nun wird noch die Addition und das Assignment gemacht, was dazu führt das x == 5 am Schluss gilt.