Informatyka I rok Laboratorium Metod Programowania 2001/2002 Zadanie z dnia: 15.04.02 Termin odbioru: 29.04.02 Zadanie 3 Napisz program Kalk implementujący interaktywny kalkulator z pamięcią. Po wywołaniu program Kalk ma wyświetlać znak zachęty (np. '>'), czekać na komendy użytkownika i je wykonywać. Ponadto na początku swego działania oraz przed zwolnieniem i po zwolnieniu pamięci Kalk ma wypisać wartości funkcji MemAvail i MaxAvail. Wywołanie z większą od zera liczbą parametrów powinno spowodować wypisanie komunikatu o błędzie, wypisanie informacji o sposobie wywołania i zakończenie działania programu. * Komendy Komendy są jednowierszowe i mogą mieć jedną z następujących postaci: 1) = 2) 3) Ad 1) Kalk ma wyliczyć wartość wyrażenia wyr i zapamiętać ją na zmiennej id. W wyrażeniu mogą występować zmienne. Składnia wyrażeń jest podana dalej. Ad 2) Kalk ma wypisać bieżącą wartość zmiennej id. Ad 3) Kalk powinien zapytać użytkownika, czy ten na pewno chce zakończyć pracę i, w przypadku uzyskania odpowiedzi twierdzącej, zakończyć działanie. W przypadku napotkania błędu w komendzie (zła składnia, użycie niezainicjalizowanej zmiennej, dzielenie przez zero, niewłaściwa odpowiedź na pytanie o zakończenie pracy) należy wypisać komunikat o błędzie, potraktować komendę jako niebyłą i przejść do wykonywania następnej. * Uwagi 1) Do analizy treści wyrażeń _trzeba_ zastosować metodę zejść rekurencyjnych. 2) Do pamiętania wartości zmiennych _trzeba_ użyć drzew BST. 3) Drzewa BST _trzeba_ zaimplementować w oddzielnym module. * Do omówienia 1) Metoda zejść rekurencyjnych (procedura pobierzSymbol, problem wczytywania o jeden symbol za dużo). 2) Moduły w Turbo Pascalu. 3) Interfejs modułu BST. 3) Procedura Val. 4) Operacje porównywania (<, <=, ...) na napisach. 5) Ewentualnie funkcje ReadKey i UpCase. Załączniki ---------- * Gramatyka wyrażeń ::= { } ::= + | - ::= { } ::= * | / ::= ( ) | | to liczba naturalna, to niepusty ciąg liter. Rozróżniamy wielkie i małe litery. Operacje na liczbach przpeprowadzamy w standardowej arytmetyce Turbo Pascala (typ Integer). Operacja / oznacza dzielenie całkowite (div). * Przykładowa sesja z Kalk (bez informacji o zajętości pamięci) c:\>kalk > ala = 1 > ala ala=1 >ola = ala * 2+1 > ela = ula +1 Błąd: zmienna ula nie jest zdefiniowana >ela Błąd: zmienna ela nie jest zdefiniowana >ela= (ola + 1)*4 - ala / 2 > Czy chcesz już zakończyć pracę (T/N)? N >ela ela=16 >ola ola=3 > Czy chcesz już zakończyć pracę (T/N)? T Koniec pracy z programem Kalk. C:\>