Budapest University of Technology and Economics, Faculty of Electrical Engineering and Informatics

    Belépés
    címtáras azonosítással

    vissza a tantárgylistához   nyomtatható verzió    

    Deklaratív programozás

    A tantárgy angol neve: Declarative Programming

    Adatlap utolsó módosítása: 2021. május 23.

    Budapesti Műszaki és Gazdaságtudományi Egyetem
    Villamosmérnöki és Informatikai Kar
    Mérnök informatikus szak, BSc képzés
    Tantárgykód Szemeszter Követelmények Kredit Tantárgyfélév
    VISZAD00 7 2/1/0/f 3  
    3. A tantárgyfelelős személy és tanszék Dr. Szeredi Péter,
    A tantárgy tanszéki weboldala https://dp.iit.bme.hu
    4. A tantárgy előadója

      

    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

    Számítástudományi és Információelméleti Tanszék

     

     

    5. A tantárgy az alábbi témakörök ismeretére épít Programozás, programozási technológia, matematikai logika
    6. Előtanulmányi rend
    Kötelező:
    NEM ( TárgyEredmény( "BMEVISZA402" , "jegy" , _ ) >= 2
    VAGY
    TárgyEredmény("BMEVISZA402", "FELVETEL", AktualisFelev()) > 0
    VAGY
    TárgyEredmény( "BMEVISZA403" , "jegy" , _ ) >= 2
    VAGY
    TárgyEredmény("BMEVISZA403", "FELVETEL", AktualisFelev()) > 0)

    ÉS (Training.Code=("5N-A8") VAGY Training.Code=("5NAA8"))

    A fenti forma a Neptun sajátja, ezen technikai okokból nem változtattunk.

    A kötelező előtanulmányi rendek grafikus formában itt láthatók.

    7. A tantárgy célkitűzése

    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. 

      

    8. A tantárgy részletes tematikája

    ·       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 gyakorlat): Programozás logikai nyelven.

    (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 gyakorlat): Programozás funkcionális és logikai nyelven.

    (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.

    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) 14*2 óra előadás és 7*2 óra gyakorlat a félév első 11 hetében.
    10. Követelmények

      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.

    11. Pótlási lehetőségek

    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. 

    12. Konzultációs lehetőségek

    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. 

    13. Jegyzet, tankönyv, felhasználható irodalom

    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/

     

    14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
    Kontakt óra42
    Félévközi készülés órákra 7
     Félévközi készülés előadásra 6
    Felkészülés zárthelyire10
    Házi feladatok elkészítése19
    Kijelölt írásos tananyag elsajátítása 6
    Összesen90
    15. A tantárgy tematikáját kidolgozta

     

     

    Tanszék, intézet

    Név

    Beosztás

    Irányítástechnika és Informatika Tanszék

    dr. Dóbé Péter

    adjunktus

    Számítástudományi és Információelméleti Tanszék

    dr. Hanák Péter

    külső munkatárs

    Irányítástechnika és Informatika Tanszék

    dr. Kápolnai Richárd

    adjunktus

    Számítástudományi és Információelméleti Tanszék

    dr. Szeredi Péter

    c. egyetemi tanár

     

     

    IMSc tematika és módszer

    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.  


    IMSc pontozás

    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.

    Egyéb megjegyzések

    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.