stack in C++



  • Klugscheisser schrieb:

    Es gibt kein 24:00 Uhr, nur 23:59 und 00:00 Uhr.

    Du machst deinem Namem alle Ehre 👎



  • Selbst wenn man dir helfen wollte, könnte dir niemand helfen, da deine "Problembeschreibung" einfach ungenau ist. Du gehst nicht mal auf die dir gestellten Fragen ein. So wird das definitiv nichts! Solltest du also Interesse daran haben, dass dir wirklich jemnad hilft, solltest du dein exaktes Problem schildern. Erklär also erstmal, was du dir unter einem "Stack-Rechner" vorstellst.

    PS: Die Zeit läuft 😃 😃 😃



  • Ok, also das ganze soll so ausschauen: Ich gebe zwei Zahlen ein zb 27 und 45, dann soll man auf +, -, / oder * drücken und das Ergebnis soll geliefert werden. Also zuerst zwei zahlen auf den Stack legen und dann soll damit gerechnet werden.

    lg



  • Zeus schrieb:

    drakon schrieb:

    Einen eigenen Stack könntest du mit der STL simulieren. In C++ hast du "direkt" eigentlich nichts damit zu tun..

    Wieso nicht gleich std::stack? 😶

    Also ja.. Natürlich..;)

    Zum Problem.

    Ganz einfach 2 Zahlen einlesen und dann noch auf Zeichen warten und dann z.B per switch/case abfragen, welche gedrückt wurde und rechnen. Fertig. Das hast du in 10 Minuten.. 😉



  • Also ja.. Natürlich..;)

    Zum Problem.

    Ganz einfach 2 Zahlen einlesen und dann noch auf Zeichen warten und dann z.B per switch/case abfragen, welche gedrückt wurde und rechnen. Fertig. Das hast du in 10 Minuten.. ;)[/quote]

    ok, das ist schon klar aber das muss mit push auf einem Stack abgelegt werden, mit pop wieder geholt werden usw...



  • Ist doch völlig sinnlos, außer du willst dir einen kleinen Parser bauen, der zusammengesetzte Ausdrücke auflöst.



  • ich glaube er muss erst in 24 Stunden und 34 Minuten abgegeben haben



  • Bereits 23:22 Uhr schrieb:

    Ist doch völlig sinnlos, außer du willst dir einen kleinen Parser bauen, der zusammengesetzte Ausdrücke auflöst.

    Das ein Stackrechner nicht besonders sinnbringend ist weiß ich auch, aber das ist nun mal die Aufgabe...

    Wie kommst du jetzt bitte auf einen Parser???



  • Ach, egal.

    Hier kannst du nachlesen, wie man mit std::stack arbeitet:
    http://cppreference.com/cppstack/index.html



  • ok, das ist schon klar aber das muss mit push auf einem Stack abgelegt werden, mit pop wieder geholt werden usw...

    DAS ist völlig sinnlos. Oder was willst du mache? Nix mit Stack.
    Einen Parser brauchst du, wenn du was komplizierteres machen willst..



  • drakon schrieb:

    ok, das ist schon klar aber das muss mit push auf einem Stack abgelegt werden, mit pop wieder geholt werden usw...

    DAS ist völlig sinnlos. Oder was willst du mache? Nix mit Stack.
    Einen Parser brauchst du, wenn du was komplizierteres machen willst..

    Nochmal: Ich weiß das es sinnlos ist, ich mach das auch nicht zum Spaß am Samstag um 23:46, sondern das ist die Aufgabenstellung!



  • Würdest du für mich die Aufgabenstellung mal zitieren? Verstehe das bisher nicht wirklich.



  • Bereits 23:52 schrieb:

    Würdest du für mich die Aufgabenstellung mal zitieren? Verstehe das bisher nicht wirklich.

    Die aufgabenstellung geht über eine ganze Seite, man soll im allgemeinen einen Stack Rechner in ein Command-Design Pattern einbauen. Aber das kommt erst später. Zuerst sollt ich mal rausfinden, wie das ganze ohne Design-Pattern funktioniert.

    PS: Danke, dass du mich immer an die Uhrzeit erinnerst 😃 :p



  • Ganz rudimentär das, was ich bis jetzt verstehe, was du willst:

    int nr1,nr2;
    	char c;
    
    	std::cin >> nr1;
    	std::cin >> nr2;
    
    	std::cin >> c;
    
    	switch (c)
    	{
    	case '+':
    		std::cout << nr1+nr2;
    		break;
    	case '-':
    		std::cout << nr1-nr2;
    		break;
    	case '/':
    		std::cout << nr1/nr2;
    		break;
    	case '*':
    		std::cout << nr1*nr2;
    		break;
    	default:
    		std::cout << 0;
    
    	}
    


  • Ok, danke mal. Das hätt ich selber auch noch zusammengebracht. Also nochmal: Die zwei zahlen, sollen auf einen von mir angelegten Stack (Stapel) gelegt werden. Zuerst Zahl1, dann Zahl2.

    Dann: soll ein Operator eingegeben werden, also +,-,* oder / und dann soll die zahl1 mit der zahl2 entweder addiert, subtrahiert, multipliziert oder dividiert werden.

    Lg



  • std::stack<int> st;
    
    	int nr;
    	int out;
    	char c;
    
    	std::cin >> nr;
    	st.push (nr);
    	std::cin >> nr;
    	st.push (nr);
    
    	std::cin >> c;
    
    	switch (c)
    	{
    	case '+':
    		out = st.top ();
    		st.pop ();
    		out += st.top ();
    		std::cout << out;
    		break;
    	case '-':
    		out = st.top ();
    		st.pop ();
    		out -= st.top ();
    		std::cout << out;
    		break;
    	case '/':
    		out = st.top ();
    		st.pop ();
    		out /= st.top ();
    		std::cout << out;
    		break;
    	case '*':
    		out = st.top ();
    		st.pop ();
    		out *= st.top ();
    		std::cout << out;
    		break;
    	default:
    		std::cout << "Falsche Eingabe.";	
    	}
    

    Wo ist das Problem? Oder musst du den Stack implementieren?!



  • Afaik funktioniert ein Stack-Rechner nach folgendem Prinzip: Wenn eine Operation ausgeführt werden soll, werden die entsprechenden Operanden vom Stack geholt und das Ergebnis wieder reingepusht.
    Also etwa so:

    stack<int> stapel;
    
    while irgendwas eingegeben wird:
        eingabe = lese_benutzereingabe()
        if eingabe ist eine zahl:
            stapel.push( eingabe als zahl )
        else
            if eingabe ist '+':
                stapel.push( stapel.get_and_pop() + stapel.get_and_pop() )
            else if ( eingabe ist '*':
                stapel.push( stapel.get_and_pop() * stapel.get_and_pop() )
            usw..
    

    e1: Oh Mist, 3 Minuten zu spät..
    e2: Dafür wird bei meinem Stack-Rechner das Ergebnis wieder zurückgepusht :p Aso, und das Ergebnis ist dann am Schluss immer das oberste Stack-Element.



  • drakon schrieb:

    Ganz rudimentär das, was ich bis jetzt verstehe, was du willst:

    und wo ist der stack? die antworten im cpp forum sind mal wieder absolute grütze.
    @OP: fang erstmal damit an:

    int stack[256];
    int stackptr = 0;
    
    #define push(x) stack[stackptr++]=(x)
    #define pop() stack[--stackptr]
    

    ist zwar auch nicht das gelbe vom ei (keine bereichsüberprüfung und so), aber wenigstens das grundgerüst eines stacks ist da.
    🙂



  • stack-freak schrieb:

    @OP: fang erstmal damit an:

    int stack[256];
    int stackptr = 0;
    
    #define push(x) stack[stackptr++]=(x)
    #define pop() stack[--stackptr]
    

    Im C-Forum wäre das evtl ok, hier gibt's aber zum Glück std::stack..



  • Badestrand schrieb:

    Im C-Forum wäre das evtl ok, hier gibt's aber zum Glück std::stack..

    du glaubst doch wohl nicht im ernst, dass jemand der fragt:

    kann mir schnell mal jemand erklären, man mit einem Stack richtig "umgeht"? Ich muss bis morgen einen Stack-Rechner für die Uni programmieren, hab leider noch nicht so wirklich einen Plan davon...

    mit std::cpp_frickeltemplate in kürzester zeit umgehen kann?
    🙂


Anmelden zum Antworten