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