Zadania egzaminacyjne
Transkrypt
Zadania egzaminacyjne
Zadania egzaminacyjne (zachowana numeracja z instrukcji laboratoryjnych) LABORATORIUM 2 4. Ułamki: zmodyfikuj funkcję naString – tak, by ułamek był wyświetlany w postaci właściwej, czyli część całkowita i ułamkowa. Wskazówka: po wyznaczeniu wartości bezwzgl. licznika i mianownika wydziel część całkowitą przez dzielenie div i pozostały licznik – reszta z dzielenia, operator mod. 5. Zadeklaruj i przetestuj działanie funkcji rekurencyjnej suma typu : int*int→int, gdzie suma(m,n)=m+(m+1)+(m+2)+...+(m+(n-1))+(m+n), m≥0, n≥0. Wsk.: zapisz dwa warunki dla (m,0) i (m,n). Zabezpiecz program przed możliwością nieprawidłowego podania argumentów. 7. Opracuj zestaw funkcji arytmetycznych dla liczb zespolonych (++,--,**,// - zob. Wykład 2– Przykłady programów). Sprawdź działanie tych funkcji na kilku przykładach. Uzupełnij zestaw o funkcję ‘sqrt’ obliczającą pierwiastki liczby zespolonej A+j⋅B. Wsk.: Każdy pierwiastek a+j⋅b musi spełniać równanie (a+j⋅b)⋅(a+j⋅b)=(A+j⋅B) 9. a) Zadeklaruj i przetestuj działanie funkcji test:int*int*int→bool, taką że niePodzielne(a,c) and niePodzielne(a + 1,c) ... and niePodzielne(b,c) test(a,b,c) dla b≥a jest wartością logiczną powyższego wyrażenia. Zatem test(a,b,c) sprawdza, czy liczby w przedziale (a,b) nie są podzielne przez c. b) Zadeklaruj infiksowy operator równoważności i sprawdź jego działanie. 10. Zadeklaruj i przetestuj działanie funkcji pierwsza: int→bool, gdzie pierwsza (n)=true wtedy i tylko wtedy, gdy n jest liczba pierwszą. Wsk.: Liczba pierwsza to taka, której podzielnikami są tylko 1 i ona sama. Skonstruuj funkcję pomocniczą pierwsza’ z dwoma wariantami (kończącym rekurencję) pierwsza’(n,2) i pierwsza’(n,k) wywoływaną przez zasadniczą: fun pierwsza n = pierwsza' (n,n-1); 11. Zadeklaruj i przetestuj działanie funkcji podzielnaOdDo(od,do,dzielnik): int*int*int→int, wyszukującej najmniejszą liczbę z przedziału od...do podzielną przez dzielnik. 13. Zadeklaruj i przetestuj działanie funkcji wystOdIgo:string*int*char→int, gdzie wystOdIgo (str,i,ch)=liczba występowania znaku ch na pozycjach j w stringu str, gdzie j≥i. Wsk.: Funkcja dla i≥size str powinna zwracać 0. Zastosuj String.sub. 14. Zadeklaruj funkcję tylkoMaleLitery: string->bool badającą, czy wszystkie znaki w podanym stringu są małymi literami. Na przykład: tylkoMaleLitery ”abc” = true tylkoMaleLitery ”Abc” = false Wsk.: Wykorzystaj funkcję biblioteczną String.sub. Napisz funkcję pomocniczą tylkoMale(st,i) wywoływaną przez zasadniczą funkcję: tylkoMaleLitery(st) = tylkoMale(st, size st –1). 17. Zadeklaruj kilka rekordów zawierających dane książki: tytuł, nazwisko autora, rok wydania, cena. Napisz funkcję zmieniającą cenę w podanym rekordzie na nową, jeżeli poprzednio była wpisana wartość większa niż podana. LABORATORIUM 3 2. Uzupełnij zestaw instrukcji (deklaracja datatype instruction) o dzielenie. Jak reagować na wyjątek Div zdefiniowany i wywoływany przez moduł biblioteczny Math? Dopisz jego obsługę bezpośrednio w funkcji intInstr stosując konstrukcję handle. Podaj przykład wykonania. Wskazówka: instrukcja handle powinna się znajdować bezpośrednio po operacji y/x. 5. Wzorując się na programie procesora arytmetycznego zrealizuj procesor logiczny z operatorami koniunkcji i negacji operujący na liście elementów typu bool. Czy możliwe jest zgłaszanie przez nie wyjątków? Oblicz za pomocą programu kalkulatora wartość wyrażenia: not true and true. 6. Wzorując się na programie procesora arytmetycznego zrealizuj procesor logiczny z operatorami alternatywy i negacji operujący na liście elementów typu bool. Czy możliwe jest zgłaszanie przez nie wyjątków? Oblicz pomocą programu kalkulatora wartość wyrażenia: not true or false. 9. Napisz zmodyfikowaną funkcję intInstr, tak aby zgłaszała brak argumentu (1 lub 2) dla operacji ADD. Wskazówka: dopisz dwa dodatkowe warianty do funkcji intInstr. 10. Dopisz do listy instrukcji operacje na rejestrze X: WRX, RDX. Zmodyfikuj funkcję intInstr. Będzie ona teraz zwracała parę (stos, rejestr) i posiada trzy argumenty (instrukcja, stos, rejestr). Wartość początkową rejestru przyjmij jako zero. Wskazówka: funkcja intInstr może zawierać następujący wariant: intInstr(ADD, x::y::xs, rejX) = ((x+y)::xs, rejX) Wykonanie WRX oznacza przepisanie wartości z wierzchołka stosu do pola rejX. odwrotnie. Zrealizuj z użyciem rejestru obliczenia 3.0*(2.0+3.0) + 4.0*(2.0+3.0) RDX działa 13. Zdefiniuj wielowariantową funkcję intInstr (drugim argumentem jest dowolna lista il) za pomocą konstrukcji case. Do wyodrębniania elementów listy użyj instrukcji postaci let val (x1::x2::xs) = il in...end; Uwzględnij generowanie wyjątków przy nieprawidłowych wywołaniach funkcji. LABORATORIUM 4 część 1 2. Podaj deklarację funkcji typu int list -> int option odszukującej dwa najmniejsze elementy z listy liczb całkowitych. 10. Podaj definicję funkcji nty typu 'a list*int -> 'a option, która zwraca n-ty element na podanej liście (licząc od zera) . 12. Zaproponuj funkcję wstaw typu 'a list * int * 'a: 'a list wstawiającą do listy na podane miejsce (licząc od zera) określony element. LABORATORIUM 4 część 2 1. Napisz funkcję sprawdzającą, czy w rejestrze w kasie sklepowej nie występują powtórzenia „kodów kreskowych”. 3. Zmień ceny w rejestrze kasy sklepowej, tak by były wartościami typu real. Oblicz średnią cenę artykułu. Wsk.: może to być kilka funkcji. 5. Wyszukaj wszystkie artykuły o cenach zawartych w podanym zakresie (min,max). 7. Wyszukaj za pomocą odpowiedniej funkcji dwa najtańsze artykuły w sklepie. 9. Znajdź n-artykułów najdroższych w sklepie. Utwórz odpowiednią funkcję. Wsk.: najpierw posortuj. 10. Wyszukaj za pomocą odpowiedniej funkcji dwa najdroższe artykuły w sklepie. LABORATORIUM 5 3. Jaką funkcję realizuje przedstawiony na poniższym rysunku układ? Sprawdź za pomocą funkcji w dziedzinie boolowskiej. Wykaż formalnie. b S0 S1 a MUX 0 1 2 3 1 f 6. Dekoder jest układem o n wejściach i 2n wyjściach. Do dekodera 2:4 dołączono sygnały A, B. Zaproponuj układ, który dołączony do wyjść dekodera odtworzy sygnały A,B. Zrealizuj odpowiednie funkcje w dziedzinie boolowskiej. Wykaż formalnie poprawność działania. DX A 1 0 1 B 0 ? 2 3 8. Zaproponuj układ, który 4-bitowe słowo uzupełni 5-tym bitem parzystości (even), tzn. słowo oryginalne słowo z bitem parzystości 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 0 1 0 Jaką funkcję logiczną realizuje układ? Podaj specyfikację i zweryfikuj formalnie. Wsk.: Użyj bramek EXOR 9. Wykaż, że poniższy układ realizuje podaną funkcję. Wykonaj także kilka testów w dziedzinie boolowskiej. a b x = a (b + cd ) c d x A B 10. Koder ma zamieniać kod unitarny „1 z 10” na kod BCD. Jeżeli wyjściom a, b, c, d przyporządkować wagi – a=1, b=2, c=4, d=8, to otrzymuje się następujące wyrażenia logiczne a=x1+x3+x5+x7+x9 x1 x2 x3 ... x9 b=x2+x3+x6+x7 c=x4+x5+x6+x7 d=x8+x9 a b c d Zaproponuj programową, boolowską realizację kodera i wykaż, że odpowiada ona specyfikacji. 12. Sprawdź za pomocą testów, że następujące dwa układy kombinacyjnie nie generują identycznych wyjść. Wykaż to formalnie. b a c Y a c Y d 13. Górny moduł wyświetlacza 7-segmentowego jest zapalany zgodnie z funkcją x = ab d + acd + bcd + abc Zaproponuj układ złożony z multipleksera 4:1 i bramek, który zrealizuje taką funkcję. Zademonstruj jego działanie w dziedzinie boolowskiej. Wykaż formalnie jego poprawność. 14. Zrealizuj funkcję alternatywy dla 3 wejść wyłącznie za pomocą dwuwejściowych funkcji NAND (negacja koniunkcji). Przeprowadź test zupełny w dziedzinie boolowskiej. Zweryfikuj układ formalnie. 15. Zrealizuj funkcję koniunkcji dla 3 wejść wyłącznie za pomocą dwuwejściowych funkcji NAND (negacja koniunkcji). Przeprowadź test zupełny w dziedzinie boolowskiej. Zweryfikuj układ formalnie. 16. Zrealizuj funkcję alternatywy dla 3 wejść wyłącznie za pomocą dwuwejściowych funkcji NOR (negacja alternatywy). Przeprowadź test zupełny w dziedzinie boolowskiej. Zweryfikuj układ formalnie. 17. Zrealizuj funkcję koniunkcji dla 3 wejść wyłącznie za pomocą dwuwejściowych funkcji NOR (negacja alternatywy). Przeprowadź test zupełny w dziedzinie boolowskiej. Zweryfikuj układ formalnie. 18. Sprawdź za pomocą testów i formalnie czy układ podany na rysunku spełnia specyfikację podaną w tabeli poniżej. p q r y 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 LABORATORIUM 6 1. Napisz program w dziedzinie boolowskiej realizujący funkcję przerzutnika D (bez wejścia resetującego) na podstawie zero-jedynkowej tablicy prawdy. Udowodnij formalnie, że program ten odpowiada specyfikacji (zob. Wykł. 6). Użyj funkcji IF_POST(). 2. Napisz program realizujący sterowanie otwieraniem szlabanu kolejowego (U2, Wykł. 7). Przeprowadź kilka testów. Udowodnij poprawność. U2 = !B*B[i-1]*!C + U2[i-1]*!C 3. Przerzutnik D można zrealizować według rysunku obok. Przedstaw model w dziedzinie boolowskiej. Uzasadnij to formalnie (zob. Wykł. 6 i 7). C PULSE D Q MUX Q 4. Napisz program w dziedzinie boolowskiej realizujący funkcję przerzutnika SR na podstawie tablicy zero-jedynkowej. Uzasadnij, że jest on poprawny. Użyj funkcji IF_POST(). 5. Zaproponuj program realizujący funkcję blokowanego generatora fali prostokątnej (funkcjonującego jak na rysunku obok). EN Sprawdź jego działanie w dziedzinie boolowskiej. Udowodnij formalnie, że jest on poprawny. EN GEN Y Y 8. Jaką funkcję realizuje układ? Uzasadnij na podstawie testów i formalnie. EXOR xi 9. Przy pojawieniu się narastającego zbocza na wejściu blok przerzutnika T (uproszczonego) zmienia wyjście. Jak wygląda specyfikacja? Napisz program w dziedzinie boolowskiej realizujący funkcję przerzutnika i wykaż jego poprawność. BUF SET x xi-1 Q T CLR Q yi=yi-1