Zajęcia P3. Kalkulator
1. Cel ćwiczeń
Celem ćwiczeń jest utrwalenie dotychczas poznanych wiadomości i zapoznanie się z mechanizmem
przekazywania wartości pomiędzy analizatorem leksykalnym i składniowym oraz w trakcie tworzenia
drzewa składniowego. Efektem pracy będzie programowy kalkulator naukowy.
2. Zadania do realizacji indywidualnej
Tworzony kalkulator przetwarza dane wejściowe wiersz po wierszu. Poszczególne wiersze mogą zawierać:
- nic (są puste),
- błąd (token ‘error’),
- wyrażenie arytmetyczne z liczbami całkowitymi (Zad.3.1),
- wyrażenie arytmetyczne z liczbami zmiennoprzecinkowymi (Zad.3.2-4),
- wyrażenie arytmetyczne wzbogacone funkcjami (Zad. 3.3-4),
- podstawienie do pamięci wyrażenia arytmetycznego, które może zawierać odwołania do pamięci
(Zad.3.4).
Wiersze danych kończą się znakiem ‘\n’. W związku z tym nie należy go usuwać z wejścia, ale
przekazywać jako token jednoznakowy. Wszystkie pozostałe białe znaki należy usuwać.
Zad. 2.1. Uprzejmy kalkulator dla liczb całkowitych realizujący podstawowe operacje arytmetyczne (+,-
,*,/, neg) oraz grupowanie podwyrażeń (nawiasy). Kalkulator powinien witać użytkownika miłymi
słowami, wyświetlać znak zachęty ‘>’ na początku każdego wiersza, w którym użytkownik może
wprowadzić dane oraz podziękować za współpracę po zakończeniu pracy jedną z komend „Bye”, „Exit” lub
„Quit”.
Zad. 2.2. Kalkulator dla liczb całkowitych i zmiennoprzecinkowych realizujący podstawowe operacje
arytmetyczne (+,-,*,/, neg) oraz grupowanie podwyrażeń (nawiasy).
Zad. 2.3. Wzbogacenie kalkulatora o możliwość wywołania funkcji trygonometrycznych (sin(•), cos(•),
tg(•), ctg(•)), pierwiastka sqrt(•) i kwadratu sqr(•).
Zad. 2.4. Wzbogacenie kalkulatora o możliwość podstawiania wartości wyrażenia do pamięci oraz
wykorzystywania zawartości pamięci w wyrażeniach.
Przykładowa ‘sesja’ kalkulatora:
Witam! Proszę wprowadzić w osobnych wierszach wyrażenia arytmetyczne.
Mo
ci M1..M100:
żna korzystać z pamię
> 11 + 2 * ( 3 + 5 )
/* liczby całkowite */
Wynik = 27
> 12.34 + 45. + .67
/* liczby rzeczywiste */
Wynik = 58.01
> sqr(sin(4.1+0.9))+sqr(cos(5*1))
/* jedynka trygonometryczna */
Wynik = 1
> M1 = sqrt( sqr(3) + sqr(4))
/* podstawienie wyniku wyrażenia do pamięci */
M1 = 5
> M100 = sqrt(121)
M100 = 11
> M100 – M1
Wynik = 6
> Exit
Dziękuję za współpracę ;-)
3. Zadania do samodzielnego wykonania:
Zad. 3.1. Rozszerzenie kalkulatora o możliwość obliczania wyrażeń logicznych (<, >, <=, >=, =, <>), które
zwracają wartość 1 (true) lub 0 (false).