Deklaratív programozás
A tantárgy angol neve: Declarative Programming
Adatlap utolsó módosítása: 2021. május 23.
Név:
Beosztás:
Tanszék, intézet:
dr. Hanák Péter
külső munkatárs
Számítástudományi és Információelméleti Tanszék
dr. Szeredi Péter
c. egyetemi tanár
A fenti forma a Neptun sajátja, ezen technikai okokból nem változtattunk.
A kötelező előtanulmányi rend az adott szak honlapján és képzési programjában található.
A deklaratív – más néven nonimperatív – programozási paradigma megismertetése, a két fő irányzat – a funkcionális és a logikai programozás – bemutatása, valamint gyakoroltatása kis-közepes feladatok megoldásával.
· 1. hét:
(4 óra előadás – bevezetés és funkcionális programozás): Követelmények, szakirodalom, honlap. Motivációs példa logikai és funkcionális nyelven. A deklaratív programozás fő jellemzői: függvények, ill. eljárások, nem frissíthető változók, akkumulátorok, rekurzív algoritmusok és adatstruktúrák, jobbrekurzió, magasabb rendű függvények, ill. eljárások.
Funkcionális programozás: Programozási környezetek. Típusok, műveletek, változók, kifejezések. Szintaxis. Kifejezések mohó és lusta kiértékelése. Listák, listanézet. Iteráció és rekurzió, lineáris és elágazó rekurzió, jobbrekurzió, akkumulátorok. Modulok.
· 2. hét:
(2 óra gyakorlat): Programozás funkcionális nyelven.
(2 óra előadás – funkcionális programozás): Beépített függvények. Összetett kifejezések. Listák és ennesek. Mintaillesztés. Típusspecifikáció. Modulokról bővebben.
· 3. hét:
(4 óra előadás – funkcionális programozás): Magasabb rendű függvények, függvényértékek. Gyakori könyvtári függvények. Kivételkezelés.
Összetett adatszerkezetek és kezelésük: listák, halmazok, gráfok. Kulcs-érték párok, bináris fák. Lineáris és elágazó rekurzió újra. Programhelyesség igazolása. Lusta kiértékelés, lusta lista.
· 4. hét:
(2 óra gyakorlat): Programozás funkcionális nyelven, felkészítés a zárthelyire.
(2 óra előadás – logikai programozás): Bevezetés példákon keresztül. A nyelv alapszintaxisa, adatstruktúrák. Listakezelés.
· 5. hét:
(2 óra gyakorlat): Programozás logikai nyelven.
(2 óra előadás – logikai programozás): A végrehajtási algoritmus. Redukciós lépés, egyesítés, keresési tér. A nyomkövetés dobozmodellje.
· 6. hét:
(4 óra előadás – logikai programozás): Operátorok. További vezérlési szerkezetek: diszjunkció, feltételes szerkezet, negáció. Jobbrekurzió, akkumulátorok. A keresési tér szűkítése. Determinizmus és indexelés. Vezérlési eljárások.
· 7. hét:
(2 óra előadás – logikai programozás): Meta-logikai eljárások. Megoldásgyűjtő eljárások. Magasabb rendű eljárások.
· 8. hét:
(4 óra előadás – deklaratív programozás): Korlát-alapú programozási módszerek.
· 9. hét:
(2 óra gyakorlat): Programozás funkcionális és logikai nyelven.
(2 óra előadás – deklaratív programozás): Szélességi és mélységi keresések.
· 10. hét:
(2 óra előadás – deklaratív programozás): Összefoglalás és kitekintés.
· 11. hét:
(2 óra gyakorlat): Programozás funkcionális és logikai nyelven, felkészítés a zárthelyire.
a) Zárthelyi dolgozatok értékelése és elfogadása
A félév során két zárthelyi dolgozatot iratunk, elfogadásukhoz a pontszám legalább 40%-át kell megszerezni.
Pótlás vagy javítás esetén az utolsó zárthelyi eredménye lesz érvényes.
b) Kis házi feladatok
A félév során több alkalommal adunk ki kis házi feladatként programozási feladatokat. A beadás módját a tárgy honlapján közzéteendő feladatkiírás részletezi.
A kis házi feladatokra vonatkozó követelmény teljesítéséhez az szükséges, hogy a beadható programok legalább 2/3-a lefusson mindkét programozási nyelven a tesztesetek 100%-os teljesítésével.
c) Nagy házi feladatok, megajánlott jegy
A nagy házi feladatok megoldása nem kötelező, azonban a féléves osztályzatba beszámít az eredményük, és a beadásukkal megajánlott jegy is szerezhető.
A programokat, valamint a dokumentációkat elektronikus úton kell beadni az ütemtervben előírt oktatási héten. A beadás módját a tárgy honlapján közzéteendő feladatkiírás részletezi. A beadott megoldásokkal kapcsolatban a hallgató kérdéseket fog kapni (ez a nagy házi feladat megvédése, az önálló munkavégzés igazolása).
A tesztesetek legalább 80%-át megoldó programokat további bonyolultabb, nagyobb méretű tesztesetekkel futtatjuk az ún. létraversenyben. A létraverseny eredményétől függ a megajánlott jegy (lásd alább).
d) A féléves osztályzat megállapítása
A féléves osztályzatban a zárthelyikre kapott pontszámot 85%-os, a nagy házi feladatra kapott pontszámot 15%-os súllyal vesszük figyelembe. A kis házi feladatok megoldására kapott és a létraversenyen szerzett pontszám az összpontszámot javítja, tehát ezekkel együtt az összpontszám 100%-nál nagyobb is lehet.
Az egyes osztályzatok alsó határai az összpontszám százalékában: elégséges – 40%, közepes – 55%, jó – 70%, jeles – 85%.
Jó (4) megajánlott jegyet kaphat az, aki a kis házi feladatokra vonatkozó követelményeket teljesíti, mindkét programozási nyelven beadja a nagy házi feladat megoldását, ezeket megfelelően dokumentálja, a programjai bejutnak a létraversenybe és a nagy házi feladatot sikeresen megvédi. Jeles (5) megajánlott jegyet kaphat az, akinek mindkét programja megoldja a létraverseny teszteseteinek legalább 40%-át.
A megajánlott jegy elfogadása esetén a zárthelyit nem kell megírni, az esetleg megírt zárthelyi eredményét nem vesszük figyelembe.
e) Meg nem engedett eszközök alkalmazása
A kis és nagy házi feladatokat minden hallgatónak önállóan, egyénileg kell megoldania, másoktól ötleteken kívül egyebet – pl. teljes kódot vagy akár csak kódrészletet – nem vehet át. A programok szerkezeti hasonlóságát automatikus eszközökkel is vizsgálhatjuk.
Mástól származó program vagy programrészlet átvétele/átadása és beadása esetén az összes kis és nagy házi feladatot érvénytelennek tekintjük. A zárthelyin a meg nem engedett eszközöket használókat az érvényes kari, ill. egyetemi rendelkezések szerint büntetjük. Egyéb kérdésekben a TVSz rendelkezései az irányadók.
A házi feladatokat nem lehet pótolni. A zárthelyik pótlására, illetve javítására két alkalommal lesz lehetőség. Ezen alkalmakkor is a zárthelyiken elvárt tananyagot kell tudni.
A levelezési listára feliratkozott hallgatók írásban feltett konzultációs kérdéseire a félév során folyamatosan válaszolunk. Előzetes egyeztetést követően személyes, illetve távjelenléti konzultációra is lesz lehetőség.
Szeredi Péter, Benkő Tamás: Deklaratív programozás. Oktatási segédlet. Bevezetés a logikai programozásba. Számítástudományi és Információelméleti Tanszék, Budapest, 2005. Letölthető a tárgy honlapjáról.
Ajánlott irodalom:
a. Erlang on-line documentation http://erlang.org/doc.html
b. Erlang Programming. Wiki Books. http://en.wikibooks.org/wiki/Erlang_Programming
c. Fred Hébert: Learn you some Erlang. https://learnyousomeerlang.com/
d. Erlang Tutorial. https://www.tutorialspoint.com/erlang
e. Elixir. https://elixir-lang.org/
f. Elixir Tutorial. https://www.tutorialspoint.com/elixir
g. An Introduction to Elm. https://guide.elm-lang.org/
h. Beginning Elm. https://elmprogramming.com/
i. Elm Tutorial. ttps://www.tutorialspoint.com/elm/
j. Farkas Zsuzsa, Futó Iván, Langer Tamás, Szeredi Péter: MProlog programozási nyelv. Műszaki Könyvkiadó, Budapest, 1989.
k. Márkusz Zsuzsa: Prologban programozni könnyű. Novotrade, Budapest, 1988.
l. Richard A. O'Keefe: The Craft of Prolog. MIT Press, 1990. ISBN 0-262-15039-5
m. Leon Sterling, Ehud Shapiro: The Art of Prolog. Advanced Programming Techniques, 2nd Edition, MIT Press, 1994, ISBN 0-262-19338-8
n. Peter Flach: Logikai Programozás. Az intelligens következtetés példákon keresztül. Panem-John Wiley & Sons, 2001
o. Ulf Nilsson and Jan Maluszynski: Logic, Programming and Prolog (2nd ed.). Previously published by John Wiley & Sons Ltd. http://www.ida.liu.se/%7Eulfni/lpp/
Tanszék, intézet
Név
Beosztás
Irányítástechnika és Informatika Tanszék
dr. Dóbé Péter
adjunktus
dr. Kápolnai Richárd
Az IMSc program hallgatói számára a gyakorlatokon emelt szintű fakultatív programozási feladatokat kínálunk, valamint – részben ezen feladatokhoz kapcsolódó – önállóan tanulmányozandó irodalmat teszünk elérhetővé, fakultatív konzultációs lehetőség biztosításával.
A tantárgyból kétféle módon szerezhető IMSc pont:
a zárthelyi során pluszfeladat megoldásával (maximum 10 pont),
a létraversenyen a megajánlott jeles érdemjegyhez szükséges 40%-os teljesítés felett, minden további 10% teljesítéséért mindkét fő nyelv esetén 1 – 1 pont (összesen maximum 12 pont).
A hallgató a fenti módokon szerzett pontok összegét, de legfeljebb 15 IMSc pontot kap.
Az IMSc pontok gyűjtése teljesen független a tantárgyban szerezhető zárthelyi és házi feladat pontoktól. Ezen pontok megszerzése és a fakultatív feladatok megoldása nélkül is jeles szinten teljesíthetők a tantárgy követelményei.
Az IMSc pontok megszerzése az IMSc programban nem résztvevő hallgatók számára is lehetséges.
A gyakorlásra és a házi feladatok megoldására használható értelmezők, ill. fordítóprogramok elérését, a gyakorlórendszer elérését és használatát, valamint a házi feladatok elkészítésére és beadására vonatkozó tudnivalókat a tantárgy honlapján ismertetjük.