Zadání projektů

1. Zjištění počtu vybraných slov v souboru

Tvar predikátu: pocet(<vstupní_soubor>,<výstupní_soubor>,<seznam_slov>)
Procedura zjistí, kolikrát se ve vstupním souboru nachází každé ze slov uvedených v seznamu a do výstupního souboru pak zapíše postupně pro každé ze slov seznamu záznam:
slovo1: počet
slovo2: počet
...
Tento seznam bude setříděný podle abecedy.
Volání např.
?- pocet('vstup.txt','vystup.txt',['internet','Kalendar','hrnek']).

2. Transformace souboru

Tvar predikátu: transformuj(<vstupní_soubor>,<výstupní_soubor>).
Procedura bude načítat vstupní soubor a do výstupního souboru bude zapisovat údaje po této transformaci:

3. Část operačního systému pracující s přihlášenými uživateli

Procedura pracuje se souborem, ve kterém je seznam přihlášených uživatelů, na každém řádku
jméno skupina
Program obsahuje fakta o uživatelích, kteří mají právo se přihlásit, údaje jsou vždy (jméno,skupina,heslo).
Použitelné skupiny: admin, laborant, urednik, host
login(<jméno>,<heslo>) % přihlášení uživatele, ověřuje heslo
logout(<jméno>) % odhlášení uživatele
vypis_prihlasene % vypíše všechny uživatele, kteří jsou zrovna přihlášeni (jméno a skupinu)
prihlaseny(<jméno>) % zjistí, zda uživatel s tímto jménem je přihlášen
skupina(<jméno>) % vypíše skupinu, ve které je uživatel s tímto jménem
vypis_skupinu(<skupina>) % vypíše všechny uživatele patřící do dané skupiny
vypis_uzivatele % vypíše všechny uživatele systému (jméno a skupina)

4. Šifrování obsahu souboru

Volající predikáty:
sifruj(<vstupní_soubor>,<výstupní_soubor>)
odsifruj(<vstupní_soubor>,<výstupní_soubor>)
Slova z definovaného slovníku se transformují na úplně jiná slova, zbytek se po znacích zpracuje tak, že posuneme ASCII hodnotu znaku o určité číslo (pozor na konci ASCII tabulky)

5. Anglický slovník

Volající predikáty:
preloz_do_C(<anglicky>) % vypíše český ekvivalent anglického slovíčka
preloz_do_A(<česky>) % anglický ekvivalent
pridej(<anglicky>,<česky>) % přidá do databáze nový fakt, zároveň ho přidá do zdrojového souboru programu (předpokládejme, že je na předem definovaném místě), aby bylo slovíčko "zapamatováno"
zkousej(<počet_slovíček>) % bude postupně vybírat fakty z databáze, vypíše české slovíčko, načte anglické a porovná s faktem, a to celkem s tolika slovíčky, jaký je argument predikátu

6. Spisovatelé

Program bude obsahovat fakta o určitých spisovatelích - jméno, datum narození, datum úmrtí, seznam děl.
info(<jméno>) % vypíše všechno o zadaném spisovateli ve formátu
Jméno: ... (... - ...) (tj. datum narození a úmrtí)
Díla:
...
...
... (seznam děl autora)
pridej(<jméno>,<narozen>,<zemřel>,<díla>) % přidá záznam do databáze a také do zdrojového textu programu
najdi_autora(<dílo>)
zil_v_roce(<jméno>,<rok>) % zjistí, zda zadaný spisovatel žil v daném roce
vypis_kdo_zil(<rok>) % vypíše seznam spisovatelů, kteří žili v zadaném roce

7. Logický problém typu Zebra

S pomocí Prologu vyřešte tento problém:
Adam byl se Zuzanou, ale ne v parku. Lucie byla v ZOO. Pavel byl v kině. Karel nebyl s Vlastou a nešel do ZOO. Někdo byl v divadle. Petr byl někde a Eva byla také někde. Určete, kde, kdo a s kým byl, za předpokladu, že vždy jeden pár šel na jedno místo.
Všechna tato fakta budou uložena v databázi. V dotazovacím režimu se pouze zadá dotaz
?-vyres_problem.
Výstup bude takový:
... a ... sli do ...
... a ... sli do ...
... a ... sli do ...
... a ... sli do ...
Nápověda: použijte permutace.

K prvním šesti projektům:

Používejte predikáty see a tell pro práci se soubory, dále predikát get0 (pokud to bude možné, lze použít i read, ale ve většině projektů bude vhodnější get0 nebo get) a případně predikát name. Pro práci se znaky využijte ASCII tabulku Windows 1250.
Pro modifikaci databáze používejte vestavěné predikáty assert, assertz, retract, případně consult a reconsult s tím, že modifikujete zdrojový soubor programu.