et_schneid Geschrieben 15. September 2003 Geschrieben 15. September 2003 hi, wollte mich erstmal vorstellen, bin der et_schneid und mach ein wenig hobbymaessige cpp-programmierung; bin aber nicht so der crack, leider. hab nun eine aufgabe, an der ich mir die zaehne ausbeisse; vielleicht habt ihr ja eine idee, wie ichs loesen kann (meine "antwort" auf die aufgabe steht weiter unten): ok, hier die aufgabe: Definieren Sie eine Klasse Punkt mit zwei int-Elementdaten, x und y. Benutzen Sie den STL-container Vector, um eine Reihe Punkt-Objekte zu speichern. Dafür muss von der Tastatur eine Reihe Paare x, y eingelesen werden. Es ist nicht bekannt wie viel solcher Paare eingegeben werden. Benutzen Sie bei der Eingabe ein nicht-numerisches Zeichen als Abschlusskode. Definieren Sie die Operatoren == und < für zwei Punkt-Objekte, wobei p<q die folgende Bedeutung hat: p.x < q.x || (p.x == q.x && p.y < q.y) Benutzen Sie den STL-Algorithmus sort, um die Reihe eingelesener Punkte zu sortieren und das laut den gerade definierten Sortier-Operator <. [/PHP] Und nun meine "Antwort" - leider unvollstaendig, liest nur einen wert ein und ueberlaedt die operatoren fuer sort nicht ... ka, wie man sowas macht... [PHP] #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; class punt { private: int x; vector<int> v; public: void eingabe(); void sortieren(); void ausgabe(); }; void punt::eingabe() { cout << "Gib was ein oder benutzt Du etwa AOL?\n"; while (cin >> x) v.push_back(x); }; void punt::sortieren() { sort(v.begin(), v.end()); }; void punt::ausgabe() { cout << "Sortiert sieht das so aus:\n"; int n = v.size(); for (int i=0; i<n; i++) cout << v[i] << endl; }; int main() { punt punkt; punkt.eingabe(); while(!cin.fail()) { punkt.eingabe(); }; punkt.sortieren(); punkt.ausgabe(); system("PAUSE"); }; kann mir mal jemand sagen, was ich falsch mache, bzw. wie ich meine loesung so erweitere, dass x und y im container gespeichert werden und ich diese sortieren kann (mit operatorenueberladung)? vielen, vielen dank und gruss, et_schneid Zitieren
Orffi Geschrieben 15. September 2003 Geschrieben 15. September 2003 Hallo! Ich denke, Du verstehst die Aufgabe falsch. Benutzen Sie den STL-container Vector, um eine Reihe Punkt-Objekte zu speichern. Das bedeutet, Du sollst eine Klasse mit class Punkt { private: int x, y; //... }; schreiben und dann, nicht in der Punktklasse, einen Vector<Punkt> anlegen, der mehrere Punkte speichern kann. Aber Deine Punktklasse soll nicht mehrere Koordinaten speichern können. HTH Jan Zitieren
et_schneid Geschrieben 15. September 2003 Autor Geschrieben 15. September 2003 Original geschrieben von Orffi Hallo! Ich denke, Du verstehst die Aufgabe falsch. Das bedeutet, Du sollst eine Klasse mit class Punkt { private: int x, y; //... }; schreiben und dann, nicht in der Punktklasse, einen Vector<Punkt> anlegen, der mehrere Punkte speichern kann. Aber Deine Punktklasse soll nicht mehrere Koordinaten speichern können. HTH Jan nein, das habe ich zuerst auch gedacht, aber das ergibt einfach weniger sinn. ich habe es jetzt so geloest ... #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; class punt { private: int x, y; // vector<int> v; public: void eingabe(); void sortieren(); void ausgabe(); }; void punt::eingabe(int xx, int yy) { x = xx; y = yy; }; bool punt::operator==(punt q) { if ((x==q.x) && (y==q.y)) return TRUE; else return FALSE; } bool punt::operator<(punt q) { if ((x<q.x) || ((x=x.q) && (y < q.y))) return TRUE; else return FALSE; } int main() { int x,y; punt punkt; vector<int> v; punkt.eingabe(); cout << "Gib was ein oder benutzt Du etwa AOL?\n"; while(cin >> x, cin >> y, !cin.fail()) { punkt.eingabe(x,y); v.push_back(punkt); }; sort(v.begin, v.end); //punkt.sortieren(); //punkt.ausgabe(); system("PAUSE"); }; [/PHP] ich denke, dass die aufgabe so gemeint ist ... Zitieren
bigpoint Geschrieben 17. September 2003 Geschrieben 17. September 2003 Hi, ich will Dir nichts vorwerfen aber so wie du es uns gezeigt hast funktioniert es bestimmt nicht. Es reicht wenn man nur die Funktion eingabe() anschaut?? Das läuft bestimmt nicht. Zitieren
et_schneid Geschrieben 17. September 2003 Autor Geschrieben 17. September 2003 Original geschrieben von 007ski Hi, ich will Dir nichts vorwerfen aber so wie du es uns gezeigt hast funktioniert es bestimmt nicht. Es reicht wenn man nur die Funktion eingabe() anschaut?? Das läuft bestimmt nicht. du wirfst mir nichts vor; da hast einfach du recht, war auch nur n chaotisches workaround; was haelst du hier von: #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; class punt { private: int x, y; //vector<int> v; public: // int x, y; void eingabe(int xx, int yy); bool operator==(punt q); bool operator<(punt q); }; void punt::eingabe(int xx, int yy) { x = xx; y = yy; }; bool punt::operator==(punt q) { if ((x==q.x) && (y==q.y)) { return true; } else { return false; } } bool punt::operator<(punt q) { if ((x<q.x) || ((x=x.q) && (y < q.y))) { return true; } else { return false; } } int main() { int x,y; punt punkt; vector<punt> v; cout << "Gib was ein, pls?\n"; while(cin >> x, cin >> y, !cin.fail()) { punkt.eingabe(x,y); v.push_back(punkt); }; sort(v.begin(), v.end()); int size = v.size(); for (int j=0; j<size; j++) { cout << v[j].x() << "," << v[j].y() << endl; } //punkt.sortieren(); //punkt.ausgabe(); system("PAUSE"); }; [/PHP] Zitieren
bigpoint Geschrieben 17. September 2003 Geschrieben 17. September 2003 Es funktioniert auch nicht schau Dir z.B. des an for (int j=0; j<size; j++) { cout << v[j].x() << "," << v[j].y() << endl; // "x" : ist doch private } [/PHP] Zitieren
et_schneid Geschrieben 17. September 2003 Autor Geschrieben 17. September 2003 Original geschrieben von 007ski Es funktioniert auch nicht schau Dir z.B. des an Aha und wenn ich es public deklariere reichts? Oder siehst Du noch andere Fehler? ... leider werden aus irgendnem grund die compilerausgaben von der IDE falsch geparsed... hilf mir doch mal Zitieren
Goos Geschrieben 18. September 2003 Geschrieben 18. September 2003 Original geschrieben von et_schneid Aha und wenn ich es public deklariere reichts? Oder siehst Du noch andere Fehler? ... leider werden aus irgendnem grund die compilerausgaben von der IDE falsch geparsed... hilf mir doch mal Nix wird da public deklariert. Fuer Membervariablen gibts Get-Methoden (und falls noetig macht man auch noch ne Set-Methode). Goos Zitieren
et_schneid Geschrieben 18. September 2003 Autor Geschrieben 18. September 2003 hallo und dankeschoen fuer die eingebung, but please give me an example. :-) Zitieren
Goos Geschrieben 18. September 2003 Geschrieben 18. September 2003 Na sowas halt fuer x und y int punt::GetX() { return x; }[/PHP] Goos Zitieren
bigpoint Geschrieben 19. September 2003 Geschrieben 19. September 2003 Original geschrieben von et_schneid Aha und wenn ich es public deklariere reichts? natürlich nicht Original geschrieben von et_schneid Oder siehst Du noch andere Fehler? ja Original geschrieben von et_schneid ... leider werden aus irgendnem grund die compilerausgaben von der IDE falsch geparsed... was für compiler benutzt Du ?? Original geschrieben von et_schneid hilf mir doch mal vieleicht so: #include <iostream> #include <vector> #include <algorithm> using namespace std; class punkt { public: int x, y; punkt() : x(),y(){} punkt(int Newx, int Newy) : x(Newx), y(Newy) {} }; bool operator==(const punkt& x, const punkt& y) { return (x.x == y.y); } bool operator<(const punkt& x, const punkt& y) { return x.x < y.y; } typedef vector<punkt> PUNKTVECTOR; int main() { PUNKTVECTOR punktVector; PUNKTVECTOR::iterator punktIterator; int m_x,m_y; cout << "Gib was ein, pls?\n"; while(cin >> m_x, cin >> m_y, !cin.fail()) { punktVector.push_back(punkt(m_x,m_y)); } cout<<"Ausgabe vor dem sortieren"<<endl; for (punktIterator = punktVector.begin(); punktIterator != punktVector.end(); punktIterator++) { cout <<"X"<< punktIterator->x << "\t" <<"Y"<< punktIterator->y << endl; } cout << endl; system("pause"); sort(punktVector.begin(), &punktVector[punktVector.size()]); cout << "Ausgabe nach dem sortieren, sortiert bei y" << endl; for (punktIterator = punktVector.begin(); punktIterator != punktVector.end(); punktIterator++) cout << punktIterator->x << "\t" << punktIterator->y << endl; cout << endl; system("pause"); cout << "Ausgabe nach dem sortieren, sortiert bei x" << endl; sort(punktVector.begin(), punktVector.end()); for (punktIterator = punktVector.begin(); punktIterator != punktVector.end(); punktIterator++) cout << punktIterator->x << "\t" << punktIterator->y << endl; return 0; } [/PHP] Zitieren
et_schneid Geschrieben 21. September 2003 Autor Geschrieben 21. September 2003 vielen vielen dank fuer die muehe. warum loest du es ueber einen iterator? Zitieren
LINK Geschrieben 21. September 2003 Geschrieben 21. September 2003 Original geschrieben von et_schneid vielen vielen dank fuer die muehe. warum loest du es ueber einen iterator? naja, wahrscheinlich macht er das, weil dies die einfachste möglichkeit ist, einen container element für element durchzugehen Zitieren
et_schneid Geschrieben 21. September 2003 Autor Geschrieben 21. September 2003 gut, ich hab mir mal ein wenig literatur dazu besorgt und danke fuer die hilfe, echt super von euch!!! danke! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.