graphlogo

Wydział Matematyki i Informatyki

Uniwersytetu Mikołaja Kopernika w Toruniu

2inf 2024/25 - Programowanie II, LE

[p2] Analiza leksykalna
Data zakończenia: 2024-10-23 15:40
Języki: cpp
Limit czasu: 1.0 s
Limit pamięci: 100 MB
Cel
Zadanie na użycie operacji sprawdzenia następnego znaku w strumieniu wejścia (metodą peek()) oraz rekurencję.


Zadanie
Napisz program, który ze standardowego wejścia wczyta wyrażenie matematyczne składające się z

  • liczb rzeczywistych,
  • operatorów binarnych (dwu-argumentowych) dodawania, odejmowania, mnożenia i dzielenia,
  • operatorów unarnych (jedno-argumentowych)"+" i "-",
  • nawiasów okrągłych "()"

oraz wypisze na standardowe wyjście liczbę powstałą w wyniku ewaluacji tego wyrażenia zaokrągloną do dwóch miejsc po przecinku.


Przykład
Wejście

  2+2*-(1+1/2)

Wyjście

  -1.00


Uwaga: w zamyśle zadanie miało na celu przećwiczenie używania operacji pobierania znaku ze strumienia i operacji anulowania pobrania znaku (w jezyku C funkcją ungetc()). Ze względu na ograniczenia systemu ZawodyWEB używanie funkcji typu ungetc() nie jest możliwe. Dlatego sugerowane było stworzenie funkcji które będą "próbować" odczytać znaki "+", "-", "*", "*", "/", "(", ")" poprzedzone ewentualnie białymi znakami oraz zwracać informację, czy ten odczyt się powiódł (można było np. próbować odczytać ciąg czarnych znaków długości 1 składący się tylko z konkretnego znaku). W języku C++ można natomiast użyć metody peek() (wywołanej z obiektu strumienia cin)...

Wskazówka:
Stwórz metody:

  • czynnik() - odpowiedzialną za odczyt operatorów unarnych (ewentualnie wywołując siebie rekurencyjnie) i liczb rzeczywistych oraz wywołującą funkcję wyrazenie() w pozostałych przypadkach (dla nawiasów),
  • skladnik() - odpowiedzialną za składanie operatorów mnożenia i dzielenia (ta funkcja ma wywoływać funkcję czynnik(),
  • wyrazenie() - odpowiedzialną za składanie operatorów binarnych (dwuargumentowych) dodawania i odejmowania (wywołując funkcję skladnik()) oraz odczyt nawiasów (wywołując siebie rekurencyjnie).

Powrót
© 2009-2020 • ZawodyWeb Team
IKS - Inwestycja w Kierunki Strategiczne na Wydziale Matematyki i Informatyki UMK

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego