Test GR: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Nie podano opisu zmian
Rogoda (dyskusja | edycje)
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=„Źle”>parametry\: dwie liczby całkowite, wynik\: dwie liczby całkowite</wrongoption>
<wrongoption reply="Źle">parametry\: dwie liczby całkowite, wynik\: dwie liczby całkowite</wrongoption>
<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="Ź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=„Źle”>taka deklaracja nie jest w Haskellu poprawna</wrongoption>
<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=„Źle”>dopasowywanie do wzorca</wrongoption>
<wrongoption reply="Źle">dopasowywanie do wzorca</wrongoption>
<wrongoption reply=„Źle”>dozory</wrongoption>
<wrongoption reply="Źle">dozory</wrongoption>
<wrongoption reply=„Źle”>if-then-else</wrongoption>
<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=„Źle”>w dwóch bajtach</wrongoption>
<wrongoption reply="Źle">w dwóch bajtach</wrongoption>
<wrongoption reply=„Źle”>w czterech bajtach</wrongoption>
<wrongoption reply="Źle">w czterech bajtach</wrongoption>
<wrongoption reply=„Źle”>to zależy od implementacji</wrongoption>
<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=„Źle”>Num</wrongoption>
<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=„Źle”>dowolny typ, bez ograniczeń</wrongoption>
<wrongoption reply="Źle">dowolny typ, bez ograniczeń</wrongoption>
<wrongoption reply=„Źle”>ta deklaracja jest niepoprawna</wrongoption>
<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=„Źle”>Float -> (Float, Float)</wrongoption>
<wrongoption reply="Źle">Float -> (Float, Float)</wrongoption>
<wrongoption reply=„Źle”>(Float -> Float) -> Float</wrongoption>
<wrongoption reply="Źle">(Float -> Float) -> Float</wrongoption>
<wrongoption reply=„Źle”>rozwinięcie nie jest w tym przypadku możliwe</wrongoption>
<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=„Źle”>Float -> (Float, Float)</wrongoption>
<wrongoption reply="Źle">Float -> (Float, Float)</wrongoption>
<wrongoption reply=„Źle”>(Float -> Float) -> Float</wrongoption>
<wrongoption reply="Źle">(Float -> Float) -> Float</wrongoption>
<wrongoption reply=„Źle”>nawiasy są tu konieczne, nie można ich pominąć</wrongoption>
<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=„Źle”>listę liczb całkowitych o długości ograniczonej do dwóch elementów</wrongoption>
<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=„Źle”>parę list liczb całkowitych</wrongoption>
<wrongoption reply="Źle">parę list liczb całkowitych</wrongoption>
<wrongoption reply=„Źle”>taki typ nie jest poprawny</wrongoption>
<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=„Źle”>1 + 2</wrongoption>
<wrongoption reply="Źle">1 + 2</wrongoption>
<wrongoption reply=„Źle”>(+) 1 2</wrongoption>
<wrongoption reply="Źle">(+) 1 2</wrongoption>
<wrongoption reply=„Źle”>((+) 1) 2</wrongoption>
<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=„Źle”>funkcją typu (Integer, Integer) -> Integer</wrongoption>
<wrongoption reply="Źle">funkcją typu (Integer, Integer) -> Integer</wrongoption>
<wrongoption reply=„Źle”>funkcją typu (Integer -> Integer) -> Integer</wrongoption>
<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=„Źle”>zapis taki jest niepoprawny</wrongoption>
<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=„Źle”>parę złożoną z liczby 3 i znaku plus</wrongoption>
<wrongoption reply="Źle">parę złożoną z liczby 3 i znaku plus</wrongoption>
<wrongoption reply=„Źle”>trzyargumentową wersję operatora dodawania</wrongoption>
<wrongoption reply="Źle">trzyargumentową wersję operatora dodawania</wrongoption>
<wrongoption reply=„Źle”>zapis taki jest niepoprawny</wrongoption>
<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}, +)}
Rozwiązanie

Ćwiczenie Przynależność do języka


Wskaż stwierdzenia prawdziwe:

a.
abbaaa{aa,bb}*
b.
abbaaa{a,b}*
c.
abbaaa{abb,a}*
d.
abbaaa{ba,ab}*
e.
abbaaa{aa,ab,ba}*
Rozwiązanie

Ć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},+)} , h(x)=3x
b.
Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: (\mathds{R},+) \rightarrow (\mathds{R},+)} , h(x)=3x
c.
Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: (\mathds{R}, \cdot) \rightarrow (\mathds{R}, \cdot)} ,

h(x)=3x

d.
h:{a,b}*{a,b}*, h(a)=a2,

h(b)=ab2

e.
Parser nie mógł rozpoznać (nieznana funkcja „\mathds”): {\displaystyle \displaystyle h: \{a,b\}^* \rightarrow (\mathds{Z},+)} , h(a)=1,

h(b)=1

Rozwiązanie

Ćwiczenie System przepisujący


Dany niech będzie system przepisujący RS=({a,b,c},{(a,b),(b,c),(b,a),(cc,b)) oraz niech I={ccb}. Wskaż stwierdzenia prawdziwe:

a.
abcLgen(RS,I)
b.
ccbLgen(RS,I)
c.
bbLgen(RS,I)
d.
aabLgen(RS,I)
e.
aaLgen(RS,I)
Rozwiązanie

Ćwiczenie Wyrażenie regularne


Wyrażenie regularne

((aa+bb)*(ab+ba)(aa+bb)*(ab+ba))*(aa+bb)*
reprezentuje 

język:

a.
{w{a,b}*: aw=2k, bw=2l,

k,l>0}

b.
{w{a,b}*: awbw=0(mod2)}
c.
{w{a,b}*: aw=bw=2k,k0}
d.
{w{a,b}*: awbw=1(mod2)}
e.
{w{a,b}*:aw=4k, bw=4l, k,l0}
Rozwiązanie

Ćwiczenie Język regularny


Niech A={a,b} oraz L=aA*a. Wskaż zdania prawdziwe:

a.
minimalny automat akceptujący L ma 5 stanów
b.
ilość klas równoważności prawej kongruencji syntaktycznej

PLr wyznaczonej przez L jest równa 4

c.
A*L=bA*b+b
d.
A*L=bA*+aA*b+a+1
e.
monoid przejśc minimalnego automatu akceptującego L ma 6

elementów

Rozwiązanie

Ćwiczenie Język regularny a automat


Niech L będzie dowolnym językiem regularnym. Wskaż zdania prawdziwe:

a.
L jest rozpoznawany przez pewien niedeterministyczny

automat skończenie stanowy z pustymi przejściami

b.
L jest rozpoznawany przez automat deterministyczny

skończenie stanowy

c.
L 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 L i taki, że zbiór stanów początkowych jest jednoelementowy

e.
Nie istnieje gramatyka lewoliniowa generująca L
Rozwiązanie

Ćwiczenie Język regularny a automat


Niech L1, L2 będą językami rozpoznawanymi odpowiednio przez automaty o n1 i n2 stanach. Aby stwierdzić, dla dowolnego słowa w, czy jest ono rozpoznawane przez oba automaty, wystarczy skonstruować odpowiedni automat mający

a.
n1n2 stanów
b.
O(n1+n2) stanów
c.
n1 stanów
d.
n2 stanów
e.
3 stany
Rozwiązanie

Ćwiczenie Wyrażenia regularne


Język L składa się ze wszystkich słów nad alfabetem A={a,b} nie zawierających podsłowa a3. Wskaż wyrażenie regularne reprezentujące L:

a.
(b*(1+a+aa)b*)*
b.
(b*(1+a+aa)bb*)*
c.
(b+ab+aab)*+(b+ab+aab)*a+(b+ab+aab)*aa
d.
((1+a+aa)bb*)*(1+a+aa)
e.
b*(a+aa)bb*)*(1+a+aa)
Rozwiązanie

Ćwiczenie Języki regularne - warunki równoważne


Wskaż warunki równoważne temu, by język L był akceptowany przez automat skończenie stanowy:

a.
Istnieje liczba naturalna N1 taka, że każde słowo

wL o długości |w|N można przedstawić jako katenację w=v1uv2, gdzie v1,v2A*, uA+ oraz v1u*v2L.

b.
Istnieje skończony monoid M i homomorfizm ϕ:A*M taki, że ϕ1(ϕ(L))=L.
c.
L jest sumą wybranych klas równoważności pewnej
kongruencji ρ na A*:
L=wL[w]ρ.
d.
L𝒢(A*).
e.
L jest akceptowany przez deterministyczny automat

skończenie stanowy z jednym stanem końcowym.

Rozwiązanie

Ćwiczenie Automat skończenie stanowy


Automat 𝒜=(S,A,s0,f,F), gdzie S={s0,s1,s2,s3}, A={a,b}, F={s1}, {

{
Rozwiązanie

Ćwiczenie Równość wyrażeń regularnych


Które z poniższych równości dla wyrażeń regularnych są prawdziwe?

a.
r*r*=r*
b.
(r+s)*=r*+s*
c.
(r*+s*)*=(r*s*)*
d.
r+r=r
e.
(rs)*r=r(sr)*
Rozwiązanie

Ćwiczenie Języki regularne


Wskaż języki regularne:

a.
{w{a,b}*: aw=bw (mod 3)}
b.
{w{a,b}*: aw=bw}
c.
{w{a,b}*: |w|=2n,n>0}
d.
{w{a,b}*: awbw=100}
e.
{an: n=3k lub n=5k, k0}
Rozwiązanie

Ćwiczenie Automat skończenie stanowy


Dany jest automat 𝒜=(S,A,s0,f,F), gdzie S={s0,s1,s2}, A={a,b}, F={s0,s1},

{

{
Rozwiązanie

Ćwiczenie Automat niedeterministyczny


Dany niech będzie automat niedeterministyczny 𝒜ND=(Q,A,{q0},f,F), gdzie Q={q0,q1,q2}, A={a,b}, F={q2},

{

{
Rozwiązanie

Ćwiczenie Równość 𝒞(A*)=𝒢(A*)


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
Rozwiązanie

Ćwiczenie Monoid przejść


Wskaż monoid przejść automatu o następującej funkcji przejścia:

{

{
Rozwiązanie

Ćwiczenie Problemy rozstrzygalne


Niech L1,L2 będą językami regularnymi. Wskaż problemy rozstrzygalne.

a.
wL1
b.
wL1L2
c.
L1L2=
d.
nieskończoność L1
e.
L1=
Rozwiązanie

Ć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

Rozwiązanie

Ćwiczenie Algorytmy minimalizacji automatu


Wskaż zdania prawdziwe:

a.
istnieje algorytm minimalizacji automatu działający w

czasie nlogn

b.
żaden algorytm minimalizacji nie może działać szybciej niż

w czasie O(n2)

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

Rozwiązanie





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 [l=ς(x)[]] oznacza:

  

obiekt pusty

obiekt zawierający metodę pustą

obiekt zawierający jedną metodę, zwracającą obiekt pusty

ten zapis jest niepoprawny

Jeśli o jest obiektem [l=ς(x)x.l], to wywołanie o.l da w wyniku:

  

obiekt pusty

obiekt o

o.l

wywołanie to nie da wyniku, gdyż obliczenia nie kończą się

Jeśli o jest obiektem [l=ς(x)x], to wywołanie o.l da w wyniku:

  

obiekt pusty

obiekt o

o.l

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 a*b i a*c, to:

  

b=c

b*c

c*b

istnieje d takie, że b*d i c*d

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)