background image

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).  


Document Outline