Zadaniem będzie napisanie programu realizującego czterodziałaniowy kalkulator operujący w tzw. odwrotnej notacji polskiej RPN (ang. reverse polish notation). W systemie tym działają niektóre kalkulatory podręczne, np. kalkulatory firmy Hewlett-Packard.
Program ma działać na liczbach całkowitych, czytając dane wejściowe z klawiatury. W strumieniu wejściowym będą mogły się pojawić liczby oraz symbole operacji w postaci znaków: +, -, *, i / (dzielenie całkowite DIV). Za każdym razem, gdy pojawi się liczba, zostaje ona umieszczona na początku zwykłej listy wskaźnikowej. Gdy pojawi się symbol operacji, zostaje wykonane odpowiednie działanie na dwóch liczbach znajdujących się na początku listy, sygnalizując błąd, gdyby na liście było mniej niż dwie liczby. Rzeczone liczby zostają następnie usunięte z listy, a wynik działania ponownie na niej umieszczony. Tak używane listy nazywane są stosami albo strukturami LIFO (ang. last-in-first-out), czyli ostatni wchodzi pierwszy wychodzi. Mówimy o umieszczaniu danych na, i zdejmowaniu ze szczytu stosu.
Jakkolwiek powyższy schemat daje pełny kalkulator czterodziałaniowy, w omawianym programie powinno znaleźć się jeszcze kilka operacji dla ułatwienia posługiwania sie kalkulatorem. Wprowadźmy dodatkowy symbol operacji #, który będzie odpowiadał operacji pop, to znaczy usuwania argumentu ze szczytu stosu. (Operator taki może być przydatny dla korekcji błędów popełnionych przy wpisywaniu danych.) Drugim operatorem będzie znak $ i powinien on spowodować zamianę miejscami dwóch argumentów na szczycie stosu. Znak & ma spowodować zduplikowanie argumentu na szczycie stosu. Natomiast ostatnim symbolem będzie ? i jeśli pojawi się w strumieniu wejściowym, powinien spowodować wydrukowanie zawartości całego stosu argumentów.
Ponieważ najtrudniejszym elementem programu będzie wczytywanie danych, w uproszczonej wersji zadania można dopuścić na wejściu jedynie liczby nieujemne bez znaku. Wewnątrz programu liczby ujemne mogą się pojawić (np. w wyniku odejmowania). W pełnej wersji kalkulator powinien działać na liczbach całkowitych dodatnich lub ujemnych, ze znakiem lub bez.
WSKAZÓWKA: w tym zadaniu wygodnie jest użyć mechanizmów czytania przez INPUT^ i GET(INPUT).