Binary Tree
-
MaxC++ schrieb:
Ah, also kann man unter "expression" einfach das Berechnete in Textform ausgegben - guuut

Ich kenne zwar deine Anforderungen nicht, aber vermutlich sollst du eher die Rechenvorschrift ausgeben als das Ergebnis des compute()-Aufrufes.
Zur compute()-Methode: Kann ich das nicht "einfach" so machen:
float multiplication_node::compute() const { return _left->compute() * _right->compute(); }Klar, so hätte ich es auch gemacht.
-
Super

..zu 1: Also nicht sowas?
return std::string(_left->compute() + " * " + _right->compute());
-
Nicht ganz - aber die Kind-Knoten sollten doch auch eine expression)-Methode anbieten.
PS: Und ich würde lieber zu viele Klammern setzen als zu wenige - (1+2)*3 ist etwas anderes als 1+2*3
-
Ahh

Alles klar
Noch eine Schlussfrage: Ich habe noch ein arithmetic_tree file, das die Methoden evaluate() und expression() enthält. Expression() ist mir nun klar, aber was soll die evaluate()-Methode machen?
Zudem habe ich noch ein value_node-file, das die Methode compute() enthält. Doch was soll die noch "computen"?

-
Was diese Methoden tatsächlich machen sollen, dürfte eigentlich in deiner Aufgabenstellung stehen. Ich kann hier nur auf Basis der Namen Vermutungen anstellen.
MaxC++ schrieb:
Noch eine Schlussfrage: Ich habe noch ein arithmetic_tree file, das die Methoden evaluate() und expression() enthält. Expression() ist mir nun klar, aber was soll die evaluate()-Methode machen?
Den Wert bzw. Ausdruck des Gesamtbaumes zurückgeben (d.h. ein Aufruf von root->compute()
Zudem habe ich noch ein value_node-file, das die Methode compute() enthält. Doch was soll die noch "computen"?

Im Sinne der Polymorphie könnte einer der beiden Kindknoten deines multiplication_node so ein value_node sein, also brauchst du die selben Methoden, damit der rekursive Aufruf _left->compute() bzw. _right->compute() aufgelöst werden kann. Jetzt mußt du dich nur noch fragen, wie du den Wert z.B. der Zahl 7 berechnen würdest

-
Ich habs nun mal so gemacht:
return _left->compute() * _right->compute() + _value;..aber ist das wirklick korrekt?
So würde ich einfach annehmen, dass _value der "Rest" ist..
-
Nein, der value_node dürfte für die Blätter in deinem Rechenbaum stehen - da sollten beide Kindknoten mit NULL belegt sein und du hast nur den (im Knoten selbst untergebrachten) Wert.
(PS: nur zur Übung, ob du es verstanden hast: Wie würdest du die addition_node::compute() schreiben?)
-
Wie meinst du das konkret?
Muss also nur _value returniert werden?addition_node::compute() sieht bei mir folgendermassen aus:
return _left->compute() + _right->compute();
-
MaxC++ schrieb:
Wie meinst du das konkret?
Muss also nur _value returniert werden?Klar, etwas anderes hast du ja nicht.
(die Addition sieht auch richtig aus)
-
Haha..hast Recht

Super, besten Dank!
..allerdings kann ich _value nicht direkt returnieren, da ja ein string erwartet wird. Gibt's da ne Möglichkeit von typecasting?
-
Casten bringt da nichts, aber Typumwandlung ist schon das richtige Stichwort - die Antwort findet sich bei uns im Archiv: Einmal Zahl nach String und zurück
-
Yeah, vielen herzlichen Dank für die Hilfe!

-
Mann sollte left und right noch auf Gültigkeit prüfen, bevor man was mit ihnen anstellt.