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)) *-1Wä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 - 1Kann 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 *3Stimmt 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.htmlDanke 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.htmLG
-
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
