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 👍


Anmelden zum Antworten