Budapesti Műszaki Egyetem Villamosmérnöki és Informatikai Kar |
Műszaki Informatika Szak |
Tantárgy-adatlap
és tárgykövetelmények
2003. február
Deklaratív programozás
2. |
Tantárgy kódja |
Szemeszter |
Követelmény |
Kredit |
Nyelv |
Tárgyfélév |
|
VIFO2218 |
4 |
4+0+0v |
5 |
magyar |
1/1 |
3. A tantárgyfelelős személy és tanszék:
Név: |
Beosztás: |
Tanszék, intézet: |
dr. Hanák Péter |
adjunktus |
Irányítástechn. és Informatika T. / OM KFHÁT |
4. A tantárgy előadói:
Név: |
Beosztás: |
Tanszék, intézet: |
dr. Hanák Péter |
adjunktus |
Irányítástechn. és Informatika T. / OM KFHÁT |
dr. Szeredi Péter |
docens |
Számítástud. és Inf. elm. T. / IQSOFT Rt. |
5. A tantárgy az alábbi témakörök ismeretére
épít:
Programozás, Programozási technológia, Matematikai logika
6. Kötelező/ajánlott előtanulmányi rend:
-------
7. A tantárgy célkitűzése:
A hallgatók ismerkedjenek meg az előző félévekben tanult imperatív programozás után a deklaratív programozással.
8. A tantárgy részletes tematikája:
Az imperatív és a deklaratív (funkcionális és logikai) programozás összevetése.
Funkcionális programozás SML nyelven.
Kifejezés, érték, típus. Egyszerű és összetett típusok (ennes, rekord, lista, fa stb.). Kötés. Típuslevezetés. Mintaillesztés. Függvény, magasabb rendű és részlegesen alkalmazható függvény. Típusparaméter, polimorfizmus. Rekurzió, iteráció. Lusta lista. Absztrakt típus. Struktúra, szignatúra, funktor. SML Basis Library. Programozási módszerek. Funkcionális programok helyessége. Új irányzatok a funkcionális programozásban.
Logikai programozás Prolog nyelven.
A Prolog nyelv alapjai: eljárások, vezérlési szerkezet, összetett adatszerkezetek, operátorok, listák. Beépített eljárások. Programozási módszerek. Fejlettebb nyelvi elemek és alkalmazásuk, modularitás, hibakezelés. Új irányzatok a logikai programozásban.
9. A tantárgy oktatásának módja:
Előadás, konzultáció, önálló gyakorlás számítógépen.
10. Követelmények:
a) Előfeltételek
Alapszintű logikai, továbbá elméleti és gyakorlati programozási ismeretek.
b) Követelmények a szorgalmi időszakban
Kötelező: a nagyzárthelyi megírása.
Ajánlott: a webes gyakorlórendszer használata, valamint a kis házi feladatok és a nagy házi feladat megoldása mindkét nyelven.
c) A nagyzárthelyi időpontja, értékelése
és elfogadása
A nagyzárthelyit az ütemtervben megadott oktatási héten íratjuk meg. A nagyzárthelyin az előző hét végéig leadott, ill. kijelölt tananyagot kérjük számon.
A nagyzárthelyi pótlására, ill. javítására a szorgalmi időszak utolsó heteiben, továbbá - ismétlővizsga-jelleggel - a vizsgaidőszak első három hetében adunk lehetőséget. A pót-, ill. a pótpótzárthelyin is csak a nagyzárthelyin elvárt tananyagot kell tudni.
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. Az elfogadás feltétele az arányos részpontszám 40-40%-ának az elérése mindkét programozási nyelven, kivéve, ha a hallgató egy korábbi félévben már szerzett aláírást, mert ekkor a zárthelyi eredményét az alsó ponthatártól függetlenül elfogadjuk, és beszámítjuk a félévvégi osztályzatba.
A nagyzárthelyire kapott pontszámot, ill. a pót- vagy a pótpótzárthelyi megírása esetén a zárthelyikre kapott pontszámok közül a legnagyobbat 15%-os súllyal vesszük figyelembe a félévvégi osztályzatban.
d) A házi feladatok ki- és beadása,
értékelése és elfogadása
A nagy házi feladatot az ütemtervben megadott oktatási héten adjuk ki. Az SML- é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.
Az SML- és a Prolog-program helyes működését egymástól függetlenül legalább három tesztkészlettel vizsgáljuk. Az első tesztkészletet a házi feladattal együtt kiadjuk. A második tesztkészlettel a beadáskor vizsgáljuk a házi feladatot. A tesztelés eredményét elektronikus úton közöljük. Nem kielégítő eredmény esetén a javított változat a beadási határidőn belül többször is beadható. A pontszámot egy harmadik - az előzőkhöz hasonló nehézségű - tesztkészlettel állapítjuk meg.
Egy tesztesetre akkor jár pont, ha a program meghatározott futási időn belül helyes eredményt ad. A programok jól olvasható ("öndokumentált") voltát és az elektronikus változatban (ascii, html, ps vagy pdf) elkészítendő 5-10 oldalas dokumentációt ugyancsak pontozzuk.
A nagy házi feladatot külön-külön legalább 40%-os szinten megoldó SML-, ill. Prolog-programokat fogadjuk el. A kapott pontszámot nyelvenként 7,5%-os, összesen 15%-os súllyal vesszük figyelembe a félévvégi osztályzatban.
A hibátlan és megfelelően dokumentált, azaz a maximális pontszámot elérő programok 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. A pluszpontszám maximumát nyelvenként a leggyorsabb program kapja meg, a többi program egyre kevesebb pluszpontot szerez.
A félév során több alkalommal adunk ki kis házi feladatot. A helyes megoldásokra (az elektronikus úton beadott SML-, ill. Prolog-nyelvű programokra) pluszpontot lehet kapni. A beadás módját a tárgy honlapján közzéteendő feladatkiírás részletezi.
Csak a szorgalmi időszakban, határidőre beadott házi feladat pontszáma számít bele a félévvégi osztályzatba. A nagy és a kis házi feladat a beadási határidő után nem pótolható.
A kis házi feladatokra kapott, valamint a létraversenyben szerzett pluszpontokat a vizsgaosztályzatot meghatározó pontszám kiszámításakor figyelembe vesszük.
e) A gyakorlórendszer használata
A tananyag
elsajátítását webes gyakorlórendszer segíti. A gyakorlórendszer használatát a
tárgy honlapján ismertetjük.
f) Az aláírás megszerzésének feltétele
Az aláírás feltétele a nagyzárthelyi (ill. pót- vagy pótpótzárthelyi) nyelvenként legalább 40%-os szintű megoldása.
g) A vizsgára bocsátás feltétele
A hallgató vizsgára bocsátható, ha aláírást szerzett a jelen félévben, vagy a jelen félévet megelőző négy félév során.
h) A vizsga
A vizsga írásbeli feladatmegoldással kombinált szóbeli vizsga. A sikeres vizsga feltétele a vizsgán megszerezhető maximális pontszám 40%-ának elérése külön-külön mindkét programozási nyelvből.
i) A félévvégi osztályzat megállapítása
A félévvégi osztályzatban a vizsgára kapott összpontszámot 70%-os, a nagyzárthelyire (ill. a pót- vagy pótpótzárthelyire) és a nagy házi feladatra kapott összpontszá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.
A zárthelyikre és a házi feladatokra kapott pontszámot csak akkor számítjuk be az osztályzatba, ha ezeket a hallgató az adott (és nem valamelyik korábbi) félévben szerezte.
j) 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.
Mástól származó program vagy programrészlet átvétele/átadása és beadása esetén a kis és a nagy házi feladat érvénytelen.
A nagyzárthelyin, a pót- és a pótpótzárthelyin, valamint a vizsgán semmilyen segédeszköz nem használható; a meg nem engedett eszközöket használó hallgató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 kötelező nagyzárthelyi
pótlására, illetve javítására a szorgalmi időszak utolsó heteiben (a
pótzárthelyin), továbbá - ismétlővizsga-jelleggel - a vizsgaidőszak első
három hetében adunk lehetőséget (a pótpótzárthelyin). A nem kötelező nagy és
kis házi feladatok a beadási határidő után nem pótolhatók.
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 a heti második előadási napon, az előadás után.
13. Jegyzet, tankönyv, felhasználható irodalom:
A tárgyhoz sokszorosított jegyzetek vásárolhatók a tárgy honlapján megadott módon és helyen. Elektronikus változatuk rendszerint a tárgy honlapjáról is letölthető.
a. 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 - IQSOFT Rt., Budapest, 2001.
b. Hanák
D. Péter: Deklaratív programozás. Oktatási segédlet. Bevezetés a
funkcionális programozásba. Irányítástechnika és Informatika Tanszék,
Budapest, 2001.
Ajánlott
irodalom:
a. Jeffrey D. Ullman: Elements of ML Programming. Prentice Hall, 1993, ISBN: 0-13-184854-2
b.
Richard Bosworth: A Practical Course in Functional
Programming using Standard ML. McGraw-Hill, 1995. ISBN 0-07-707625-7
c.
Colin Myers, Chris Clack, Ellen Poon: Programming with
Standard ML. Prentice Hall, 1993, ISBN 0-13-722075-8
d.
Robert Harper: Programming in Standard ML. School of
Computer Science, Carnegie-Mellon University, 1986-2000.
<http://www.cs.cmu.edu/~rwh/introsml/>
e.
Lawrence C. Paulsson: ML for the Working Programmer.
Cambridge University Press, 1991, ISBN 0-521-39022-2
f.
Farkas Zsuzsa, Futó Iván, Langer Tamás, Szeredi Péter: M-Prolog
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.
David H. D. Warren: Logic Programming and Compiler Writing.
In Software-Practice and Experience 10(2): 97-125, 1980.
k.
Peter Flach: Logikai Programozás. Az intelligens következtetés
példákon keresztül. Panem-John Wiley & Sons, 2001.
14. A tantárgy elvégzéséhez átlagosan szükséges
tanulmányi munka:
(A tantárgyhoz tartozó tanulmányi idő körülbelüli felosztása a tanórák, továbbá a házi feladatok és a zárthelyik között; a felkészülésre, ill. a kidolgozásra átlagosan fordítandó/elvárható idők félévi munkaórában: kredit * 30 óra, pl. 5 kredit esetén 150 óra.)
Kontaktóra |
60 |
Félévközi készülés
órákra |
15 |
Felkészülés
zárthelyire |
5 |
Házi feladat
elkészítése |
30 |
Kijelölt írásos
tananyag elsajátítása |
10 |
Vizsgafelkészülés |
30 |
Összesen |
150 |
15. Egyéb tudnivalók:
A tárgy honlapja: <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ó SML- és Prolog-értelmezők, ill. fordítóprogramok, továbbá a gyakorlórendszer elérését, valamint a kis- és nagy házi feladatokra vonatkozó összes tudnivalót a tárgy honlapján adjuk meg.
16. A tantárgy tematikáját kidolgozta:
Tanszék, intézet |
Név |
Beosztás |
Irányítástechn. és Informatika Tsz. / OM KFHÁT |
dr. Hanák Péter |
adjunktus |
Számítástud. és Inf. Elm. Tsz. / IQSOFT Rt. |
dr. Szeredi Péter |
docens |