Rodex_ icon

Postfix_Calculator

Rodex_ | PRO | 03/13/17 10:01:38 AM UTC | 0 ⭐ | 264 👁️ | Never ⏰ | []
C++ |

3.12 KB

|

None

|

0 👍

/

0 👎

===Headfile===
//
// Created by Alexander Dietrich on 09.03.2017.
//
 
#ifndef POSTFIX_STACK_H
#define POSTFIX_STACK_H
 
#include <iostream>
 
class Node{
public:
    Node* getNext(){
        return next;
    }
    int getValue(){
        return value;
    }
 
    void setNext(Node* nextNext){
        next = nextNext;
    }
    void setValue(int number){
        value = number;
    }
 
private:
    Node *next;
    int value;
};
 
 
class Stack{
public:
    Stack(); //constructor
    ~Stack(); //destructor
 
    void push(int value);
    int pop();
 
private:
    Node *first;
};
 
#endif //POSTFIX_STACK_H
 
 
======stack.cpp======
//
// Created by Alexander Dietrich on 09.03.2017.
//
#include "stack.h"
 
Stack::Stack() {
    // stack wird auf auf null gesetzt
    first = nullptr;
}
 
Stack::~Stack() {
    // destructor -> stack wird wieder gelöscht (allocated mem freigegeben)
    Node* current = first;
    while(current != nullptr){
        Node* tempNext = current->getNext();
        delete current;
        current = tempNext;
    }
}
 
void Stack::push(int value) {
    // nächste Eingabe wird auf den Stack gelagert
    if(first == nullptr){
        first = new Node();
        first->setValue(value);
        first->setNext(nullptr);
    }else{
        Node *tmp = new Node();
        tmp->setNext(first);
        tmp->setValue(value);
        first = tmp;
    }
}
 
int Stack::pop() {
    // die zuletzt eingegebene Zahl wir zurückgegeben vom Stack
    int toReturn = first->getValue();
    Node *next = first->getNext();
 
    delete first;
 
    first = next;
 
    return toReturn;
}
 
==============main.c==============
#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include "stack.h"
 
using namespace std;
 
int main() {
    int number1 = 0, number2 = 0, end = 1;
 
    Stack* liste = new Stack();
 
 
    while(end == 1) {
        std::string eingabe = "";
        std::cin >> eingabe;
 
 
        if (eingabe.compare("-") == 0) {
            number2 = liste->pop();
            number1 = liste->pop();
            liste->push(number1 - number2);
        } else if (eingabe.compare("+") == 0) {
            number2 = liste->pop();
            number1 = liste->pop();
            liste->push(number1 + number2);
        } else if (eingabe.compare("/") == 0) {
            number2 = liste->pop();
            number1 = liste->pop();
            liste->push(number1 / number2);
        } else if (eingabe.compare("%") == 0) {
            number2 = liste->pop();
            number1 = liste->pop();
            liste->push(number1 % number2);
        } else if (eingabe.compare("*") == 0) {
            number2 = liste->pop();
            number1 = liste->pop();
            liste->push(number1 * number2);
        } else if (eingabe.compare("=") == 0) {
            number1 = liste->pop();
            cout << number1 << endl;
            end = 0;
        } else {
            std::stringstream s(eingabe);
            s >> number1;
            liste->push(number1);
        }
    }
 
    delete liste;
    return 0;
}

Comments