ZPO 2015 lab. 2: hint

Zadanie za 3 pkt. będzie dotyczyło programowania z wykorzystaniem wyjątków.
Będzie polegało m.in. na zaimplementowaniu algorytmu obliczania wartości wyrażeń arytmetycznych zapisanych w postaci odwrotnej notacji polskiej, który wygląda następująco:

  1. Analizuj wyrażenie po jednym elemencie (stałej lub operatorze).
  2. Jeśli ten element jest:
    1. stałą – dopisz go na stos;
    2. operatorem – zdejmij ze stosu właściwą dla danego operatora liczbę argumentów, wykonaj na nich obliczenia, uzyskany wynik dopisz na stos;
  3. Jeśli badane wyrażenie
    1. nie zostało wyczerpane – wróć do punktu pierwszego;
    2. zostało wyczerpane – wartość znajdująca się na stosie to wynik obliczeń.

Uwaga:
Pobierając dwie liczby, np. 2 i 3, wyrażenie wykonuje się w odwrotnej kolejności, czyli, np. 3 / 2.

Przykłady:
8 9 + jest równoważne: 9+8;
5 6 7- * jest równoważne (7-6)*5

Dlatego pomocą w skutecznej realizacji tego zadania może być opracowanie przed zajęciami funkcji, która wczytuje z pliku tekstowego pojedynczy wiersz zawierający wyrażenie arytmetyczne zapisane w tej notacji i oblicza jego wartość. Można przyjąć, że ostatnim znakiem istotnym na końcu każdego wiersza jest np. znak ‘#’, oznaczający koniec wyrażenia arytmetycznego. Wydruk takiego programu może przydać się na zajęciach i nie będzie zabroniony.

Zwracam uwagę, że dla funkcji atoi, obliczającej wartość liczby na podstawie jej reprezentacji tekstowej, istnieje jej tzw. bezpieczna, tj. posługująca się wyjątkami w celu uruchomienia obsługi błędów, wersja stoi. Warto w domu przećwiczyć jej działanie dla tekstów reprezentujących liczby zarówno w sposób poprawny jak i błędny.