Clausal Language (ver. 5.81.16, by P.J. Voda, J. Komara, J. Kluka)
SKÚŠKOVÝ TEST Z ÚVODU DO DEKLARATÍVNEHO PROGRAMOVANIA
Pondelok 29. 5. 2006 o 15:00
|
|
Vaše meno: [Peter Gergely]
|
|
Test pozostáva zo štyroch úloh. Zadania pozri dole.
POKYNY
-
Na vyriešenie úloh máte 90 minút.
-
Meno súboru obsahujúceho vaše riešenie: tests2.cl .
-
Na priebežné ukladanie vášho riešenia používajte tlačidlo Save
( Alt+S ).
-
Vaše riešenie odovzdajte podľa pokynov cvičiaceho.
POČET BODOV:
-
1. úloha: 10 bodov
-
2. úloha: 10 bodov
-
3. úloha: 10 bodov
-
4. úloha: 10 bodov
|
|
Preskočte nasledujúce komponenty až po nadpis ÚLOHY .
|
|
|
|
|
|
|
|
|
|
Cieľom v tejto úlohe je naprogramovať funkciu
v nasledujúcich dvoch krokoch:
|
|
a) (5 bodov)
Pomocou
(preddefinovanej nad hlavičkou 1. úlohy) zadefinujte funkciu
, ktorá vráti zoznam všetkých zoznamov, ktoré vzniknú vložením prvku
na niektoré miesto v zozname
, teda
Napríklad výsledkom
:
má byť
.
|
|
|
|
b) (5 bodov)
Pomocou
zadefinujte funkciu
, ktorá vráti zoznam všetkých vybraných podpostupností zoznamu
.
Napríklad výsledok
má obsahovať v ľubovoľnom poradí
;
,
,
,
;
,
,
,
,
,
;
,
,
,
; ''.
|
|
|
|
|
|
|
|
a) (4 body)
Zadefinujte funkciu
, ktorá vráti zoznam prvkov uložených v strome
v obrátenom poradí inorder , teda tak, že zoznam vrátený
-
začína prvkami podstromu
(v obrátenom poradí inorder),
-
pokračuje prvkom
,
-
končí prvkami podstromu
(v obrátenom poradí inorder).
Napr.
a
(
je definovaný pred hlavičkou 2. úlohy).
|
|
|
|
b) (6 bodov)
Zadefinujte funkciu
, pre ktorú platí
V definícii nesmiete použiť zreťazenie ani žiadne pomocné funkcie vrátane
.
Príklad:
.
|
|
|
|
Binárne vyhľadávacie stromy
|
|
Binárny strom
nazveme vyhľadávacím (píšeme
), ak je prázdny, alebo ak pre nejaký prvok
a podstromy
a
platí
a
-
všetky prvky v
sú ostro menšie ako
,
-
všetky prvky v
sú ostro väčšie ako
,
-
a
sú binárne vyhľadávacie stromy.
Príkladom binárneho vyhľadávacieho stromu je
.
|
|
|
|
a) (5 body)
Zadefinujte funkciu
, ktorá pre binárny vyhľadávací strom
vráti dvojicu
, v ktorej
je minimálny prvok stromu
a
je binárny vyhľadávací strom, ktorý vznikne z
odstránením prvku
.
Uvedomte si, kde sa v binárnom vyhľadávacom strome nachádza
minimálny prvok. Nepoužite žiadne pomocné funkcie.
|
|
|
|
Funkcia
(
) spojí binárne vyhľadávacie stromy
a
do jediného vyhľadávacieho stromu. Predpokladá pritom, že všetky prvky
stromu
sú menšie ako všetky prvky stromu
.
Túto funkciu nemeňte. Ak je označená ### , alebo
sú v nej chyby, kliknite Recompile vpravo hore.
|
|
|
|
b) (5 bodov)
Zadefinujte funkciu
(
), ktorá z binárneho vyhľadávacieho stromu
odstráni prvok
. Výsledný strom je opäť vyhľadávací.
Nepoužite žiadne pomocné funkcie okrem
.
|
|
|
|
Aritmetické výrazy s premennými a kompilácia pre postfixový stroj
|
|
Na prednáške a cvičeniach sme pracovali s aritmetickými výrazmi s premennými,
ktoré sa skladali z premenných, číselných konštánt, a operácií sčítanie
a násobenie.
|
|
Cieľom tejto úlohy je rozšíriť výrazy o novú operáciu dvojnásobok
, ktorú zapíšeme
(twice, dvakrát), zobrazí sa ako
a jej významom je pripočítanie jednotky k argumentu. Zadefinujeme teda nový
konštruktor
. Príkladom výrazu, ktorý obsahuje operáciu dvojnásobok je
.
|
|
|
|
a) (2 body)
Rozšírte definíciu predikátu-formátu
(na mieste
) tak, aby zahŕňala aj operáciu dvojnásobok.
|
|
|
|
b) (2 body)
Rozšírte definíciu denotačnej funkcie
tak, aby priraďovala význam aj termom s operáciou dvojnásobok.
|
|
|
|
Postfixový stroj
Nasledujúce komponenty definujú postfixový stroj: kódovanie
jeho štyroch inštrukcií; predikáty-formáty inštrukcií a programov; funkcia
, ktorá simuluje beh stroja pre program
a zásobník
. Postfixový stroj nemá žiadne registre, inštrukcie vyberajú vstupné dáta
(ak ich potrebujú) zo zásobníka a ukladajú výsledky na zásobník.
Tieto komponenty nemeňte! Zadanie 4c je nižšie.
|
|
|
|
|
|
|
|
c) (6 bodov)
Doplňte definíciu kompilačnej funkcie tak, aby kompilovala výrazy obsahujúce
operáciu dvojnásobok do programov pre postfixový stroj. Na skompilovanie
dvojnásobku stačia inštrukcie uvedené vyššie.
|
|
|
|
Heap used: 387216 free: 133829756
Time used: 0:0:0:13