000
18.04.2004, 12:49 Uhr
~Thomas xyz
Gast
|
Habe ein Programm geschrieben, welches zwei Mengen zu einer dritten Menge vereinigen soll.
Bei der Methode Vereinigung soll dann die Vereinigungsmenge als Rückgabewert übergeben werden.Das funktioniert aber nicht.Das Programm compiliert mit 0 Fehler, läuft aber trotzdem nicht.
Als Bedingungen für das Programm gelten: nur eien einfach verkettete Liste, Keine Iteratoren, Templates verwenden.Und es soll mit Methoden implementiert werden, und nicht mit Operatoren.
Ich weiß wircklich nichtmehr weiter.Hab schon so viel ausprobiert, und komme aber nicht auf die Lösung.Bin für jede Hilfe Dankbar. Vielleicht kopiert ihr euch das Programm in eurer C++ und probiert es mal aus.Wäre super nett von euch.
mfg Thomas
| C++: |
#include using namespace std;
class PRFGNode { public: unsigned int elem; PRFGNode *next; PRFGNode(int e=0, PRFGNode *n=0):elem(e),next(n){}
};
class Set { public: Set():root(0) {} Set(int){Set *first; first=new Set();} //leere Menge ~Set(); //Destruktor, löscht alle Listenelemente void insert_at_first(unsigned int x); //einfügen in Liste void Ausgabe(); Set (Vereinigung(Set &b)); //UP für die Vereinigung bool ist_in(unsigned int y); //Funktion die true zurückliefert, wenn y in Liste private: PRFGNode *root;
};
void Set::insert_at_first(unsigned int x) //Einfuegen am Listenbeginn {
root=new PRFGNode(x,root);
}
Set Set::Vereinigung(Set &b) { Set c; PRFGNode *h1,*h2; bool test=false; h1=root; // Zeiger aufs 1 Element der Menge a, siehe Aufruf im void main ( a.Vereinigung(b) ) h2=b.root; // Zeiger aufs 1 Element der Menge b, diese wird als Parameter übergeben
while(h2!=0) //zunächst werden in die neue Menge c alle Elemente von b hineinkopiert { c.insert_at_first(h2->elem); h2=h2->next; //weiter in der Liste }
while(h1!=0) //hier werden die noch fehlenden Elemente aus a in c eingefügt { if(b.ist_in(h1->elem)) // es wird mit der Funktion "ist_in" geschaut, welche noch fehlen test=true; else test=false;
if(test==false) //wenn das Element "h1->elem" von Menge a noch nicht in der Menge b, dann in c einfügen
c.insert_at_first(h1->elem); //einfügen in c
h1=h1->next; //mit next-Zeiger kommt man in der Liste weiter, (ähnlich i++) } //danach beginnt while-Schleife erneut
return c; //Ausgabe der Vereinigungsmenge, jedoch wird diese Menge nicht zurückgeliefert
}
bool Set::ist_in(unsigned int y) //überprüfen ob y in Liste { PRFGNode *hilf; bool test=false; //bool-Variable test, hat Werte "true" oder "false" hilf=root;
while (hilf!=0) { if((hilf->elem)==y) test=true; else test=false;
hilf=hilf->next; } return test; }
void Set::Ausgabe() //Ausgabe der Liste { int anz=0,i=0; PRFGNode *aktuell;
aktuell = root;
while (aktuell != NULL) { i++; cout << "\n" << "Das " << i << ". Element hat den Wert " << (*aktuell).elem << "."<<endl; aktuell = (*aktuell).next; }
}
Set::~Set() //Destruktor { PRFGNode *voriges; PRFGNode *aktuell;
aktuell=new PRFGNode; voriges=new PRFGNode; voriges=NULL;
aktuell=root;
while(aktuell!=0) {
voriges=aktuell; aktuell=aktuell->next; delete voriges; }
}
int main() { Set a, b, c;
a.insert_at_first(8); a.insert_at_first(9); a.insert_at_first(5);
b.insert_at_first(8); b.insert_at_first(3); b.insert_at_first(2);
//a.Ausgabe(); if(a.ist_in(6)) //dh wenn true zurückgegeben wird, dann ist es in der Liste cout<<"\n"<<"Das Element ist in der Liste"; else cout<<"\n"<<"Ist nicht drin"<<endl; //wenn 6 nicht in Liste, dann Meldung...
c = (a.Vereinigung(b)); //es wird die Vereinigungs-Menge ausgegeben, siehe UP: void Set::Vereinigung(Set b) //ist nicht genau das, was in der Angabe gefordert wurde, da dort die Vereinigung zurückgeliefert werden sollte, mit return- funkt. aber irgendwie nicht!!!! c.Ausgabe(); return 0; }
|
Dieser Post wurde am 18.04.2004 um 13:08 Uhr von Pablo editiert. |