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

Podobne dokumenty