Test GR: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 4: | Linia 4: | ||
</quiz> | </quiz> | ||
------------------------------ | |||
{theor}{TWIERDZENIE}[section] | |||
{rem}{UWAGA}[section] | |||
{corol}{WNIOSEK}[section] | |||
{fact}{FAKT}[section] | |||
{ex}{PRZYKŁAD}[section] | |||
{cw}{PYTANIE}[section] | |||
{defin}{DEFINICJA}[section] | |||
{lem}{LEMAT}[section] | |||
{prf}{DOWÓD} | |||
{sol}{ROZWIĄZANIE} | |||
{hint}{WSKAZÓWKA} | |||
{Języki regularne - Test} | |||
{Test wielokrotnego wyboru} | |||
{{cwiczenie|Monoidy|| | |||
<br> | |||
Wskaż, które z poniższych struktur są monoidami: | |||
; a. | |||
: <math>\displaystyle (\mathds{Z}_{mod\ 2}, \cdot)</math> | |||
; b. | |||
: <math>\displaystyle (\mathds{N}_1, +)</math>, gdzie | |||
<math>\displaystyle \mathds{N}_1=\{1,2,3,...\}</math> | |||
; c. | |||
: <math>\displaystyle (\mathds{N}_p,+)</math>, gdzie <math>\displaystyle \mathds{N}_p</math> jest zbiorem | |||
wszystkich liczb pierwszych | |||
; d. | |||
: <math>\displaystyle (\mathds{R}, \cdot)</math> | |||
; e. | |||
: <math>\displaystyle (\mathds{Z}, +)</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a, d, e | |||
</div></div> | |||
{{cwiczenie|Przynależność do języka|| | |||
<br> | |||
Wskaż stwierdzenia prawdziwe: | |||
; a. | |||
: <math>\displaystyle abbaaa \in \{aa,bb\}^*</math> | |||
; b. | |||
: <math>\displaystyle abbaaa \in \{a,b\}^*</math> | |||
; c. | |||
: <math>\displaystyle abbaaa \in \{abb,a\}^*</math> | |||
; d. | |||
: <math>\displaystyle abbaaa \in \{ba, ab\}^*</math> | |||
; e. | |||
: <math>\displaystyle abbaaa \in \{aa, ab, ba\}^*</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
b, c, e | |||
</div></div> | |||
{{cwiczenie|Homomorfizmy|| | |||
<br> | |||
Wskaż, które z poniższych odwzorowań są homomorfizmami: | |||
; a. | |||
: <math>\displaystyle h: (\mathds{R},+) \rightarrow (\mathds{Z},+)</math>, <math>\displaystyle h(x)=3x</math> | |||
; b. | |||
: <math>\displaystyle h: (\mathds{R},+) \rightarrow (\mathds{R},+)</math>, <math>\displaystyle h(x)=3x</math> | |||
; c. | |||
: <math>\displaystyle h: (\mathds{R}, \cdot) \rightarrow (\mathds{R}, \cdot)</math>, | |||
<math>\displaystyle h(x)=3x</math> | |||
; d. | |||
: <math>\displaystyle h: \{a,b\}^* \rightarrow \{a,b\}^*</math>, <math>\displaystyle h(a)=a^2</math>, | |||
<math>\displaystyle h(b)=ab^2</math> | |||
; e. | |||
: <math>\displaystyle h: \{a,b\}^* \rightarrow (\mathds{Z},+)</math>, <math>\displaystyle h(a)=1</math>, | |||
<math>\displaystyle h(b)=1</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
b, d, e | |||
</div></div> | |||
{{cwiczenie|System przepisujący|| | |||
<br> | |||
Dany niech będzie system przepisujący <math>\displaystyle RS=(\{a,b,c\}, | |||
\{(a,b),(b,c),(b,a),(cc,b))</math> oraz niech <math>\displaystyle I=\{ccb\}</math>. Wskaż | |||
stwierdzenia prawdziwe: | |||
; a. | |||
: <math>\displaystyle abc \in L_{gen}(RS, I)</math> | |||
; b. | |||
: <math>\displaystyle ccb \in L_{gen}(RS, I)</math> | |||
; c. | |||
: <math>\displaystyle bb \in L_{gen}(RS, I)</math> | |||
; d. | |||
: <math>\displaystyle aab \in L_{gen}(RS, I)</math> | |||
; e. | |||
: <math>\displaystyle aa \in L_{gen}(RS, I)</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
b, c, e | |||
</div></div> | |||
{{cwiczenie|Wyrażenie regularne|| | |||
<br> | |||
Wyrażenie regularne | |||
<center><math>\displaystyle ((aa+bb)^*(ab+ba)(aa+bb)^*(ab+ba))^*(aa+bb)^*</math></center> | |||
reprezentuje | |||
język: | |||
; a. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = 2k</math>, <math>\displaystyle \sharp_bw = 2l</math>, | |||
<math>\displaystyle k,l >0\}</math> | |||
; b. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw - \sharp_bw = 0 (mod 2)\}</math> | |||
; c. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = \sharp_bw = 2k, k \geq | |||
0\}</math> | |||
; d. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw - \sharp_bw = 1 (mod 2)\}</math> | |||
; e. | |||
: <math>\displaystyle \{w \in \{a,b\}^*: \sharp_aw = 4k</math>, <math>\displaystyle \sharp_bw = 4l</math>, <math>\displaystyle k, | |||
l \geq 0\}</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a | |||
</div></div> | |||
{{cwiczenie|Język regularny|| | |||
<br> | |||
Niech <math>\displaystyle A=\{a,b\}</math> oraz <math>\displaystyle L=aA^*a</math>. Wskaż zdania prawdziwe: | |||
; a. | |||
: minimalny automat akceptujący <math>\displaystyle L</math> ma 5 stanów | |||
; b. | |||
: ilość klas równoważności prawej kongruencji syntaktycznej | |||
<math>\displaystyle P_L^r</math> wyznaczonej przez <math>\displaystyle L</math> jest równa 4 | |||
; c. | |||
: <math>\displaystyle A^* \backslash L = bA^*b + b</math> | |||
; d. | |||
: <math>\displaystyle A^* \backslash L = bA^*+aA^*b+a+1</math> | |||
; e. | |||
: monoid przejśc minimalnego automatu akceptującego <math>\displaystyle L</math> ma 6 | |||
elementów | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
b, d, e | |||
</div></div> | |||
{{cwiczenie|Język regularny a automat|| | |||
<br> | |||
Niech <math>\displaystyle L</math> będzie dowolnym językiem regularnym. Wskaż zdania | |||
prawdziwe: | |||
; a. | |||
: <math>\displaystyle L</math> jest rozpoznawany przez pewien niedeterministyczny | |||
automat skończenie stanowy z pustymi przejściami | |||
; b. | |||
: <math>\displaystyle L</math> jest rozpoznawany przez automat deterministyczny | |||
skończenie stanowy | |||
; c. | |||
: <math>\displaystyle L</math> jest rozpoznawany przez niedeterministyczny automat | |||
z pustymi przejściami o jednoelementowym zbiorze stanów początkowych | |||
; d. | |||
: Nie istnieje automat niedeterministyczny z pustymi | |||
przejściami rozpoznający <math>\displaystyle L</math> i taki, że zbiór stanów początkowych | |||
jest jednoelementowy | |||
; e. | |||
: Nie istnieje gramatyka lewoliniowa generująca <math>\displaystyle L</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a, b, c | |||
</div></div> | |||
{{cwiczenie|Język regularny a automat|| | |||
<br> | |||
Niech <math>\displaystyle L_1</math>, <math>\displaystyle L_2</math> będą językami rozpoznawanymi odpowiednio przez | |||
automaty o <math>\displaystyle n_1</math> i <math>\displaystyle n_2</math> stanach. Aby stwierdzić, dla dowolnego | |||
słowa <math>\displaystyle w</math>, czy jest ono rozpoznawane przez oba automaty, wystarczy | |||
skonstruować odpowiedni automat mający | |||
; a. | |||
: <math>\displaystyle n_1 \cdot n_2</math> stanów | |||
; b. | |||
: <math>\displaystyle O(n_1+n_2)</math> stanów | |||
; c. | |||
: <math>\displaystyle n_1</math> stanów | |||
; d. | |||
: <math>\displaystyle n_2</math> stanów | |||
; e. | |||
: 3 stany | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a, b | |||
</div></div> | |||
{{cwiczenie|Wyrażenia regularne|| | |||
<br> | |||
Język <math>\displaystyle L</math> składa się ze wszystkich słów nad alfabetem <math>\displaystyle A=\{a,b\}</math> | |||
nie zawierających podsłowa <math>\displaystyle a^3</math>. Wskaż wyrażenie regularne | |||
reprezentujące <math>\displaystyle L</math>: | |||
; a. | |||
: <math>\displaystyle (b^*(1+a+aa)b^*)^*</math> | |||
; b. | |||
: <math>\displaystyle (b^*(1+a+aa)bb^*)^*</math> | |||
; c. | |||
: <math>\displaystyle (b+ab+aab)^*+(b+ab+aab)^*a+(b+ab+aab)^*aa</math> | |||
; d. | |||
: <math>\displaystyle ((1+a+aa)bb^*)^*(1+a+aa)</math> | |||
; e. | |||
: <math>\displaystyle b^*(a+aa)bb^*)^*(1+a+aa)</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
c, d, e | |||
</div></div> | |||
{{cwiczenie|Języki regularne - warunki równoważne|| | |||
<br> | |||
Wskaż warunki równoważne temu, by język <math>\displaystyle L</math> był akceptowany przez | |||
automat skończenie stanowy: | |||
; a. | |||
: Istnieje liczba naturalna <math>\displaystyle N \geq 1</math> taka, że każde słowo | |||
<math>\displaystyle w \in L</math> o długości <math>\displaystyle |w| \geq N</math> można przedstawić jako katenację | |||
<math>\displaystyle w = v_1uv_2</math>, gdzie <math>\displaystyle v_1, v_2 \in A^*</math>, <math>\displaystyle u \in A^+</math> oraz <math>\displaystyle v_1u^*v_2 | |||
\subset L</math>. | |||
; b. | |||
: Istnieje skończony monoid <math>\displaystyle M</math> i homomorfizm <math>\displaystyle \phi: A^* | |||
\rightarrow M</math> taki, że <math>\displaystyle \phi^{-1}(\phi(L)) = L</math>. | |||
; c. | |||
: <math>\displaystyle L</math> jest sumą wybranych klas równoważności pewnej | |||
kongruencji <math>\displaystyle \rho</math> na <math>\displaystyle A^*</math>: <center><math>\displaystyle L = \cup_{w \in L}[w]_\rho.</math></center> | |||
; d. | |||
: <math>\displaystyle L \in \mathcal{REG}(A^*)</math>. | |||
; e. | |||
: <math>\displaystyle L</math> jest akceptowany przez deterministyczny automat | |||
skończenie stanowy z jednym stanem końcowym. | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
b,d | |||
</div></div> | |||
{{cwiczenie|Automat skończenie stanowy|| | |||
<br> | |||
Automat <math>\displaystyle \mathcal{A}=(S, A, s_0, f, F)</math>, gdzie <math>\displaystyle S=\{s_0, s_1, s_2, | |||
s_3\}</math>, <math>\displaystyle A=\{a,b\}</math>, <math>\displaystyle F=\{s_1\}</math>, { | |||
{| border=1 | |||
|+ <span style="font-variant:small-caps">Uzupelnij tytul</span> | |||
|- | |||
| <math>\displaystyle f</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_2</math> || | |||
<math>\displaystyle s_3</math> | |||
|- | |||
| <math>\displaystyle a</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_3</math> || <math>\displaystyle s_2</math> | |||
|- | |||
| <math>\displaystyle b</math> || <math>\displaystyle s_3</math> || <math>\displaystyle s_2</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_0</math> | |||
|- | |||
| | |||
|} | |||
} | |||
; a. | |||
: jest automatem minimalnym | |||
; b. | |||
: rozpoznaje język <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = 2k, | |||
\sharp_bw = 2l+1</math>, <math>\displaystyle k,l \geq 0\}</math> | |||
; c. | |||
: rozpoznaje język <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = 2k, | |||
\sharp_bw = 2l</math>, <math>\displaystyle k,l \geq 0\}</math> | |||
; d. | |||
: rozpoznaje język <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = 2k+1, | |||
\sharp_bw = 2l</math>, <math>\displaystyle k,l \geq 0\}</math> | |||
; e. | |||
: rozpoznaje język <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = 2k+1, | |||
\sharp_bw = 2l+1</math>, <math>\displaystyle k,l \geq 0\}</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a,d | |||
</div></div> | |||
{{cwiczenie|Równość wyrażeń regularnych|| | |||
<br> | |||
Które z poniższych równości dla wyrażeń regularnych są prawdziwe? | |||
; a. | |||
: <math>\displaystyle r^*r^*=r^*</math> | |||
; b. | |||
: <math>\displaystyle (r+s)^*=r^*+s^*</math> | |||
; c. | |||
: <math>\displaystyle (r^*+s^*)^*=(r^*s^*)^*</math> | |||
; d. | |||
: <math>\displaystyle r+r=r</math> | |||
; e. | |||
: <math>\displaystyle (rs)^*r=r(sr)^*</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a,c,d,e | |||
</div></div> | |||
{{cwiczenie|Języki regularne|| | |||
<br> | |||
Wskaż języki regularne: | |||
; a. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = \sharp_bw\ (mod\ 3)\}</math> | |||
; b. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw = \sharp_bw\}</math> | |||
; c. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ |w|=2^n, n > 0\}</math> | |||
; d. | |||
: <math>\displaystyle \{w \in \{a,b\}^*:\ \sharp_aw \cdot \sharp_bw = 100\}</math> | |||
; e. | |||
: <math>\displaystyle \{a^n:\ n=3k </math> lub <math>\displaystyle n=5k,\ k \geq 0\}</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a,d,e | |||
</div></div> | |||
{{cwiczenie|Automat skończenie stanowy|| | |||
<br> | |||
Dany jest automat <math>\displaystyle \mathcal{A}=(S, A, s_0, f, F)</math>, gdzie | |||
<math>\displaystyle S=\{s_0,s_1,s_2\}</math>, <math>\displaystyle A=\{a,b\}</math>, <math>\displaystyle F=\{s_0,s_1\}</math>,<br> | |||
{ | |||
{| border=1 | |||
|+ <span style="font-variant:small-caps">Uzupelnij tytul</span> | |||
|- | |||
| <math>\displaystyle f</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_2</math> | |||
|- | |||
| <math>\displaystyle a</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_2</math> | |||
|- | |||
| <math>\displaystyle b</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_2</math> || <math>\displaystyle s_2</math> | |||
|- | |||
| | |||
|} | |||
} | |||
Wskaż zdania prawdziwe: | |||
; a. | |||
: <math>\displaystyle L(\mathcal{A})=(a^2+b)^*(a+1)</math>. | |||
; b. | |||
: Równoważny automat minimalny ma 2 stany. | |||
; c. | |||
: Jeśli <math>\displaystyle w \in L(\mathcal{A})</math>, to dla każdych <math>\displaystyle v,u \in A^*</math> takich, że | |||
<math>\displaystyle w=vbu</math> zachodzi <math>\displaystyle \sharp_av = 2k</math> dla pewnego <math>\displaystyle k \geq 0</math>. | |||
; d. | |||
: <math>\displaystyle a^*b^* \subset L(\mathcal{A})</math>. | |||
; e. | |||
: Jeśli <math>\displaystyle w \in L(\mathcal{A})</math>, to <math>\displaystyle a^2b</math> jest podsłowem | |||
słowa <math>\displaystyle w</math>. | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a,c | |||
</div></div> | |||
{{cwiczenie|Automat niedeterministyczny|| | |||
<br> | |||
Dany niech będzie automat niedeterministyczny <math>\displaystyle \mathcal{A}_{ND}=(Q, | |||
A, \{q_0\}, f, F)</math>, gdzie <math>\displaystyle Q=\{q_0, q_1, q_2\}</math>, <math>\displaystyle A=\{a,b\}</math>, | |||
<math>\displaystyle F=\{q_2\}</math>,<br> | |||
{ | |||
{| border=1 | |||
|+ <span style="font-variant:small-caps">Uzupelnij tytul</span> | |||
|- | |||
| <math>\displaystyle f</math> || <math>\displaystyle q_0</math> || <math>\displaystyle q_1</math> || <math>\displaystyle q_2</math> | |||
|- | |||
| <math>\displaystyle a</math> || <math>\displaystyle \{q_1\}</math> || <math>\displaystyle \{q_0,q_2\}</math> || <math>\displaystyle \{q_2\}</math> | |||
|- | |||
| <math>\displaystyle b</math> || <math>\displaystyle \emptyset</math> || <math>\displaystyle \emptyset</math> || <math>\displaystyle \{q_1\}</math> | |||
|- | |||
| | |||
|} | |||
} | |||
Wskaż zdania prawdziwe: | |||
; a. | |||
: <math>\displaystyle L(\mathcal{A}_{ND})=a^2(a+ba)^*</math>. | |||
; b. | |||
: <math>\displaystyle L(\mathcal{A}_{ND})=a(aa^*b)^*aa^*</math>. | |||
; c. | |||
: Równoważny automat deterministyczny posiada 3 stany. | |||
; d. | |||
: <math>\displaystyle L(\mathcal{A}_{ND})=a^2(a^*b)^*aa^*</math>. | |||
; e. | |||
: Równoważny minimalny automat deterministyczny posiada 4 stany. | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a,b,e | |||
</div></div> | |||
{{cwiczenie|Równość <math>\displaystyle \mathcal{REC}(A^*)=\mathcal{REG}(A^*)</math>|| | |||
<br> | |||
Twierdzenie orzekające o równości zachodzącej pomiędzy rodziną | |||
języków regularnych a rodziną języków rozpoznawanych przez automaty | |||
o skończonej liczbie stanów znane jest jako: | |||
; a. | |||
: twierdzenie Nerode'a | |||
; b. | |||
: teza Churcha | |||
; c. | |||
: lemat Ardena | |||
; d. | |||
: lemat o pompowaniu | |||
; e. | |||
: twierdzenie Kleene'ego | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
e | |||
</div></div> | |||
{{cwiczenie|Monoid przejść|| | |||
<br> | |||
Wskaż monoid przejść automatu o następującej funkcji przejścia: <br> | |||
{ | |||
{| border=1 | |||
|+ <span style="font-variant:small-caps">Uzupelnij tytul</span> | |||
|- | |||
| <math>\displaystyle f</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_2</math> || <math>\displaystyle s_3</math> | |||
|- | |||
| <math>\displaystyle a</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_0</math> || <math>\displaystyle s_3</math> || <math>\displaystyle s_2</math> | |||
|- | |||
| <math>\displaystyle b</math> || <math>\displaystyle s_3</math> || <math>\displaystyle s_2</math> || <math>\displaystyle s_1</math> || <math>\displaystyle s_0</math> | |||
|- | |||
| | |||
|} | |||
} | |||
; a. | |||
: <math>\displaystyle (\{\tau_{\mathcal{A}}(1),\tau_{\mathcal{A}}(a),\tau_{\mathcal{A}}(b),\tau_{\mathcal{A}}(ab)\}, | |||
\circ)</math> | |||
; b. | |||
: <math>\displaystyle (\{\tau_{\mathcal{A}}(1),\tau_{\mathcal{A}}(a)\},\circ)</math> | |||
; c. | |||
: <math>\displaystyle (\{\tau_{\mathcal{A}}(1),\tau_{\mathcal{A}}(a),\tau_{\mathcal{A}}(ab)\},\circ)</math> | |||
; d. | |||
: <math>\displaystyle (\{\tau_{\mathcal{A}}(1),\tau_{\mathcal{A}}(a),\tau_{\mathcal{A}}(b)\},\circ)</math> | |||
; e. | |||
: <math>\displaystyle (\{\tau_{\mathcal{A}}(a),\tau_{\mathcal{A}}(b),\tau_{\mathcal{A}}(ab),\tau_{\mathcal{A}}(ba)\}, | |||
\circ)</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a | |||
</div></div> | |||
{{cwiczenie|Problemy rozstrzygalne|| | |||
<br> | |||
Niech <math>\displaystyle L_1,L_2</math> będą językami regularnymi. Wskaż problemy | |||
rozstrzygalne. | |||
; a. | |||
: <math>\displaystyle w \in L_1</math> | |||
; b. | |||
: <math>\displaystyle w \in L_1 \cap L_2</math> | |||
; c. | |||
: <math>\displaystyle L_1 \cap L_2 = \emptyset</math> | |||
; d. | |||
: nieskończoność <math>\displaystyle L_1</math> | |||
; e. | |||
: <math>\displaystyle L_1 = \emptyset</math> | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a,b,c,d,e | |||
</div></div> | |||
{{cwiczenie|Algorytm determinizacji automatu|| | |||
<br> | |||
Algorytm determinizacji automatu: | |||
; a. | |||
: jest deterministyczny | |||
; b. | |||
: działa w czasie wielomianowym | |||
; c. | |||
: może się zapętlić | |||
; d. | |||
: działa w czasie eksponencjalnym | |||
; e. | |||
: kończy działanie błędem, jeśli na wejściu podany został | |||
automat deterministyczny | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a, d | |||
</div></div> | |||
{{cwiczenie|Algorytmy minimalizacji automatu|| | |||
<br> | |||
Wskaż zdania prawdziwe: | |||
; a. | |||
: istnieje algorytm minimalizacji automatu działający w | |||
czasie <math>\displaystyle n\log n</math> | |||
; b. | |||
: żaden algorytm minimalizacji nie może działać szybciej niż | |||
w czasie <math>\displaystyle O(n^2)</math> | |||
; c. | |||
: algorytm minimalizacji zawsze zwróci automat o mniejszej | |||
liczbie stanów niż automat podany na wejściu | |||
; d. | |||
: algorytmy minimalizacji są algorytmami | |||
niedeterministycznymi | |||
; e. | |||
: algorytmy minimalizacji nie działają dla automatów | |||
jednostanowych | |||
}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> | |||
a | |||
</div></div> | |||
------------------------------- | |||
Test 11 | |||
<quiz type="exclusive"> | |||
Deklaracja data Nat = Zero | Nast Nat | |||
<wrongoption reply="Źle">deklaruje Zero jako element istniejącego wcześniej typu Nat</wrongoption> | |||
<wrongoption reply="Źle">deklaruje Nast jako funkcję działającą na istniejącym wcześniej typie Nat</wrongoption> | |||
<rightoption reply="Dobrze">tworzy nowy typ o nazwie Nat; do typu tego należy m.in. element Zero</rightoption> | |||
<wrongoption reply="Źle">jest niepoprawna</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Dla liczb naturalnych zdefiniowanych jak powyżej dodawanie f można | |||
określić pisząc f (x, Zero) \= x oraz: | |||
<wrongoption reply="Źle">f (x, Nast y) \= f (Nast x, y)</wrongoption> | |||
<rightoption reply="Dobrze">f (x, Nast y) \= Nast (f (x, y))</rightoption> | |||
<wrongoption reply="Źle">f (Nast x, Nast y) \= Nast (f (x, y))</wrongoption> | |||
<wrongoption reply="Źle">f (Nast x, y) \= Nast (f (x, y))</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Załóżmy, że mamy już zdefiniowane dodawanie liczb naturalnych f. | |||
Która z poniższych definicji poprawnie zdefiniuje operator dodawania liczb naturalnych w typowej dla Haskella postaci rozwiniętej? Pomijamy kwestię sygnatury. | |||
<wrongoption reply="Źle">+ \= curry f</wrongoption> | |||
<wrongoption reply="Źle">+ \= f</wrongoption> | |||
<rightoption reply="Dobrze">(+) \= curry f</rightoption> | |||
<wrongoption reply="Źle">(+) \= f</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Która definicja poprawnie określi funkcję f pobierającą pierwszy element | |||
pary? Pomijamy kwestię sygnatury. | |||
<wrongoption reply="Źle">f x y \= x</wrongoption> | |||
<rightoption reply="Dobrze">f (x, y) \= x</rightoption> | |||
<wrongoption reply="Źle">(f) x y \= x</wrongoption> | |||
<wrongoption reply="Źle">(f) (x, y) \= x</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Która lista jest niepoprawna? | |||
<wrongoption reply="Źle">[1, 2, 3]</wrongoption> | |||
<rightoption reply="Dobrze">[1, [2]]</rightoption> | |||
<wrongoption reply="Źle">[[1, 2, 3], [4, 5], [6]]</wrongoption> | |||
<wrongoption reply="Źle">[[], []]</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Operator ++ służy w Haskellu do: | |||
<rightoption reply="Dobrze">łączenia list</rightoption> | |||
<wrongoption reply="Źle">obliczania długości listy</wrongoption> | |||
<wrongoption reply="Źle">odwracania listy</wrongoption> | |||
<wrongoption reply="Źle">nie ma takiego operatora</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Wyrażenie map (+1) [1, 2, 3] daje w wyniku: | |||
<wrongoption reply="Źle">liczbę 4</wrongoption> | |||
<wrongoption reply="Źle">liczbę 6</wrongoption> | |||
<rightoption reply="Dobrze">listę [2, 3, 4]</rightoption> | |||
<wrongoption reply="Źle">to wyrażenie jest niepoprawne</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Wyrażenie filter (<0) [–1, 0, 1, -2] daje w wyniku: | |||
<wrongoption reply="Źle">liczbę -1</wrongoption> | |||
<rightoption reply="Dobrze">listę [-1, -2]</rightoption> | |||
<wrongoption reply="Źle">listę [0, 1]</wrongoption> | |||
<wrongoption reply="Źle">to wyrażenie jest niepoprawne</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Wyrażenie [(x, y) | x <- [1..4], y <- [1..3]] wytworzy: | |||
<wrongoption reply="Źle">listę o długości 4</wrongoption> | |||
<rightoption reply="Dobrze">listę o długości 12</rightoption> | |||
<wrongoption reply="Źle">parę liczb całkowitych (4, 3)</wrongoption> | |||
<wrongoption reply="Źle">to wyrażenie jest niepoprawne</wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Wyrażenie [x + y | x <- [1..3], y <- [1..3]] wytworzy: | |||
<wrongoption reply="Źle">liczbę 6</wrongoption> | |||
<wrongoption reply="Źle">listę o długości 5</wrongoption> | |||
<rightoption reply="Dobrze">listę o długości 9</rightoption> | |||
<wrongoption reply="Źle">to wyrażenie jest niepoprawne</wrongoption> | |||
</quiz> | |||
Test 9 | |||
<quiz type="exclusive"> | |||
Rachunek sigma opisuje obiekty na poziomie abstrakcji podobnym do tego, | |||
na którym funkcje są opisywane przez: | |||
<wrongoption reply = „Źle”> języki wysokiego poziomu, np. Pascal, C, Java </wrongoption> | |||
<rightoption reply="Dobrze"> rachunek lambda </rightoption> | |||
<wrongoption reply="Źle"> teorię mnogości </wrongoption> | |||
<wrongoption reply="Źle"> rachunek sigma w ogóle nie zajmuje się obiektami </wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Podobnie jak w rachunku sigma, obiekty bez klas pojawiają się w języku: | |||
<wrongoption reply="Źle"> C++</wrongoption> | |||
<wrongoption reply="Źle"> C</wrongoption> | |||
<wrongoption reply="Źle"> Java </wrongoption> | |||
<rightoption reply="Dobrze"> JavaScript </rightoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Która relacja nie pasuje do pozostałych w kontekście języka C++? | |||
<wrongoption reply="Źle"> relacja dziedziczenia </wrongoption> | |||
<wrongoption reply="Źle"> relacja podklasy </wrongoption> | |||
<wrongoption reply="Źle"> relacja podtypu </wrongoption> | |||
<rightoption reply="Dobrze"> relacja zawierania bloków kodu </rightoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
W rachunku sigma obiekt to zbiór metod, dla których mamy dwie operacje | |||
-- wywołanie i: | |||
<rightoption reply="Dobrze"> nadpisanie </rightoption> | |||
<wrongoption reply="Źle"> pobranie historii wywołań </wrongoption> | |||
<wrongoption reply="Źle"> zapamiętanie wyniku </wrongoption> | |||
<wrongoption reply="Źle"> zliczenie parametrów </wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
W rachunku sigma każda metoda posiada ciało oraz parametr reprezentujący: | |||
<wrongoption reply="Źle"> historię wywołań </wrongoption> | |||
<rightoption reply="Dobrze"> jaźń obiektu </rightoption> | |||
<wrongoption reply="Źle"> nazwę obiektu </wrongoption> | |||
<wrongoption reply="Źle"> wynik obliczeń </wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Zapis <math>\displaystyle [l=\varsigma(x)[]]</math> oznacza: | |||
<wrongoption reply="Źle"> obiekt pusty </wrongoption> | |||
<wrongoption reply="Źle"> obiekt zawierający metodę pustą </wrongoption> | |||
<rightoption reply="Dobrze"> obiekt zawierający jedną metodę, zwracającą obiekt pusty </rightoption> | |||
<wrongoption reply="Źle"> ten zapis jest niepoprawny </wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Jeśli <math>\displaystyle o</math> jest obiektem <math>\displaystyle [l=\varsigma(x)x.l]</math>, to wywołanie <math>\displaystyle o.l</math> da | |||
w wyniku: | |||
<wrongoption reply="Źle"> obiekt pusty </wrongoption> | |||
<wrongoption reply="Źle"> obiekt <math>\displaystyle o</math></wrongoption> | |||
<wrongoption reply="Źle"> <math>\displaystyle o.l</math></wrongoption> | |||
<rightoption reply="Dobrze"> wywołanie to nie da wyniku, gdyż obliczenia nie kończą się </rightoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Jeśli <math>\displaystyle o</math> jest obiektem <math>\displaystyle [l=\varsigma(x)x]</math>, to wywołanie <math>\displaystyle o.l</math> da | |||
w wyniku: | |||
<wrongoption reply="Źle"> obiekt pusty </wrongoption> | |||
<rightoption reply="Dobrze"> obiekt <math>\displaystyle o</math></rightoption> | |||
<wrongoption reply="Źle"> <math>\displaystyle o.l</math></wrongoption> | |||
<wrongoption reply="Źle"> wywołanie to nie da wyniku, gdyż obliczenia nie kończą się </wrongoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Relacja redukcji (rozszerzona, z gwiazdką) w rachunku sigma spełnia | |||
własność Churcha-Rossera. Oznacza to, że jeśli <math>\displaystyle a \to^* b</math> i <math>\displaystyle a \to^* c</math>, to: | |||
<wrongoption reply="Źle"> <math>\displaystyle b = c</math></wrongoption> | |||
<wrongoption reply="Źle"> <math>\displaystyle b \to^* c</math></wrongoption> | |||
<wrongoption reply="Źle"> <math>\displaystyle c \to^* b</math></wrongoption> | |||
<rightoption reply="Dobrze"> istnieje <math>\displaystyle d</math> takie, że <math>\displaystyle b \to^* d</math> i <math>\displaystyle c \to^* d</math></rightoption> | |||
</quiz> | |||
<quiz type="exclusive"> | |||
Otrzymawszy wyrażenie, maszyna wirtualna rachunku sigma może zachować się | |||
na jeden z trzech sposobów. Które z wymienionych poniżej zachowań nie odpowiada żadnemu z nich? | |||
<wrongoption reply="Źle"> obliczenia nieskończone </wrongoption> | |||
<rightoption reply="Dobrze"> wyliczenie wartości, która nie jest poprawnym wynikiem </rightoption> | |||
<wrongoption reply="Źle"> wyliczenie poprawnego wyniku </wrongoption> | |||
<wrongoption reply="Źle"> zgłoszenie błędu w wyrażeniu </wrongoption> | |||
</quiz> | |||
Test 10 | |||
<quiz type="exclusive"> | <quiz type="exclusive"> | ||
Zapisany w Haskellu nagłówek f \:\: (Integer -> Integer) -> (Integer -> Integer) deklaruje f jako funkcję, której parametrami i wynikiem są: | Zapisany w Haskellu nagłówek f \:\: (Integer -> Integer) -> (Integer -> Integer) deklaruje f jako funkcję, której parametrami i wynikiem są: | ||
<rightoption reply="Dobrze">parametr\: funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą, wynik\: takaż funkcja</rightoption> | <rightoption reply="Dobrze">parametr\: funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą, wynik\: takaż funkcja</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">parametry\: dwie liczby całkowite, wynik\: dwie liczby całkowite</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">parametr\: liczba całkowita, wynik\: liczba całkowita i funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">taka deklaracja nie jest w Haskellu poprawna</wrongoption> | ||
</quiz> | </quiz> | ||
<quiz type="exclusive"> | <quiz type="exclusive"> | ||
Definicje funkcji, w których trzeba rozpatrzyć osobne przypadki, można w Haskellu zapisać na kilka sposobów. Który z wymienionych sposobów nie jest poprawny? | Definicje funkcji, w których trzeba rozpatrzyć osobne przypadki, można w Haskellu zapisać na kilka sposobów. Który z wymienionych sposobów nie jest poprawny? | ||
<wrongoption reply= | <wrongoption reply="Źle">dopasowywanie do wzorca</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">dozory</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">if-then-else</wrongoption> | ||
<rightoption reply="Dobrze">switch</rightoption> | <rightoption reply="Dobrze">switch</rightoption> | ||
</quiz> | </quiz> | ||
Linia 22: | Linia 889: | ||
<quiz type="exclusive"> | <quiz type="exclusive"> | ||
Haskellowy typ Integer obejmuje liczby całkowite mieszczące się: | Haskellowy typ Integer obejmuje liczby całkowite mieszczące się: | ||
<wrongoption reply= | <wrongoption reply="Źle">w dwóch bajtach</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">w czterech bajtach</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">to zależy od implementacji</wrongoption> | ||
<rightoption reply="Dobrze">bez ograniczeń (Haskell przydziela dostępną pamięć w miarę potrzeby)</rightoption> | <rightoption reply="Dobrze">bez ograniczeń (Haskell przydziela dostępną pamięć w miarę potrzeby)</rightoption> | ||
</quiz> | </quiz> | ||
Linia 31: | Linia 898: | ||
W nagłówku kw :: Num a \=> a -> a określamy typ parametru i wyniku | W nagłówku kw :: Num a \=> a -> a określamy typ parametru i wyniku | ||
funkcji kw jako: | funkcji kw jako: | ||
<wrongoption reply= | <wrongoption reply="Źle">Num</wrongoption> | ||
<rightoption reply="Dobrze">dowolny typ z klasy Num</rightoption> | <rightoption reply="Dobrze">dowolny typ z klasy Num</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">dowolny typ, bez ograniczeń</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">ta deklaracja jest niepoprawna</wrongoption> | ||
</quiz> | </quiz> | ||
Linia 40: | Linia 907: | ||
Jeśli funkcja ma typ (Float, Float) -> Float, to po rozwinięciu będzie miała typ: | Jeśli funkcja ma typ (Float, Float) -> Float, to po rozwinięciu będzie miała typ: | ||
<rightoption reply="Dobrze">Float -> (Float -> Float)</rightoption> | <rightoption reply="Dobrze">Float -> (Float -> Float)</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">Float -> (Float, Float)</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">(Float -> Float) -> Float</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">rozwinięcie nie jest w tym przypadku możliwe</wrongoption> | ||
</quiz> | </quiz> | ||
Linia 48: | Linia 915: | ||
Zapis Float -> Float -> Float jest interpretowany jako: | Zapis Float -> Float -> Float jest interpretowany jako: | ||
<rightoption reply="Dobrze">Float -> (Float -> Float)</rightoption> | <rightoption reply="Dobrze">Float -> (Float -> Float)</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">Float -> (Float, Float)</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">(Float -> Float) -> Float</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">nawiasy są tu konieczne, nie można ich pominąć</wrongoption> | ||
</quiz> | </quiz> | ||
<quiz type="exclusive"> | <quiz type="exclusive"> | ||
Typ [(Integer,Integer)] oznacza: | Typ [(Integer,Integer)] oznacza: | ||
<wrongoption reply= | <wrongoption reply="Źle">listę liczb całkowitych o długości ograniczonej do dwóch elementów</wrongoption> | ||
<rightoption reply="Dobrze">listę par liczb całkowitych</rightoption> | <rightoption reply="Dobrze">listę par liczb całkowitych</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">parę list liczb całkowitych</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">taki typ nie jest poprawny</wrongoption> | ||
</quiz> | </quiz> | ||
<quiz type="exclusive"> | <quiz type="exclusive"> | ||
Które użycie operatora dodawania jest w Haskellu niepoprawne? | Które użycie operatora dodawania jest w Haskellu niepoprawne? | ||
<wrongoption reply= | <wrongoption reply="Źle">1 + 2</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">(+) 1 2</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">((+) 1) 2</wrongoption> | ||
<rightoption reply="Dobrze">(+)(1, 2)</rightoption> | <rightoption reply="Dobrze">(+)(1, 2)</rightoption> | ||
</quiz> | </quiz> | ||
Linia 71: | Linia 938: | ||
<quiz type="exclusive"> | <quiz type="exclusive"> | ||
Jeśli funkcja f jest typu Integer -> Integer -> Integer, to `f` (nazwa funkcji ujęta w odwrócone apostrofy) jest: | Jeśli funkcja f jest typu Integer -> Integer -> Integer, to `f` (nazwa funkcji ujęta w odwrócone apostrofy) jest: | ||
<wrongoption reply= | <wrongoption reply="Źle">funkcją typu (Integer, Integer) -> Integer</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">funkcją typu (Integer -> Integer) -> Integer</wrongoption> | ||
<rightoption reply="Dobrze">operatorem, którego można używać infiksowo, np. 1 `f` 2</rightoption> | <rightoption reply="Dobrze">operatorem, którego można używać infiksowo, np. 1 `f` 2</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">zapis taki jest niepoprawny</wrongoption> | ||
</quiz> | </quiz> | ||
Linia 80: | Linia 947: | ||
Zapis (3 +) oznacza: | Zapis (3 +) oznacza: | ||
<rightoption reply="Dobrze">funkcję typu Integer -> Integer</rightoption> | <rightoption reply="Dobrze">funkcję typu Integer -> Integer</rightoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">parę złożoną z liczby 3 i znaku plus</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">trzyargumentową wersję operatora dodawania</wrongoption> | ||
<wrongoption reply= | <wrongoption reply="Źle">zapis taki jest niepoprawny</wrongoption> | ||
</quiz> | </quiz> | ||
Wersja z 18:40, 13 wrz 2006
{theor}{TWIERDZENIE}[section]
{rem}{UWAGA}[section]
{corol}{WNIOSEK}[section]
{fact}{FAKT}[section]
{ex}{PRZYKŁAD}[section]
{cw}{PYTANIE}[section]
{defin}{DEFINICJA}[section]
{lem}{LEMAT}[section]
{prf}{DOWÓD} {sol}{ROZWIĄZANIE} {hint}{WSKAZÓWKA}
{Języki regularne - Test}
{Test wielokrotnego wyboru}
Ćwiczenie Monoidy
Wskaż, które z poniższych struktur są monoidami:
- a.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle (\mathds{Z}_{mod\ 2}, \cdot)}
- b.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle (\mathds{N}_1, +)} , gdzie
Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle \mathds{N}_1=\{1,2,3,...\}}
- c.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle (\mathds{N}_p,+)} , gdzie Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle \mathds{N}_p} jest zbiorem
wszystkich liczb pierwszych
- d.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle (\mathds{R}, \cdot)}
- e.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle (\mathds{Z}, +)}
Ćwiczenie Przynależność do języka
Wskaż stwierdzenia prawdziwe:
- a.
- b.
- c.
- d.
- e.
Ćwiczenie Homomorfizmy
Wskaż, które z poniższych odwzorowań są homomorfizmami:
- a.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: (\mathds{R},+) \rightarrow (\mathds{Z},+)} ,
- b.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: (\mathds{R},+) \rightarrow (\mathds{R},+)} ,
- c.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: (\mathds{R}, \cdot) \rightarrow (\mathds{R}, \cdot)} ,
- d.
- , ,
- e.
- Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: \{a,b\}^* \rightarrow (\mathds{Z},+)} , ,
Ćwiczenie System przepisujący
Dany niech będzie system przepisujący oraz niech . Wskaż
stwierdzenia prawdziwe:
- a.
- b.
- c.
- d.
- e.
Ćwiczenie Wyrażenie regularne
Wyrażenie regularne
reprezentuje
język:
- a.
- , ,
- b.
- c.
- d.
- e.
- , ,
Ćwiczenie Język regularny
Niech oraz . Wskaż zdania prawdziwe:
- a.
- minimalny automat akceptujący ma 5 stanów
- b.
- ilość klas równoważności prawej kongruencji syntaktycznej
wyznaczonej przez jest równa 4
- c.
- d.
- e.
- monoid przejśc minimalnego automatu akceptującego ma 6
elementów
Ćwiczenie Język regularny a automat
Niech będzie dowolnym językiem regularnym. Wskaż zdania
prawdziwe:
- a.
- jest rozpoznawany przez pewien niedeterministyczny
automat skończenie stanowy z pustymi przejściami
- b.
- jest rozpoznawany przez automat deterministyczny
skończenie stanowy
- c.
- jest rozpoznawany przez niedeterministyczny automat
z pustymi przejściami o jednoelementowym zbiorze stanów początkowych
- d.
- Nie istnieje automat niedeterministyczny z pustymi
przejściami rozpoznający i taki, że zbiór stanów początkowych jest jednoelementowy
- e.
- Nie istnieje gramatyka lewoliniowa generująca
Ćwiczenie Język regularny a automat
Niech , będą językami rozpoznawanymi odpowiednio przez
automaty o i stanach. Aby stwierdzić, dla dowolnego
słowa , czy jest ono rozpoznawane przez oba automaty, wystarczy
skonstruować odpowiedni automat mający
- a.
- stanów
- b.
- stanów
- c.
- stanów
- d.
- stanów
- e.
- 3 stany
Ćwiczenie Wyrażenia regularne
Język składa się ze wszystkich słów nad alfabetem
nie zawierających podsłowa . Wskaż wyrażenie regularne
reprezentujące :
- a.
- b.
- c.
- d.
- e.
Ćwiczenie Języki regularne - warunki równoważne
Wskaż warunki równoważne temu, by język był akceptowany przez
automat skończenie stanowy:
- a.
- Istnieje liczba naturalna taka, że każde słowo
o długości można przedstawić jako katenację , gdzie , oraz .
- b.
- Istnieje skończony monoid i homomorfizm taki, że .
- c.
- jest sumą wybranych klas równoważności pewnej
- d.
- .
- e.
- jest akceptowany przez deterministyczny automat
skończenie stanowy z jednym stanem końcowym.
Ćwiczenie Automat skończenie stanowy
Automat , gdzie , , , {
Ćwiczenie Równość wyrażeń regularnych
Które z poniższych równości dla wyrażeń regularnych są prawdziwe?
- a.
- b.
- c.
- d.
- e.
Ćwiczenie Języki regularne
Wskaż języki regularne:
- a.
- b.
- c.
- d.
- e.
- lub
Ćwiczenie Automat skończenie stanowy
Dany jest automat , gdzie
, , ,
{
{Ćwiczenie Automat niedeterministyczny
Dany niech będzie automat niedeterministyczny , gdzie , ,
,
{
{Ćwiczenie Równość
Twierdzenie orzekające o równości zachodzącej pomiędzy rodziną
języków regularnych a rodziną języków rozpoznawanych przez automaty
o skończonej liczbie stanów znane jest jako:
- a.
- twierdzenie Nerode'a
- b.
- teza Churcha
- c.
- lemat Ardena
- d.
- lemat o pompowaniu
- e.
- twierdzenie Kleene'ego
Ćwiczenie Monoid przejść
Wskaż monoid przejść automatu o następującej funkcji przejścia:
{
{Ćwiczenie Problemy rozstrzygalne
Niech będą językami regularnymi. Wskaż problemy
rozstrzygalne.
- a.
- b.
- c.
- d.
- nieskończoność
- e.
Ćwiczenie Algorytm determinizacji automatu
Algorytm determinizacji automatu:
- a.
- jest deterministyczny
- b.
- działa w czasie wielomianowym
- c.
- może się zapętlić
- d.
- działa w czasie eksponencjalnym
- e.
- kończy działanie błędem, jeśli na wejściu podany został
automat deterministyczny
Ćwiczenie Algorytmy minimalizacji automatu
Wskaż zdania prawdziwe:
- a.
- istnieje algorytm minimalizacji automatu działający w
czasie
- b.
- żaden algorytm minimalizacji nie może działać szybciej niż
w czasie
- c.
- algorytm minimalizacji zawsze zwróci automat o mniejszej
liczbie stanów niż automat podany na wejściu
- d.
- algorytmy minimalizacji są algorytmami
niedeterministycznymi
- e.
- algorytmy minimalizacji nie działają dla automatów
jednostanowych
Test 11 Deklaracja data Nat = Zero | Nast Nat
deklaruje Zero jako element istniejącego wcześniej typu Nat
deklaruje Nast jako funkcję działającą na istniejącym wcześniej typie Nat
tworzy nowy typ o nazwie Nat; do typu tego należy m.in. element Zero
jest niepoprawna
Dla liczb naturalnych zdefiniowanych jak powyżej dodawanie f można określić pisząc f (x, Zero) \= x oraz:
f (x, Nast y) \= f (Nast x, y)
f (x, Nast y) \= Nast (f (x, y))
f (Nast x, Nast y) \= Nast (f (x, y))
f (Nast x, y) \= Nast (f (x, y))
Załóżmy, że mamy już zdefiniowane dodawanie liczb naturalnych f. Która z poniższych definicji poprawnie zdefiniuje operator dodawania liczb naturalnych w typowej dla Haskella postaci rozwiniętej? Pomijamy kwestię sygnatury.
+ \= curry f
+ \= f
(+) \= curry f
(+) \= f
Która definicja poprawnie określi funkcję f pobierającą pierwszy element pary? Pomijamy kwestię sygnatury.
f x y \= x
f (x, y) \= x
(f) x y \= x
(f) (x, y) \= x
Która lista jest niepoprawna?
[1, 2, 3]
[1, [2]]
[[1, 2, 3], [4, 5], [6]]
[[], []]
Operator ++ służy w Haskellu do:
łączenia list
obliczania długości listy
odwracania listy
nie ma takiego operatora
Wyrażenie map (+1) [1, 2, 3] daje w wyniku:
liczbę 4
liczbę 6
listę [2, 3, 4]
to wyrażenie jest niepoprawne
Wyrażenie filter (<0) [–1, 0, 1, -2] daje w wyniku:
liczbę -1
listę [-1, -2]
listę [0, 1]
to wyrażenie jest niepoprawne
Wyrażenie [(x, y) | x <- [1..4], y <- [1..3]] wytworzy:
listę o długości 4
listę o długości 12
parę liczb całkowitych (4, 3)
to wyrażenie jest niepoprawne
Wyrażenie [x + y | x <- [1..3], y <- [1..3]] wytworzy:
liczbę 6
listę o długości 5
listę o długości 9
to wyrażenie jest niepoprawne
Test 9
Rachunek sigma opisuje obiekty na poziomie abstrakcji podobnym do tego,
na którym funkcje są opisywane przez:
<wrongoption reply = „Źle”> języki wysokiego poziomu, np. Pascal, C, Java </wrongoption>rachunek lambda
teorię mnogości
rachunek sigma w ogóle nie zajmuje się obiektami
Podobnie jak w rachunku sigma, obiekty bez klas pojawiają się w języku:
C++
C
Java
JavaScript
Która relacja nie pasuje do pozostałych w kontekście języka C++?
relacja dziedziczenia
relacja podklasy
relacja podtypu
relacja zawierania bloków kodu
W rachunku sigma obiekt to zbiór metod, dla których mamy dwie operacje -- wywołanie i:
nadpisanie
pobranie historii wywołań
zapamiętanie wyniku
zliczenie parametrów
W rachunku sigma każda metoda posiada ciało oraz parametr reprezentujący:
historię wywołań
jaźń obiektu
nazwę obiektu
wynik obliczeń
Zapis oznacza:
obiekt pusty
obiekt zawierający metodę pustą
obiekt zawierający jedną metodę, zwracającą obiekt pusty
ten zapis jest niepoprawny
Jeśli jest obiektem , to wywołanie da w wyniku:
obiekt pusty
obiekt
wywołanie to nie da wyniku, gdyż obliczenia nie kończą się
Jeśli jest obiektem , to wywołanie da w wyniku:
obiekt pusty
obiekt
wywołanie to nie da wyniku, gdyż obliczenia nie kończą się
Relacja redukcji (rozszerzona, z gwiazdką) w rachunku sigma spełnia własność Churcha-Rossera. Oznacza to, że jeśli i , to:
istnieje takie, że i
Otrzymawszy wyrażenie, maszyna wirtualna rachunku sigma może zachować się na jeden z trzech sposobów. Które z wymienionych poniżej zachowań nie odpowiada żadnemu z nich?
obliczenia nieskończone
wyliczenie wartości, która nie jest poprawnym wynikiem
wyliczenie poprawnego wyniku
zgłoszenie błędu w wyrażeniu
Test 10 Zapisany w Haskellu nagłówek f \:\: (Integer -> Integer) -> (Integer -> Integer) deklaruje f jako funkcję, której parametrami i wynikiem są:
parametr\: funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą, wynik\: takaż funkcja
parametry\: dwie liczby całkowite, wynik\: dwie liczby całkowite
parametr\: liczba całkowita, wynik\: liczba całkowita i funkcja biorąca liczbę całkowitą i zwracająca liczbę całkowitą
taka deklaracja nie jest w Haskellu poprawna
Definicje funkcji, w których trzeba rozpatrzyć osobne przypadki, można w Haskellu zapisać na kilka sposobów. Który z wymienionych sposobów nie jest poprawny?
dopasowywanie do wzorca
dozory
if-then-else
switch
Haskellowy typ Integer obejmuje liczby całkowite mieszczące się:
w dwóch bajtach
w czterech bajtach
to zależy od implementacji
bez ograniczeń (Haskell przydziela dostępną pamięć w miarę potrzeby)
W nagłówku kw :: Num a \=> a -> a określamy typ parametru i wyniku funkcji kw jako:
Num
dowolny typ z klasy Num
dowolny typ, bez ograniczeń
ta deklaracja jest niepoprawna
Jeśli funkcja ma typ (Float, Float) -> Float, to po rozwinięciu będzie miała typ:
Float -> (Float -> Float)
Float -> (Float, Float)
(Float -> Float) -> Float
rozwinięcie nie jest w tym przypadku możliwe
Zapis Float -> Float -> Float jest interpretowany jako:
Float -> (Float -> Float)
Float -> (Float, Float)
(Float -> Float) -> Float
nawiasy są tu konieczne, nie można ich pominąć
Typ [(Integer,Integer)] oznacza:
listę liczb całkowitych o długości ograniczonej do dwóch elementów
listę par liczb całkowitych
parę list liczb całkowitych
taki typ nie jest poprawny
Które użycie operatora dodawania jest w Haskellu niepoprawne?
1 + 2
(+) 1 2
((+) 1) 2
(+)(1, 2)
Jeśli funkcja f jest typu Integer -> Integer -> Integer, to `f` (nazwa funkcji ujęta w odwrócone apostrofy) jest:
funkcją typu (Integer, Integer) -> Integer
funkcją typu (Integer -> Integer) -> Integer
operatorem, którego można używać infiksowo, np. 1 `f` 2
zapis taki jest niepoprawny
Zapis (3 +) oznacza:
funkcję typu Integer -> Integer
parę złożoną z liczby 3 i znaku plus
trzyargumentową wersję operatora dodawania
zapis taki jest niepoprawny
Używane w Prologu klauzule Horna mają w następniku:
co najmniej jeden term
dokładnie jeden term
dokładnie dwa termy
zero lub jeden term
Stosowana w Prologu metoda wnioskowania to:
indukcja pozaskończona
rezolucja
unifikacja
zasada instancjonowania prostego
Klauzula ,,dziadek(X, Z) \:- ojciec(X, Y), ojciec(Y, Z)".:
mówi tylko, że jeśli X jest ojcem Y i Y jest ojcem Z, to X jest dziadkiem Z
wyklucza, by któs mógł być swoim własnym dziadkiem
wyklucza, by któs mógł być swoim własnym ojcem
jest niepoprawna składniowo
Do tworzenia i rozkładania list w Prologu stosuje się:
funkcje cons, head i tail
operatory ++, + i -
operator | i odpowiednie dopasowania
w Prologu nie ma list
Zapis ,,X is 3 * Y + 4 w Prologu powoduje:
podstawienie wartości wyrażenia 3*Y+4 pod zmienną X
utożsamienie (lub sprawdzenie utożsamienia) zmiennej X z wartością wyrażenia 3*Y+4
wypisanie rozwiązania równania X\=3*Y+4
taki zapis jest niepoprawny
Jeśli Prologowi nie uda się udowodnić jednego z podcelów, to:
wraca do poprzednich podcelów, próbując znaleźć alternatywne rozwiązania
wypisuje komunikat o niepowodzeniu rezolucji
zgłasza błąd wykonania
nie robi nic, tzn. kontynuuje działanie
Dla stwierdzeń złożonych Prolog stosuje:
przeszukiwanie w głąb
przeszukiwanie wszerz
przeszukiwanie w głąb lub wszerz, w zależności od dostępnej pamięci
inną metdoę, nie wymienioną tutaj
Zapis [X | Y] w Prologu oznacza:
konkatenację list X i Y
listę, gdzie X jest głową, a Y -- ogonem listy
parę uporządkowaną złożoną z elementów X i Y
wyrażenie warunkowe z dozorem X
Jaką klauzulę należałoby dopisać przed ,,f(X, [_ | Y]) \:- f(X, Y).", by otrzymać funktor sprawdzający przynależność elementu do listy?
f(X, []).
f(X, [X]).
f(X, [X | _]).
tego nie da się tak zrobić
Lista [1, [2, 3], 4, []] ma długość:
3
4
5
jest niepoprawna składniowo
Test 6
Czego z zasady nie ma w językach funkcyjnych?
parametrów z domyślnymi wartościami
pętli
wyrażeń warunkowych
wywołań rekurencyjnych
Która cecha jest typowa dla języków funkcyjnych, a rzadko występuje w językach imperatywnych i obiektowych?
kompilacja do kodu pośredniego
możliwość używania funkcji wyższego rzędu
silne typowanie
zaawansowane konstrukcje enkapsulacyjne
Listy służą w Lispie do zapisywania:
tylko danych
tylko kodu
i danych, i kodu
w Lispie nie ma list
Wywołanie ((LAMBDA (x) (* x x)) 2) w języku Scheme:
podstawi 2 pod wskaźnik do zmiennej x
wyświetli 4
zdefiniuje gwiazdkę jako operator o priorytecie 2
zdefiniuje LAMBDA jako funkcję dwuargumentową
Funkcja DISPLAY w języku Scheme:
nie ma żadnych efektów ubocznych
nie może być używana wewnątrz funkcji rekurencyjnej
wyświetla opis stanu interpretera
wyświetla swój argument na ekranie
Wartością wyrażenia (CAR ‘(A B C)) w języku Scheme jest:
A
(B C)
C
to wyrażenie jest niepoprawne
Wartością wyrażenia (CONS ‘(A B) ‘(C D)) w języku Scheme jest:
(A B C D)
(A B (C D))
((A B) C D)
to wyrażenie jest niepoprawne
Jak w języku Scheme należy zapisać wywołanie złożenia funkcji f z samą sobą na argumencie x, czyli (f o f)(x)?
(f (f x))
f(f(x))
((f f) x)
składanie funkcji nie jest w tym języku dozwolone
Które stwierdzenie nie jest prawdziwe w odniesieniu do języka ML?
lista może zawierać elementy różnych typów
można pisać funkcje polimorficzne
ML stosuje niejawne nadawanie typów
wyrażenia arytmetyczne zapisuje się w postaci infiksowej
Do łączenia list w Haskellu służy:
funkcja CONS
operator ++
operator &
nie ma operatora, po prostu zapisuje się dwie listy obok siebie
Test 5 Której cechy język obiektowy nie musi posiadać?
abstrakcyjne typy danych
dynamiczne wiązanie wywołań metod z metodami
dziedziczenie
podprogramy rodzajowe
Jakie ograniczenie na przedefiniowywanie metod trzeba narzucić w języku silnie typowanym?
przedefiniowana metoda musi być bezparametrowa
przedefiniowana metoda musi być typu void
przedefiniowana metoda musi zachować taki sam protokół
nie trzeba narzucać żadnych ograniczeń
Rozstrzyganie odwołań do bytów o takiej samej nazwie mających definicje w dwóch klasach bazowych odbywa się w C++ za pomocą:
operatora \:\: (dwa dwukropki)
operatora . (kropka)
tego nie da się zrobić
dziedziczenie wielokrotne nie jest w C++ dozwolone
W języku C++ obiekty zaalokowane na stosie dealokowane są:
niejawnie
za pomocą delete
za pomocą free
w C++ nie ma takich obiektów
Językiem, w którym stosowane jest zawsze dynamiczne wiązanie wywołań z metodami, jest:
C++
C\#
Java
Smalltalk
Językiem, w któym klasa może być samoistna (tzn. nie mieć nadlasy), jest:
C++
C\#
Java
Smalltalk
W języku C++ metody, które mają być wiązane dynamicznie, deklaruje się za pomocą:
operatora -> (strzałka)
słowa abstract
słowa dynamic
słowa virtual
Który nagłówek poprawnie deklaruje w C++ metodę abstrakcyjną?
virtual void p();
virtual void p() \=0;
void p() \=0;
abstract void p();
Klasy ,,lekkie, deklarowane jako struct, alokowane na stosie i nie pozwalające na dziedziczenie występują w:
C++
C\#
Javie
we wszystkich wymienionych tu językach
Który element nie występuje w JavaScripcie?
klasy
obiekty złożone z par (nazwa własności, wartość)
operator new
zmienne
Test 4
Który język nie pozwala na użycie parametrów z wartością domyślną?
Ada
C
C++
PHP
Przekazanie funkcji jako parametru można w C\# osiągnąć za pomocą mechanizmu:
bezpośrednio, bez dodatkowych mechanizmów
delegatów
tablic wielowymiarowych
wskaźników do funkcji
Który język nie sprawdza zgodności typów parametrów?
Ada
C#
Java
PHP
Przy której deklaracji procedury f wywołanie f(2*x + 3) jest poprawne?
procedure f(n: in out Integer) w Adzie
procedure f(n: out Integer) w Adzie
void f(int n) w języku C
void f(int *n) w języku C
Chcąc w języku C przekazać do funkcji tablicę przez wartość, trzeba:
,,obudować ją strukturą i przekazać tę strukturę
użyć nawiasów kwadratowych po nazwie tablicy w wywołaniu funkcji
użyć nawiasów kwadratowych po nazwie parametru w nagłówku funkcji
nie trzeba robić niczego szczególnego
Jaką dodatkową cechę mają parametry stałe deklarowane w C++ z użyciem const w stosunku do parametrów w trybie wejściowym w ogóle?
nie mogą być zmieniane nawet w obrębie podprogramu
są zawsze alokowane statycznie
wymuszają statyczne sprawdzenie zgodności typu
nie mają żadnej dodatkowej cechy
Załóżmy, że x jest parametrem w trybie out w procedurze w Adzie.
Która instrukcja ma szansę być poprawna?
x \:\= x + 1
x \:\= y + 1
y \:\= x + 1
y \:\= T(x)
Jawne przekazywanie przez referencję jest w C\# możliwe, jeśli umieścimy słowo kluczowe ref:
przy parametrze aktualnym
przy parametrze formalnym
i przy parametrze formalnym, i przy aktualnym
to w ogóle nie jest możliwe
W językach z zakresem widoczności zmiennych wiązanym statycznie jako środowiska wykonywania przekazanego przez parametr podprogramu najczęściej używa się:
środowiska instrukcji (w podprogramie), wywołującej przekazany podprogram
środowiska definicji przekazanego podprogramu
środowiska instrukcji, która przekazała podprogram jako parametr
żadnego z wymienioinych środowisk
W implementacji podprogramów bez zagnieżdżeń, ale z rekurencją i z dynamicznymi zmiennymi lokalnymi na stosie potrzebne jest przechowywanie w rekordzie aktywacyjnym:
tylko łącza dynamicznego
tylko łącza statycznego
łącza dynamicznego i statycznego
żadnego z nich
Test 3 Pojęcie typu w językach imperatywnych bliskie jest pojęciu:
całki Riemanna
pary uporządkowanej
zbioru nieskończonego
zbioru skończonego
Który z opisanych poniżej typów można uznać za typ abstrakcyjny? Rzecz dzieje się w języku C:
struktura wraz z kilkoma działającymi na niej funkcjami
typ wskaźnikowy T *, gdzie T jest zdefiniowane następująco\: typedef int T[10];
wbudowany typ float
unia złożona z pól tego samego typu
W której sytuacji tablica asocjacyjna byłaby istotnie wygodniejsza niż zwykła tablica?
mamy katalogi ponumerowane od 1 do 100 i zapisujemy ich rozmiar
sortujemy obszerną tablicę liczb typu double
wyszukujemy największą liczbę w tablicy
zapisujemy kolor przejeżdżających samochodów, identyfikując je numerami rejestracyjnymi
Ewentualne luki między przechowywanymi w pamięci polami rekordu biorą się z:
konieczności sprawdzenia zgodności typów
konieczności umieszczania pól pod adresami, których 1 lub 2 najmniej znaczące bity są zerami
niedoskonałości kompilatorów
szybkich przesunięć cyklicznych w jednostce arytmetyczno-logicznej procesora
Załóżmy, że w języku C sprawdzamy równość struktur (oczywiście tego samego typu). Dlaczego w ogólności nie można tego zrobić przez porównywanie bloków pamięci?
istnieje kilka rozmiarów liczb całkowitych
napisy mogą zawierać nieistotne znaki za znacznikiem końca
nie można z góry przewidzieć, czy napisy są zapisane w kodzie ASCII, czy Unicode
reprezentacja liczb float i double nie jest jednoznaczna
Który operator języka C jest potrzebny, gdy wykorzystujemy wskaźniki do adresowania pośredniego?
&
++
--
nawiasy kwadratowe do indeksowania
Załóżmy, że p jest zmienną wskaźnikową. W którym języku wyrażenie ++p jest poprawne?
C++
C\#
Java
Pascal
Które stwierdzenie jest fałszywe w odniesieniu do klas w języku C++?
definicja klasy nie musi zawierać destruktora
funkcje z klasy mogą być kompilowane jako inline
konstruktor ma taką samą nazwę jak klasa
konstruktor nie może być przeciążany
W Javie obiekty są alokowane:
dynamicznie na stercie
dynamicznie na stosie
statycznie na stercie
statycznie na stosie
Sparametryzowane typy abstrakcyjne uzyskuje się w C++ za pomocą deklaracji z użyciem słowa kluczowego:
args
generic
params
template
Test 2
Program może zawierać dwie różne zmienne o tej samej nazwie, gdy są to zmienne:
alokowane dynamicznie
globalne
lokalne w dwóch różnych blokach
lokalne w tym samym bloku
L-wartością nazywamy:
bieżący adres zmiennej
wynik wyrażenia arytmetycznego
indeks tablicy
wartość zmiennej po dokonaniu podstawienia
Wiązanie statyczne:
może zmienić się w trakcie wykonania programu
następuje w trakcie wykonania programu
następuje przed wykonaniem programu
odnosi się tylko do zmiennych globalnych
Wnioskowanie o typie zmiennej jest najczęstsze w językach:
funkcyjnych
logicznych
obiektowych
nie występuje w żadnym przyzwoitym języku
Okres życia zmiennej to:
czas pomiędzy alokacją zmiennej a jej dealokacją
czas od uruchomienia programu do chwili wykonania na tej zmiennej delete, free itp.
obszar kodu pomiędzy deklaracją zmiennej a końcem zawierającego ją bloku
czas od pierwszego podstawienia pod tę zmienną do ostatniego jej użycia w programie
Obiekty w Javie są alokowane:
dynamicznie, na stercie
dynamicznie, na stosie
dynamicznie, na stosie lub na stercie (decyzję podejmuje kompilator)
statycznie
Spośród wymienionych tu języków najbliższy silnemu typowaniu jest:
C
C++
C\#
PHP
Silne typowanie bywa ,,osłabiane przez:
jawne konwersje typów
niejawne konwersje typów
dynamiczne sprawdzanie zgodności typów
statyczne sprawdzanie zgodności typów
Podtyp to:
typ powstały przez ograniczenie zakresu istniejącego typu, zgodny z owym typem
nowy typ oparty na już istniejącym, niezgodny z dotychczasowym
typ tablicowy, w którym ograniczono zakres indeksów
jedno z pól unii
W języku C++ dostęp do przesłoniętej zmiennej nielokalnej można uzyskać za pomocą operatora:
\:\: (dwa dwukropki)
. (kropka)
* (gwiazdka)
-> (strzałka)