Operatorbaum
-
Moin zusammen,
das Semesterende rückt näher und ich bin momentan am Üben von Operatorbäumen
Allerdings komme ich momentan nicht wirklich weiter bzw. bin ich etwas verwirrt, denn so ziemlich jeder, den ich gefragt habe, hat einen anderen Operatorbaum für folgenden Ausdruck:
a = c/b + ((b%2)? 2*x+4 : sqrt(y)) *-1
Wäre klasse, wenn sich mal jmd an den Operatorbaum machen könnte und mir mitteilen könnte, wie er richtig aussehen müsste...
Danke schon einmal...
MfG
Kaula
-
Kaula schrieb:
a = c/b + ((b%2)? 2*x+4 : sqrt(y)) *-1
= a + / c b * ?: % b 2 + * 2 x 4 () sqrt y - 1
Kann man das lesen? Layout ist wie bei einem Treeview, der Baum geht von links nach rechts. Die Kinder eines Knoten stehen rechts davon unter einander.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
edit: hier stand was falsches.
-
danke dir, für die schnelle Antwort! Wenn ich deinen Baum richtig interpretiere, habe ich den selben
Habe jetzt allerdings nochmals eine Frage, zu diesem Ausdruck:
c = 1 + ((b%7) ? b/a : 2) + -y * (int) ++x *3
Stimmt mein Operatorbaum soweit? (siehe Link)
Und ich habe jetzt einfach mal intuitiv mit dem + in der Mitte begonnen, ist das egal? Habe mal beide Bäume gezeichnet einmal mit + in der Mitte gestartet und einmal mit dem Vorderen...die Bäume sehen unterschiedlich aus, aber wenn ich die Werte a=3, b=7, x=1,4 und y=2 einsetze erhalte ich beides mal c=-9 und somit wäre es doch egal mit welchem ich "starte ?!Link:
http://www.bilder-hochladen.net/files/eb0o-2-c81e-jpg-nb.html
Danke schon einmal...
MfG
Kaula
-
*push*
ich weiß...bin ungeduldig^^
-
Kaula schrieb:
Und ich habe jetzt einfach mal intuitiv mit dem + in der Mitte begonnen, ist das egal? Habe mal beide Bäume gezeichnet einmal mit + in der Mitte gestartet und einmal mit dem Vorderen...die Bäume sehen unterschiedlich aus, aber wenn ich die Werte a=3, b=7, x=1,4 und y=2 einsetze erhalte ich beides mal c=-9 und somit wäre es doch egal mit welchem ich "starte ?!
Du musst die Assoziativität der Operatoren beachten. + und * sind beispielsweise linksassoziativ, d.h. a+b+c muss als ((a+b)+c) interpretiert werden, nicht als (a+(b+c)). Deine + sind also richtig gesetzt, die * sind falsch.
-
Danke dir Bashar!
Das mit der Assoziativität habe ich irgendwie völlig vergessen
Habe es jetzt nochmals probiert und nun müsste der Baum stimmen oder?
http://www.bilder-hochladen.net/files/eb0o-3-eccb.jpg
-
Sieht gut aus.
-
Moin zusammen,
ich habe hier gerade nochmals einen Ausdruck gefunden, der mir ein paar Probleme bereitet
c = x * ( (int) (3**p) % 2) ? ++a + b++ : (--a - b--)
Stimmt dieser Baum dazu?
http://s7.directupload.net/file/d/2576/rna4ngr5_jpg.htm
LG
-
Ja, man erkennt nur leider nicht, ob das jeweils Prä- oder Postinkrementoperatoren sind, da müsstest du dir noch was einfallen lassen. Evtl. ++pre und ++post schreiben.
-
Bashar schrieb:
Ja, man erkennt nur leider nicht, ob das jeweils Prä- oder Postinkrementoperatoren sind, da müsstest du dir noch was einfallen lassen. Evtl. ++pre und ++post schreiben.
Ok perfekt, danke dir
Habe das mal verbessert...
Nun tritt nämlich mein Problem auf, denn ich soll den Wert für c bestimmen.
Folgende "Daten" sind gegeben:
double x=1.2, *p=&x, c;
int a=1, b=2;Wenn ich jetzt mal in dem "Bedingungs-Ast" die gegebenen Werte einsetze, erhalte ich ja 3%2. D.h. eine 1 geht weiter nach oben und wird nun mit dem x(1.2) multipliziert...Erhalte dann 1.2 vom Typ double.
Aber wie geht es jetzt weiter? Ich dachte in der Bedingung wird entweder bei 1 der Wahr-Zweig ausgewählt oder bei 0 der Sonst-Zweig...Aber nun habe ich ja da 1.2
-
Alles ungleich 0 ist wahr.
-
Bashar schrieb:
Alles ungleich 0 ist wahr.
erklärt einiges
top, danke