Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
WIPING53 - Interpreter |
Zadanie eliminacyjne w konkursie WIPING5 organizowanym przez
Wydział Informatyki Zachodniopomorskiego Uniwersytetu Technologicznego w Szczecinie
Interpreter
Twoim zadaniem jest napisanie interpretera języka WIPING, który – jak się spodziewamy – już niebawem dotrze na szczyty rankingu TIOBE.
Język opiera się na zbiorze funkcji wbudowanych, a każda linia programu zawiera jedno wyrażenie języka. Język nie zna pojęcia zmiennej – zamiast tego używa predefiniowanej jednowymiarowej tablicy o nazwie Ints, której rozmiar trzeba ustalić własnoręcznie. Elementy w tablicy indeksowane są od zera, a składnia indeksowania jest identyczna z używaną w języku „C”. Nieznane są również operatory arytmetyczne – zamiast nich używa się dedykowanych funkcji. Język jest „case-sensitive” - wielkość liter ma znaczenie. Interpreter wykonuje program linia po liniii – nie rozpocznie analizy linii następnej, jeśli nie zakończył wykonania linii poprzedniej. Niewykorzystany wynik funkcji jest tracony.
Oto zbiór funkcji dostępnych w języku WIPING:
- SetIntBuffer(n, val) – tworzy tablicę o rozmiarze n, wypełnioną wartościami val (tylko jedna instancja tablicy może istnieć w danej chwili; ponowne wywołanie funkcji spowoduje utratę poprzedniej instancji); funkcja zwraca długość utworzonej tablicy.
- SetIntBuffer(n) - tworzy tablicę o rozmiarze n, wypełnioną wartościami 0 (tylko jedna instancja tablicy może istnieć w danej chwili; ponowne wywołanie polecenia spowoduje utratę poprzedniej instancji); zwraca długość utworzonej tablicy.
- Print(val) – wypisuje na stdout wartość argumentu wraz ze znakiem nowej linii.
- Sum(val1, val2) – dodaje dwie liczby i zwraca ich sumę.
- Mul(val1, val2) – mnoży dwie liczby i zwraca ich sumę.
- Increase(dest, val) – dodaje wartość val do dest i zwraca nową wartość dest.
- Assign(dest, val) – zapisuje podaną wartość val w miejscu dest; zwraca zapisaną wartość.
Jako argument val można użyć stałej, odwołania do elementu tablicy Ints lub wywołania funkcji, a jako argument dest można użyć wyłącznie odwołania do elementu tablicy Ints.
Interpreter zatrzymuje się natychmiast po wykryciu jednego z następujących błędów:
-
odwołania się do nieistniejącego elementu tablicy Ints – w takim przypadku interpreter wyprowadza na stdout komunikat o treści:
Index out of range
i kończy pracę -
użycia stałej zamiast odwołania do elementu tablicy – w takim przypadku interpreter wyprowadza na stdout komunikat o treści:
Passed argument is const value where array reference is expected
i kończy pracę -
błędu składni (nieznana funkcja, niepoprawne stałe oraz wszelkie inne usterki, o których nie wspomniano wcześniej) – w takim przypadku interpreter wyprowadza na stdout komunikat o treści:
Syntax error
i kończy pracę
Wejście
- nieznana z góry, niezerowa liczba wierszy, zawierających program w języku WIPING
Wyjście
- wynik działania interpretera
Przykład
Wejście:
SetIntBuffer(5, 10)
SetIntBuffer(3, 5)
Increase(Ints[0], 5)
Print(Ints[0])
Print(Sum(Ints[0], Ints[2]))
Print(Increase(Ints[2], 7))
Increase(Ints[3], 7)
Wyjście:
10
15
12
Index out of range
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: | 2016-11-10 |
Limit czasu wykonania programu: | 1s |
Limit długości kodu źródłowego | 15000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | C-CLANG C CSHARP C++ 4.3.2 CPP CPP14 CPP14-CLANG C99 JAVA OBJC PAS-GPC PAS-FPC PERL PERL6 PHP PYTHON PYPY PYTHON3 PY_NBC RUBY |