Aufgabe: zu Lifo -Stack
-
ok, gut habs mal dementsprechend geändert, aber läuft immernoch nicht.
/* * Lifo-Stack.cpp * * Created on: 07.02.2010 * Author: c.goupe */ #include <iostream> using namespace std; class stack{ private: int anzahl; int size; int top; int* stck; public: // Konstruktoren stack(int groesse = 16) { stck = new int[groesse]; size = groesse; top = 0; } stack(const stack & s) { anzahl = s.anzahl; stck = new int [anzahl]; for( int i=0; i<anzahl; ++i ) stck[i] = s.stck[i]; } ~stack() { delete[] stck; } void push(int wert) { if (top == size) resize(size*2); stck[top] = wert; ++top; } int pop() { int erg = 0; if (top > 0) { --top; erg = stck[top]; } else cerr << "Fehler in pop: Stack ist leer!\n"; return erg; } void resize(int newsize){ int *Speicher, i; Speicher = new int [newsize]; for( i=0; i<anzahl; ++i ) Speicher[i] = stck[i]; delete [] stck; stck = Speicher; size = newsize; } }; int main() { int a; stack s; cout << "LIFO-Stack!"; cout << "Push: "; cin >> a; s.push(a); cout << "Pop: " << s.pop() << endl; return 0; }
-
if (stck = NULL)Ih, mach das weg, mach das weg.
-
Außerdem sollte top weg, denn anzahl alleine erfüllt diesen Zweck schon besser. Warum besser? Weil man bei top als Fremdleser nicht weiß, ob der Index des Top-Elements oder der Index der nächsten Schreiposition gemeint ist. Aus size würde ich noch maxAnzahl machen, damit es nicht mit size aus den anderen Containern verwechselt wird, denn wonanders ist size gerade das, was bei Dir anzahl ist und das, was bei Dir size ist, ist woanders unter Umständen capacity. Aber kapazität geht in C++ ja nicht wegen des 'ä', außer Du verwendest einen Microsoft-Conmpiler, die damit wiedermal ihre Codebase von echtem C++ entfernen wollen.
-
volkard schrieb:
if (stck = NULL)Ih, mach das weg, mach das weg.
gut nun gehts.
-
volkard schrieb:
Außerdem sollte top weg, denn anzahl alleine erfüllt diesen Zweck schon besser. Warum besser? Weil man bei top als Fremdleser nicht weiß, ob der Index des Top-Elements oder der Index der nächsten Schreiposition gemeint ist. Aus size würde ich noch maxAnzahl machen, damit es nicht mit size aus den anderen Containern verwechselt wird, denn wonanders ist size gerade das, was bei Dir anzahl ist und das, was bei Dir size ist, ist woanders unter Umständen capacity. Aber kapazität geht in C++ ja nicht wegen des 'ä', außer Du verwendest einen Microsoft-Conmpiler, die damit wiedermal ihre Codebase von echtem C++ entfernen wollen.
mhmm könnteste recht haben, aber wird ja so vorgegeben.
Werde aber nochmal ein anderes Programm nun schreiben.
Basisklassse wird stack sein und davon abgeleitet Lifo und Fifo.
-
c.groupe schrieb:
volkard schrieb:
if (stck = NULL)Ih, mach das weg, mach das weg.
gut nun gehts.
ne resize geht nicht...
-
c.groupe schrieb:
Basisklassse wird stack sein und davon abgeleitet Lifo und Fifo.
Ih, mach das weg, mach das weg.
Laß Containerklassen in C++ besser immer unvererbt.
-
ne resize geht nicht...
Weil Du anzahl und top mal jenes mal solches nimmst. Weg mit anzahl!
-
volkard schrieb:
Ih, mach das weg,...
Was Du alz machsch.
-
volkard schrieb:
c.groupe schrieb:
Basisklassse wird stack sein und davon abgeleitet Lifo und Fifo.
Ih, mach das weg, mach das weg.
Laß Containerklassen in C++ besser immer unvererbt.
habs nun so gemacht..
// also gut LIFO bleibt LIFO und FIFO bleibt FIFO, nix beides in einem ;)
-
volkard schrieb:
ne resize geht nicht...
Weil Du anzahl und top mal jenes mal solches nimmst. Weg mit anzahl!
jo nun gehts..

-
StrangePlastinations schrieb:
volkard schrieb:
Ih, mach das weg,...
Was Du alz machsch.
Wer keine Fehler macht, lernt nichts! :p
-
Was bitte bedeutet buttom?
Du meinst wohl bottom?
-
Zuweisungsoperator nicht vergessen -- das steht zwar nicht in der Aufgabenstellung, aber der Compiler-generierte Zuweisungsoperator macht hier das falsche.
Außerdem, missbrauchst Du Vererbung.
-
krümelkacker schrieb:
Außerdem, missbrauchst Du Vererbung.
Merkt euch es mal, c.groupe ist der mit dem Professor, welcher man löschen (verbrennen) sollte

Grüssli
-
Die Basiklasse stack ergibt überhaupt keinen Sinn.
Lies die Geschichte des Herrn Bebel: http://www.c-plusplus.net/forum/viewtopic-var-t-is-75672.html
-
krümelkacker schrieb:
Zuweisungsoperator nicht vergessen -- das steht zwar nicht in der Aufgabenstellung, aber der Compiler-generierte Zuweisungsoperator macht hier das falsche.
Außerdem, missbrauchst Du Vererbung.
ja ist nicht sauber geschrieben, kommt davon wenn man es so schnell runtertippt.
und ja bottom, habs schon angepasst
-
Dravere schrieb:
krümelkacker schrieb:
Außerdem, missbrauchst Du Vererbung.
Merkt euch es mal, c.groupe ist der mit dem Professor, welcher man löschen (verbrennen) sollte

Grüssli
omg, ich hab doch nur die aufgabe machen wollen

-
Dravere schrieb:
krümelkacker schrieb:
Außerdem, missbrauchst Du Vererbung.
Merkt euch es mal, c.groupe ist der mit dem Professor, welcher man löschen (verbrennen) sollte

Das soll c.groupe mal in seine Signatur aufnehmen.
Außerdem war neulich sein Prof nur 20 Jahre hintendran, das Erben von stack war niemals vernünftig, fürchte ich.
-
gut ich schreibe mal LIFO neu und lasse es LIFO mit FIFO zu verbinden
