Aufgabe: zu Lifo -Stack



  • 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.


  • Administrator

    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 😉



  • Alter Version: nach der Aufgabe

    /*
     * 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;
    }
    

    Neue Version:

    /*
     * Lifo-Stack(verbessert).cpp
     *
     *  Created on: 07.02.2010
     *      Author: c.groupe
     */
    
    #include <iostream>
    using namespace std;
    
    // LIFO-Stack
    
    class Stack
    {
    public:
    	Stack(int groesse = 16){
    	 itsStack 	= new int[groesse];
    	 itsSize 	= groesse;
    	 itsTop 	= 0;
    	 }
    	~Stack() { delete[] itsStack; }
    
    	void Push(int wert);
    	int Pop();
    	void Resize(int newsize);
    
    //	void setSize(  int size ) { itsSize = size; }
    //	void setTop(  int top ) { itsTop = top; }
    //	void setStack(  int* stack ) { itsStack = stack; }
    	int getSize() const { return itsSize; }
    	int getTop() const { return itsTop; }
    	int getStack() const { return* itsStack; }
    
    protected:
    	int itsSize;
    	int itsTop;
    	int* itsStack;
    };
    
    void Stack::Push(int wert) {
    	if ( getTop() == getSize() )
    		Resize(getSize()*2);
    	itsStack[getTop()] = wert;
    	++itsTop;
    }
    
    int Stack::Pop() {
    	int erg = 0;
    	if ( getTop() > 0) {
    		--itsTop;
    		erg = itsStack[getTop()];
    	}
    	else clog << "Fehler in Pop: Stack ist leer!\n";
    	return erg;
    }
    
    void Stack::Resize(int newsize) {
    	int *Speicher;
    	Speicher = new int [newsize];
    	for ( int i=0; i<getTop(); ++i)
    		Speicher[i] = itsStack[i];
    	delete [] itsStack;
    	itsStack	= Speicher;
    	itsSize		= newsize;
    }
    
    int main ()
    {
      Stack mystack;
      cout << "0. top: " <<  mystack.getTop() << endl;
    
      for (int i=0; i<20; i++) 	mystack.Push(i);
      cout << "1. top: " << mystack.getTop() << endl;
    
      for (int i=0; i<11; i++) 	mystack.Pop();
      cout << "2. top: " << mystack.getTop() << endl;
    
      mystack.Push(10);
      mystack.Push(20);
    
      cout << "mystack.getTop() is now " << mystack.getTop() << endl;
    
      return 0;
    }
    

    besser ? 🙂



  • so und hier mal ein FIFO,
    ich weiss nur nicht wie ich am bestern resize in push noch unterbringen soll.
    und mit set klappt auch nichts 😉

    /*
     * Fifo-Stack(ordentlich).cpp
     *
     *  Created on: 07.02.2010
     *      Author: c.groupe
     */
    
    #include <iostream>
    using namespace std;
    
    // FIFO-Stack
    
    class Stack
    {
    public:
    	Stack(int groesse = 3){
    	 itsStack 	= new int[groesse];
    	 itsSize 	= groesse;
    	 itsTop 	= 0;
    	 itsBottom 	= -1;
    	 }
    	~Stack() { delete[] itsStack; }
    
    	void Push(int wert);
    	int Pop();
    	void Resize(int newsize);
    
    //	void setSize(  int size ) { itsSize = size; }
    //	void setTop(  int top ) { itsTop = top; }
    //	void setStack(  int* stack ) { itsStack = stack; }
    	int getSize() const { return itsSize; }
    	int getTop() const { return itsTop; }
    	int getStack() const { return* itsStack; }
    	int getBottom() const { return itsBottom; }
    
    protected:
    	int itsSize;
    	int itsTop;
    	int itsBottom;
    	int* itsStack;
    };
    
    void Stack::Push(int wert) {
    	if ( getTop() != getBottom() ) {
    		itsStack[getTop()] = wert;
    	if ( getBottom() == -1 )
    		itsBottom = itsTop;
    	itsTop = (getTop() + 1) % getSize();
    	}
    }
    
    int Stack::Pop() {
    	int erg = -1;
    	if ( getBottom() != -1 ) {
    		erg = itsStack[getBottom()];
    		itsBottom = ( getBottom() +1 ) % getSize();
    	if ( getBottom() == getTop() )
    		itsBottom = -1;
    	}
    	else clog << "Fehler in Pop: Stack ist leer!\n";
    	return erg;
    }
    
    void Stack::Resize(int newsize) {
    	int *Speicher;
    	Speicher = new int [newsize];
    	for ( int i=0; i<getTop(); ++i)
    		Speicher[i] = itsStack[i];
    	delete [] itsStack;
    	itsStack	= Speicher;
    	itsSize		= newsize;
    }
    

Anmelden zum Antworten