Baum
-
Niemand zwingt dich, nicht das dafür gedachte Hoch-Tag zu verwenden, etwas wie 2foo (BB-Code:
2[h]foo[/h]) wäre unmissverständlich.
Bei noch korrekt ausgeschriebenemstd::pow(2, foo)denkt man doch sofort an C-like-C++-Code.
-
hedontgetit schrieb:
Niemand zwingt dich, nicht das dafür gedachte Hoch-Tag zu verwenden
Stimmt. Werde ich mir für das nächste Mal merken.
hedontgetit schrieb:
C-like-C++-Code.
Wie potenzierst du denn?
-
Ich bin etwas verwirrt.
Also kann ich's nicht einfach so machen?build_tree(std::pow(4, level_), level_-1);
-
Schon weil du bei dem Aufruf gar nicht angeben kannst, wo die Wurzel dieses Teilbaumes liegt. Wie ich schon sagte, die Lösung liegt in der Rekursion - du legst vier neue Objekte an, hängst sie als Nachfolger in dein root-Objekt und lässt dann die build_tree()-Funktion auf jede davon los.
@EOutOfResources und hedontgetit: Habt ihr nun geklärt, wie man Potenzen schreiben sollte

-
Wie meinst du "hängst sie als Nachfolger in dein root-Objekt " konkret?
Also ich weiss, was du meinst. Allerdings bring ich das codemässig nicht hin.
-
Du müsstest irgendwo in der person-Klasse/Struct einige Elemente haben, die die Kinder darstellen (da du uns die Definition nicht genannt hast, kann ich nur raten). Mit "einhängen" meinte ich, die neu erzeugten Objekte dort unterzubringen.
-
Hmm..ich kann "nur" neue Personen machen, ob die dann "children" sind, weiss man nicht...
#ifndef __PERSON__ #define __PERSON__ // Task1 #include "common.hpp" #include "../../../shared/array.hpp" // STL #include <vector> class person { public: /** * @brief construct a new person with the specified id * @param id_ id of the new person */ person(unsigned int id_); /** * @brief getter of the id of the person * @return int return the id of the person */ int get_id(void) const; /** * @brief retrieve the n-th children of the current node * (range from 0 to 3). * @param index_ index of the child to access * @return person* the actual child */ person* get_person_at_risk(unsigned int index_); /** * @brief add a new person at the defined position. * @param index_ (range from 0 to 3) * @param new_person_ the new person to add */ void set_person_at_risk(person* new_person_, unsigned int index_); /** * @brief checks if the node is infected or not * @return bool true if the node is infected, false otherwise */ bool is_infected(void) const; /** * @brief set the infection of the person * @param status_ the new infection status */ void set_infected(bool status_); /** * @brief print the node's information */ void print(void); private: /* Children nodes */ array<person*, MAX_CHILDREN> _people_at_risk; /* ID of the person */ const unsigned int _id; /* Infection status */ bool _infected; }; #endif // __PERSON__
-
/** * @brief add a new person at the defined position. * @param index_ (range from 0 to 3) * @param new_person_ the new person to add */ void set_person_at_risk(person* new_person_, unsigned int index_);das klingt doch genau nach der Methode, die du dafür benötigst

-
Also meinst du das in der Art (noch nicht vollständig):
person* p1; p1->set_person_at_risk(p1, 0); person* p2; p2->set_person_at_risk(p2, 1); build_tree(p1,level_);..ich bin mir bzgl. den Argumenten nicht sicher..
-
Der Ansatz ist zu erkennen, allerdings zeigen deine Zeiger noch ins Nirvana. Du solltest auch echte Objekte erzeugen (z.B. mit new).
PS: Und ich würde eine Schleife verwenden - das erspart Schreibarbeit
-
Ok, habe nun das:
for(int i=0; i<4; ++i) { person(i)* p(i) = new person*; p(i)->set_person_at_risk(p(i), i); build_tree(p(i), level_); }..allerdings stimmt bei der ersten Zeile in der for-Schleife (mit new) etwas nicht, oder? (was? :S)
-
die ganzen (i) sind überflüssig (und höchstwahrscheinlich syntaktisch fehlerhaft), außerdem ist am Ende der new-Zeile ein * zu viel.
-
Stimmt, dafür sollte es eigentli new person(i); heissen, weil person kein Standardkonstruktor hat.
Sonst stimmt's aber mit den Methodenaufrufen und allem, oder?