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: 2014. szeptember 15.

    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, Számítástudományi és Információelméleti Tanszék
    A tantárgy tanszéki weboldala http://dp.iit.bme.hu
    4. A tantárgy előadója
    Név:Beosztás:Tanszék, intézet:
    Kápolnai RichárdtanársegédIrányítástechnika és Informatika Tanszék
    dr. Mann Zoltán docens
    Számítástechnikai és Információelméleti Tanszék
     dr. Szeredi Péterc.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)

    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, többek között a párhuzamos és elosztott programozás (pl. a többmagos processzorok programozása), a korlátalapú programozás, a mesterségesintelligencia-módszerek, az ontológiakezelés és a szemantikusweb-kezelés korszerű megalapozására.
    8. A tantárgy részletes tematikája
    • 1. hét:
      Bevezetés, követelmények, irodalom
      Kifejezések felsorolása deklaratívan
      Deklaratív paradigmák C nyelven
      Jobbrekurzió és tárigény
    • 2. hét:
      A Cékla programozási nyelv típusai, szintaxisa
      Listakezelés Céklában
      Listák összefűzése eredeti és fordított sorrendben
      Imperatív programok átírása gyűjtőargumentumokkal
      Magasabb rendű függvények
      Generikus függvények
    • 3. hét:
      Deklaratív és imperatív programozás összevetése
      Prolog bevezetés példákon keresztül
      A Prolog nyelv alapszintaxisa
      A Prolog végrehajtási mechanizmusa
    • 4. hét:
      Listakezelés Prologban
      Operátorok
      További vezérlési szerkezetek
    • 5. hét:
      Erlang bevezetés példákon keresztük
      Típusok, Erlang szintaxis alapjai
      Mintaillesztés, term, kifejezés
      Listanézet és alkalmazásai
      Magasabbrendű függvények, függvényérték
      Műveletek, beépített függvények
    • 6. hét:
      Őr, őrkifejezés, helye a mintaillesztésben
      Típusspecifikáció mint konvenció és mint nyelvi elem
      Kivételkezelés és alkalmazásai
      Rekord mint szintaktikus édesítőszer
      Gyakori könyvtári függvények
      Keresési feladat pontos megoldása funkcionális megközelítésben
    • 7. hét:
      A Prolog végrehajtás - algoritmusok
      Meta-logikai eljárások
      Megoldásgyűjtő eljárások
      A keresési tér szűkítése
      Vezérlési eljárások
    • 8. hét:
      A Prolog megvalósítási módszereiről
      Determinizmus és indexelés
      Jobbrekurzió, akkumulátorok Prologban
      Kényelmi eszközök: Definite Clause Grammars (DCG), ciklusok
    • 9. hét:
      Imperatív programok átírása Prologba
      Modularitás Sicstus Prologban
      Magasabbrendű eljárások
      Dinamikus adatbáziskezelés
      "Hagyományos" beépített eljárások
      Fejlettebb nyelvi és rendszerelemek
    • 10. hét:
      Rekurzív adatstruktúrák Erlangban
      Listák használata: futamok. Rekurzió fajtái
      Halmazműveletek rendezetlen listával
      Generikus keresőfák
      Lusta farkú lista Erlangban
    • 11. hét:
      Összefoglalás, kitekintés
    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium) 21*2 óra előadás a félév első 11 hetében.
    10. Követelmények a) Zárthelyi dolgozat értékelése és elfogadása
    A zárthelyi elfogadásához szükséges annak nyelvenként legalább 40%-os szintű megoldása. A zárthelyi megírásához írószeren, üres papíron és a kiadott feladatlapon kívül nem használható semmilyen segédeszköz.
    Egynél több zárthelyi megírása esetén az utolsót tekintjük érvényesnek.
    b) Kis házi feladatok
    (A félév során több alkalommal adunk ki kis házi feladatot. A Cékla-, Erlang-, ill. Prolog-nyelvű programok beadásának módját a tárgy honlapján közzéteendő feladatkiírás részletezi. Az alábbiakban fő programozási nyelvnek az Erlang és Prolog nyelveket nevezzük.)
    A kis házi feladatok 50%-ának beadása, a tesztesetek 100%-os teljesítésével úgy, hogy mindkét fő programozási nyelven legalább egy 100%-ot teljesítő programot be kell adni.
    c) Nagy házi feladat, megajánlott jegy
    A nagy házi feladat megoldása nem kötelező a jegy megszerzéséhez, azonban a jegyszámításba beszámít, és beadásával megajánlott jegy is szerezhető.
    Az Erlang- és Prolog nyelven megírt programokat, valamint a dokumentációt 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 feladatokkal kapcsolatban a hallgató a beszámolón kérdéseket kaphat (a házi feladat megvédése), amely kérdésekre adott válaszok az önálló munkavégzést is hivatottak bizonyítani.
    Azok a programok, amelyek a tesztesetek legalább 80%-át hibátlanul megoldják és megfelelően dokumentáltak, létraversenyben vesznek részt.  A létraversenyben részt vevő programokat bonyolultabb, nagyobb méretű tesztesetekkel futtatjuk. A létraversenyben jó helyezést elérő programok pluszpontot kapnak, amit az osztályzat megállapításakor figyelembe veszünk. A pluszpontszám maximumát nyelvenként a leggyorsabb program kapja meg, a többi program egyre kevesebb pluszpontot szerez.
    Jó (4) megajánlott jegyet kap az, aki a zárthelyivel és kis házi feladatokkal kapcsolatos követelmények teljesítése mellett mindkét fő programozási nyelvből bejut a létraversenybe, és a házi feladatát sikeresen megvédi. Jeles (5) megajánlott jegyet kap az, aki emellett mindkét fő programozási nyelvből legalább 40%-os eredményt ér el a létraversenyen (azaz mindkét programja megoldja a létraverseny teszteseteinek legalább 40%-át).
    A megajánlott jegy elfogadása a beszámoló alóli mentességet jelenti (lásd következő pont).
    d) Beszámoló
    A 12. vagy a 13. héten kell teljesíteni a beszámolót. A beszámoló írásbeli feladatmegoldással kombinált szóbeli beszámoló a tárgy anyagából. A sikeres beszámoló feltétele a beszámolón megszerezhető maximális pontszám 40%-ának elérése külön-külön mindkét fő programozási nyelvből.
    e) A félévvégi osztályzat megállapítása
    A félévvégi osztályzatban a beszámolóra kapott pontszámot 70%-os, a zárthelyire és a nagy házi feladatra kapott pontszámot 15-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%.

    f) 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áljuk.

    A zárthelyin és a beszámolón semmilyen segédeszköz nem használható.

    Mástól származó program vagy programrészlet átvétele/átadása és beadása esetén az összes kis és a nagy házi feladatot érvénytelennek tekintjük. A zárthelyin és a beszámolón 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 feladatok pótlására nincs lehetőség. A nagyzárthelyi pótlására, illetve javítására a a pótzárthelyin, továbbá a pótlási időszakban (a pótpótzárthelyin) adunk lehetőséget. Ezen alkalmakkor is a nagyzárthelyin elvárt tananyagot kell tudni. A beszámoló pótlására a pótlási héten adunk lehetőséget.
    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 konzultációra is van lehetőség.
    13. Jegyzet, tankönyv, felhasználható irodalom

    A tantárgy egy részéhez sokszorosított jegyzet vásárolható a tantárgy honlapján megadott módon és helyen. Elektronikus változata a Webről is letölthető:

    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

    Ajánlott irodalom:
    a. Joe Armstrong: Programming Erlang: Software for a Concurrent World. The Pragmatic Programmers, July 2007. ISBN 978-1-9343560-0-5 http://www.pragprog.com/titles/jaerlang/programming-erlang
    b. Joe Armstrong, Robert Virding, Claes Wikström, Mike Williams: Concurrent Programming in Erlang. Second Edition. Prentice Hall, 1996. ISBN 0-13-508301-X. Az első rész szabadon letölthető PDF-ben: http://erlang.org/download/erlang-book-part1.pdf.

    c. Erlang on-line documentation http://erlang.org/doc.html
    d. Erlang Programming. Wiki Books. http://en.wikibooks.org/wiki/Erlang_Programming
    e. Francesco Cesarini, Simon Thompson: Erlang Programming. O'Reilly Media,Inc., December 2008. ISBN 978-0596518189

    f. Farkas Zsuzsa, Futó Iván, Langer Tamás, Szeredi Péter: MProlog programozási nyelv. Műszaki Könyvkiadó, Budapest, 1989.

    g. Márkusz Zsuzsa: Prologban programozni könnyű. Novotrade, Budapest, 1988.

    h. Richard A. O'Keefe: The Craft of Prolog. MIT Press, 1990. ISBN 0-262-15039-5

    i. Leon Sterling, Ehud Shapiro: The Art of Prolog. Advanced Programming Techniques, 2nd Edition, MIT Press, 1994, ISBN 0-262-19338-8

    j. Peter Flach: Logikai Programozás. Az intelligens következtetés példákon keresztül. Panem-John Wiley & Sons, 2001

    k. 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ákra6
    Felkészülés zárthelyire12
    Házi feladat elkészítése15
    Kijelölt írásos tananyag elsajátítása 
    Vizsgafelkészülés15
    Összesen90
    15. A tantárgy tematikáját kidolgozta
    Tanszék, intézetNévBeosztás
    Irányítástechnika és Informatika Tanszékdr. Hanák Pétertud. munkatárs
    Irányítástechnika és Informatika TanszékKápolnai Richárdtanársegéd
    Számítástudományi és Információelméleti Tanszékdr. Szeredi Péterc.egyetemi tanár
    Egyéb megjegyzések

    Honlap: http://dp.iit.bme.hu/.

    Levelezési lista: http://www.iit.bme.hu/mailman/listinfo/dp-l.

    A gyakorlásra és a házi feladatok megoldására használható Erlang és Prolog é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.