Bedingungsoperator ?:
-
Hallo,
ich verstehe folgendes Problem nicht.
Größter gemeinsamer Teiler soll ermittelt werden. Ausschnitt aus dem Code:
while((x>y) ? x-=y : y-=x);Laut Definition soll der Bedingungsoperator doch das Ergebnis quasi in eine Variable schreiben. Also bspw. x = Bedingung ? Anweisung1 : Anweisung2. Hier aber werden beide Anweisungen ausgeführt, also 1 und 2 und eine Variable gibt es ja quasi nicht.
Vielleicht kann mir jemand was dazu sagen. Danke schonmal.
Viele Grüße
-
muschelfinder schrieb:
Hier aber werden beide Anweisungen ausgeführt
Wie kommst Du darauf?
-
muschelfinder schrieb:
Hier aber werden beide Anweisungen ausgeführt, also 1 und 2.
nein. Wenn x > y ist, dann wird Anweisung 1 ausgeführt. Ansonsten Anweisung 2.
Und da das alles in einer while-Schleife steht, wird das solange ausgeführt, bis das Ergebnis "0" ergibt.
du könntest es auch so schreiben:
do int result = (x>y) ? x-=y : y-=x; while (result != 0);
-
Weil das Ergebnis der Funktion sonst nicht stimmt. Ich schreib diese mal komplett hin.
int ggT(int x, int y) { if (x && y) while ((x>y) ? x-=y : y-=x); return !(x||y)+abs(x+y); };
Hier gibt es ja schonmal keine Variable, wo Anweisung1 oder 2 hineingeschrieben wird. Vielmehr schreiben die Anweisungen selbst in die verschiedenen Variablen. Dazu konnte ich schonmal keine Definition finden.
Wie könnte man obiges in eine if-Anweisung packen, damit ich es vielleicht verstehe?
EDIT: Vielen Dank erstmal für die schnelle Hilfe, das sehe ich mir direkt nochmal genauer an.
-
muschelfinder schrieb:
Wie könnte man obiges in eine if-Anweisung packen, damit ich es vielleicht verstehe?
z.B. so
int ggT(int x, int y) { while (x && y) if (x>y) x-=y; else y-=x; return !(x||y)+abs(x+y); };
Der ursprüngliche Code testet jeweils unmittelbar ob das Ergebnis der Subtraktion 0 ist, um die Schleife abzubrechnen.