Clausal Language (ver. 5.81.16, by P.J. Voda, J. Komara, J. Kluka)
SKÚŠKOVÝ TEST Z ÚVODU DO DEKLARATÍVNEHO PROGRAMOVANIA
Pondelok 5. 6. 2006 o 13:00
|
|
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: tests3.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 troch krokoch:
|
|
a) (4 body)
Pomocou preddefinovanej funkcie
zadefinujte funkciu
, ktorá vráti zoznam všetkých zoznamov, ktoré vzniknú vložením prvku
na niektoré miesto v zozname
, teda
Napríklad
.
|
|
|
|
b) (2 body)
Zadefinujte funkciu
, ktorá zreťazí všetky prvky zoznamu zoznamov
, teda
|
|
|
|
Nasledujúcu definíciu funkcie
nemeňte! Zadanie 1c) je nižšie. Ak je interpretácia označená #### , stlačte Recompile vpravo hore.
|
|
|
|
|
|
c) (4 body)
Zadefinujte funkciu
, ktorá zostrojí zoznam všetkých permutácií zoznamu
. Použite funkcie
(definovaná vyššie pomocou vami definovanej funkcie
) a
.
|
|
|
|
|
|
|
|
a) (4 body)
Zadefinujte funkciu
, ktorá vráti zoznam prvkov uložených v strome
v obrátenom poradí preorder , teda tak, že zoznam vrátený
-
začína prvkami podstromu
(v obrátenom poradí preorder),
-
pokračuje prvkami podstromu
(v obrátenom poradí pretorder),
-
končí prvkom
.
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) (3 body)
Zadefinujte predikát
, ktorý platí, ak
je menšie ako všetky prvky stromu
, teda
|
|
|
|
b) (3 body)
Zadefinujte predikát
, ktorý platí, ak
je väčšie ako všetky prvky stromu
, teda
|
|
|
|
c) (4 body)
Zadefinujte predikát
, ktorý platí ak
je binárny vyhľadávací strom. Použite predikáty
a
.
|
|
|
|
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 umocnenie
(exponentiation), ktorú zapíšeme
, zobrazí sa ako
a jej významom je umocnenie prvého argumentu na druhý. Zadefinujeme teda
nový konštruktor
. Príkladom výrazu, ktorý obsahuje operáciu umocnenia je
.
|
|
|
|
a) (2 body)
Rozšírte definíciu predikátu-formátu
(na mieste
) tak, aby zahŕňala aj operáciu umocnenia.
|
|
|
|
b) (2 body)
Rozšírte definíciu denotačnej funkcie
tak, aby priraďovala význam aj termom s operáciou umocnenia.
|
|
|
|
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.
Aby sme mohli skompilovať umocnenie, pridali sme inštrukciu
(
) a rozšírili definíciu funkcie
.
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 umocnenia do programov pre postfixový stroj.
Na skompilovanie potrebujete novú inštrukciu
. Pozor na správne poradie kompilácie argumentov umocnenia (viď funkciu
), pretože pri umocňovaní, na rozdiel od sčítania a násobenia, záleží
na poradí argumentov.
|
|
|
|
Heap used: 416504 free: 133800472
Time used: 0:0:0:13