Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
WIPING29 - Notacja Polska |
Zadanie eliminacyjne w konkursie WIPING2 organizowanym przez
Wydział Informatyki Zachodniopomorskiego Uniwersytetu Technologicznego w Szczecinie
Notacja Polska
Jan Łukasiewicz, polski logik, zaproponował w roku 1920 nowy sposób zapisywania wyrażeń logicznych, który dzięki swoim unikalnym właściwościom pozwalał zapisać dowolnie złożone wyrażenie bez użycia nawiasów. Sposób ten daje się niemal bez modyfikacji zastosować także w arytmetyce, co będzie przedmiotem naszego zadania.
Notacja Łukasiewicza, w przeciwieństwie do notacji tradycyjnej zwanej "wrostkową" (bo operaratory "wrastają" między argumentami) jest nazywana "przedrostkową", bo operatory umieszcza się w niej przed argumentami, np:
+ 2 2
daje w wyniku 4, a:
/ 2 0
jest błędne, bo wymaga niewykonalnego dzielenia przez zero. Oczywiście, w notacji polskiej można zapisywać dowolnie długie ciągi operacji z wieloma operatorami np:
/ + 6 6 3
daje wyniku 4, bo jest równoważnik tradycyjnego wyrażenia (6 + 6) / 3 (tu juz nie możemy uniknąc użycia nawiasów).
Twoim zadaniem jest napisanie programu, który oblicza wartość wyrażenia zapisanego w notacji polskiej albo sygnalizuje bład, gdy nie jest to możliwe.
Przyjmujemy następujące założenia:
- posługujemy się wyłącznie arytmetyką całkowitą, a więc wyrażenie
/ 10 3
ma wartość 3 (a nie 3.333....) - używamy wyłącznie czterech podstawowych operatorów: + - / *
- operatory i argumenty rozdzielane są przynajmniej jedną spacją
- obliczenie wartości wyrażenia może się nie udać, gdy wymusza wykonanie dzielenia przez zera albo gdy liczba operatorów nie pasuje do liczby argumentów
Wejście
Nieznana z góry liczba linii tekstu, z których każdy zawiera wyrażenie w notacji polskiej nie dłuższe niż 1000 znaków. Wszystkie liczby, a także wszystkie wyniki pośrednich operacji mieszczą się w zakresie <-2147483648..2147483647>. Używa się wyłącznie czterech operatorów.
Wyjście
Tyle wierszy tesktu, ile było ich na wejściu, a każdy zawiera daną całkowitą będącą wartością wczytanego wyrażenia lub słowo ERR, jeśli wyrażenie było błędne.
Przykład
Wejście:
+ / 2 2 2
/ 2 - 2 2
- 2 2 2
Wyjście:
3
ERR
ERR
Informacje dodatkowe
-
program zostanie uruchomiony 10 razy dla różnych zestawów danych
-
każde poprawne rozwiązanie daje 10% punktacji zadania
-
zadanie ma wartość punktową 5,0
Dodane przez: | Sławomir Wernikowski |
Data dodania: | 2014-01-02 |
Limit czasu wykonania programu: | 1s |
Limit długości kodu źródłowego | 2500B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | C CSHARP C++ 4.3.2 CPP C99 JAVA PAS-GPC PAS-FPC PERL PERL6 PHP PYTHON PYTHON3 PY_NBC RUBY |