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ó    

    A programozás alapjai 2

    A tantárgy angol neve: Programming 2

    Adatlap utolsó módosítása: 2017. január 19.

    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
    VIIIAA00 2 2/2/2/f 7  
    3. A tantárgyfelelős személy és tanszék Dr. Szeberényi Imre,
    A tantárgy tanszéki weboldala http://infocpp.iit.bme.hu/
    4. A tantárgy előadója

    Dr. Szeberényi Imre

     

    5. A tantárgy az alábbi témakörök ismeretére épít C programozási nyelv ismerete
    6. Előtanulmányi rend
    Kötelező:
    (TárgyEredmény("BMEVIEEAA00", "jegy", _) >= 2
    VAGY
    TárgyEredmény("BMEVIEEA100", "jegy", _) >= 2
    VAGY Training.Code=("5N-MGAIN"))

    ÉS NEM
    (TárgyEredmény("BMEVIIIA114", "jegy", _) >= 2
    VAGY
    TárgyEredmény("BMEVIIIA114", "felvétel", AktualisFelev()) > 0
    VAGY
    TárgyEredmény("BMEVIIIA115", "jegy", _) >= 2
    VAGY
    TárgyEredmény("BMEVIIIA115", "felvétel", AktualisFelev()) > 0
    VAGY
    TárgyEredmény("BMEVIIIAA03", "jegy", _) >= 2
    VAGY
    TárgyEredmény("BMEVIIIAA03", "felvétel", AktualisFelev()) > 0)

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

    Ajánlott:
    A programozás alapjai 1. c. tárgyból kreditpont megszerzése kötelező.
    7. A tantárgy célkitűzése

    A tárgy alapvető célja, hogy alapozó tárgyként folytassa számítógépes problémamegoldás módszereinek és alapvető eszközeinek előző félévben megkezdett megismertetését olyan szinten, hogy azt a hallgatók további tanulmányaik során képesek legyenek hatékonyan alkalmazni. Ezen félév alapvető célkitűzése, hogy további gyakorlatokkal mélyítse a programozási és algoritmizálási alapismereteket, megismertesse a nagyméretű programozási feladatok megoldásának lépéseit, és bevezessen az objektum-orientált programozásba. Célkitűzését a tárgy az előző félévben megszerzett C nyelvi tudásra alapozva, a C++ nyelv megismertetésével éri el. A gyakorlatok és laborok anyaga folyamatosan követi az előadások tematikáját, azok megértését, elmélyítését támogatja.

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

    C++ mint a C javított változata

    1. Előadás+gyakorlat: Az előző félévi anyag rendszerező összefoglalása. C nyelv „javításai”: típusértékű struct, enum, bool típus. Függvényhívás alacsony szinten. Prototípusok szükségessége, referenciatípus bevezetése. Függvényhívás balértékként. Bevezetés a C++ I/O használatába.
      Laborban
      : Alapvető operációs rendszer ismertek összefoglalása. Fejlesztő környezet bemutatása.
    1. Előadás+gyakorlat: Függvénynév túlterhelése (overload). Alapértelmezett (default) függvényargumentumok. Makrók kiváltása inline függvénnyel. Névterek, láthatóság. Memória allokáció és kivételkezelés röviden.
      Laborban
      : const és referencia gyakorlása. C-ben írt kód átírása C++ eszközeivel (cin, cout). Függvény túlterhelés és inline használata.

    Objektum-orientált programozás alapjai a C++ nyelv bemutatásával

    1. Előadás+gyakorlat: Objektum-orientált programozás alapfogalmai, elvei, objektum fogalma. Osztály, egységbezárás, láthatóság és információrejtés fogalma. Tagváltozók és tagfüggvények. Getterek és setterek. A this pointer. Konstruktor, destruktor.
      Laborban
      : Több modul használata. Memória allokáció gyakorlása. Memóriaszivárgás (memory leak) felfedezése, Okainak keresése, megszüntetése. 
    1. Előadás+gyakorlat: Konstruktorok és destruktorok. Dinamikus adattagokat karbantartó osztályok. Másoló konstruktor, értékadás. Tagváltozók inicializálása. Konstans és statikus tagok.
      Laborban
      : Egyszerű, pointert nem tartalmazó osztályok megvalósítása. getter/setter függvények gyakorlása. operator<< túlterhelése. Tesztelést segítő eszközök használata.
    1. Előadás+gyakorlat: A láthatóság enyhítése: friend mechanizmus. Operátorok túlterhelésének fogalma. Operátorok túlterhelésének megvalósítása tagfüggvénnyel és globális függvénnyel. Megkötések.
      Laborban
      : Dinamikus adattagokat karbantartó osztályok. Másoló konstruktor, értékadás gyakorlása.
    1. Előadás+gyakorlat: Az öröklés szerepe az objektumorientált programozásban. Öröklés, származtatott osztály, alaposztály. Az öröklés hatása a láthatóságra. Konstruktorok és az öröklés.
      Laborban
      :Komplexebb objektum (pl. dinamikus tömb) megvalósítása. Operátorok túlterhelésének gyakorlása.
    1. Előadás+gyakorlat: Behelyettesíthetőség. Virtuális függvények, absztrakt osztályok. Korlátozó öröklés. Virtuális destruktorok. Heterogén gyűjtemények.
      Laborban
      : Egyszerű öröklés gyakorlása. Öröklés hatása láthatóságra és túlterhelésre.
    1. Előadás+gyakorlat: Többszörös öröklés, virtuális alaposztályok. Konstruktorok és destruktorok automatikus feladatai. Perzisztencia fogalma és megvalósítása.
      Laborban
      :Heterogén kollekcióhoz kapcsolódó feladatok.
    1. Előadás+gyakorlat: Konverziós operátorok. Típuskonverziók, kivételkezelés.
      Laborban
      : Többszörös örökléshez és perzisztenciához kacsolódó feladatok.
    1. Előadás+gyakorlat: Generikus szerkezetek jelentősége. Függvény- és osztálysablonok.
      Laborban:
      Típuskonverziók, konverziós operátorok gyakorlása és kivételkezelés gyakorlása.
    1. Standard Template Library (STL) bevezetése. Bonyolultságelméleti megfontolások.
      Laborban:
      Generikus adatszerkezetek és algoritmusok gyakorlása.
    1. Előadás+gyakorlat: STL tárolók és algoritmusok, iterátorok. Objektumorientált szoftvertervezési alapok. Tervezési példa.
      Laborban
      : STL tárolók és algoritmusok gyakorlása.
    1. Előadás+gyakorlat: Komplex példa bemutatása. Kitekintés a nyelvhez kapcsolható eszközökre.
      Laborban
      : Gyakorlás. Házi feladat konzultáció.
    1. Előadás+gyakorlat: Összefoglalás. Tervezési példa.
      Laborban
      : Házi feladat bemutatása
    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium)

    Órarendben ütemezett módon heti egy alkalommal előadást tartunk a teljes évfolyamnak. A tantermi gyakorlatok 30-35 fős hallgatói csoportokban (tanulókörök), a laboratóriumi foglalkozások pedig 12-20 fős számítógépes laborokban lesznek megtartva. A csoport- és terembeosztást külön hirdetményben tesszük közzé a tárgy weboldalán. Ugyanitt érhető el az otthoni gyakorláshoz ajánlott szoftverkörnyezet leírása, valamint a tárgyhoz kapcsolódó segédanyagok, példák és hirdetmények. A számonkérések papíron, írásban történnek, kivéve a kis- és nagyfeladatokat.

     

    10. Követelmények

    A félév végi jegy megszerzésének feltételei az alábbiak:

    • Jelenlét: az órákon (előadás, gyakorlat, labor) való rendszeres részvétel. A hiányzások megengedett mértéke 30%, aminek mindhárom óratípus esetében külön-külön is teljesülnie kell.
    • Ellenőrző dolgozat: a laborgyakorlatok sikeres teljesítéséhez szükséges előzetes tudás meglétét ellenőrző dolgozattal ellenőrizzük. Ennek anyaga az adott labor előadáson vagy gyakorlaton már bemutatott anyagával kapcsolatos. Minden sikeresen teljesített ellenőrző dolgozattal 1 pont szerezhető. A félév során 12 ellenőrző dolgozat megírására kerül sor. A tárgy teljesítésének szükséges feltétele, hogy az ellenőrző dolgozatokkal szerzett pontok elérjék félév során megszerezhető pontszámok lefelé kerekített 2/3-át, azaz 8-at.
    • Részteljesítmény értékelés: a hallgatók félévközi folyamatos haladásának regisztrálása érdekében a
      • félév során összesen 6 alkalommal rövid (15-20 perces) beszámoló dolgozatot iratunk a gyakorlati foglakozásokon. Ezek három témakört ölelnek fel, azaz három dolgozatpárost jelentenek. Minden pár közül a jobban sikerült eredményét vesszük figyelembe a félév végi jegy kialakításánál, melyek pontszáma (3 legjobb) külön-külön el kell, hogy érje a megszerezhető pontszám 40%-át, azaz 4 pontot. A meg nem írt beszámoló pontszámát nullának tekintjük. Az írásos beszámolók ütemezését a tantárgy weboldalán tesszük közzé a félév elején.
      • Nagy házi feladat: minden hallgatónak egy egyéni nagy házi feladatot kell megoldania, önálló munkával. A nagy házi feladatot a 6. héten adjuk ki, a megoldást pedig a 13. héten kell beadni. A laborvezetők a megoldásokhoz folyamatos konzultációt biztosítanak. A folyamatos haladást pedig részhatáridők kitűzésével ösztönözzük.
        A tárgy teljesítésének szükséges feltétele az elfogadott nagy házi feladat.
    • Összegző értékelés: a szorgalmi időszak alatt kettő alkalommal, az évfolyam terhelési táblázata szerinti időpontban nagy zárthelyi dolgozatot íratunk. Ezekre külön-külön elfogadási kritérium nincs. Összpontszámuk azonban el kell, hogy érje a két zárthelyire szerezhető összpontszám 50%-át, azaz 40 pontot. A meg nem írt zárthelyi dolgozat pontszámát nullának tekintjük.

    A félévközi jegy a nagy zárthelyikre kapott pontszámok (2*40 pont), valamint a három legjobban sikerült beszámoló pontszámának (3*10 pont) összege alapján számítható ki. Ha az előzőekben részletezett minimumkritériumok teljesülnek, akkor a félév végi jegy legalább elégséges.

    A pontozás:
    A nagy házi feladat időben leadott és elfogadott részfeladataiért részhatáridőnként rendre 1, 1, 2, 2 plusz pont jár, amely a fent részletezett pontszámhoz adódik hozzá. Ezek a plusz pontok abban az esetben számítanak, ha a feladat véghatáridőre beadásra kerül, és az ekkor beadott változat elfogadott.

    A felkészülést egyéni szorgalmi feladatok is segítik, melyek megoldása nem kötelező. A határidőre és sikeresen megoldott szorgalmi feladatokkal extra pontok szerezhetők, amelyeket a félévközi jegy kialakításánál pozitívan veszünk figyelembe, amennyiben a minimum feltételek teljesültek. Szorgalmi feladatokkal legfeljebb 8 többletpont szerezhető.
    11. Pótlási lehetőségek

    A jelenlét nem pótolható: a pótlást magában foglalja a megengedett hiányzás (30%).

    A laborgyakorlatokon írt ellenőrző dolgozat pótlólagos megírására nincs lehetőség: a pótlást magában foglalja az, hogy az elérhető pontszám 2/3-a a minimálisan elérendő pontszám.

    A tantermi gyakorlatokon íratott beszámolók pótlólagos megírására nincs lehetőség: a pótlást magában foglalja, az hogy páronként mindig a jobban sikerül beszámolót vesszük figyelembe.

    Nagy zárthelyi pótlására, illetve javítására a pótlási héten van lehetőség. A pótlási héten írt nagy zárthelyit abból az anyagból kell írni, amelyik nagy zárthelyi a félév közben rosszabbul sikerült. Azonos pontszám esetén az második anyagrészből. A pótlási héten írt zárthelyi pontszáma ennek a zárthelyinek a pontszámát írja felül. Ez a pótlási vagy javítási lehetőség alanyi jogon jár mindenkinek.

    A nagy házi feladat pótlólagos beadására csak a szorgalmi időszak végéig (utolsó tanítási napon, 12.00 óráig), különeljárási díj megfizetésével van mód, azon túl a nagy házi feladat nem pótolható.

    A megoldások apróbb hibáinak javítására – a laborvezető oktatóval egyeztetett időpontban – a pótlási hét közepéig (csütörtök 12:00 óráig), különeljárási díj megfizetésével van mód, azon túl a nagy házi feladat nem javítható. A pótlási héten már csak olyan feladatok és/vagy dokumentációk javíthatók, amelyek hiányosság, vagy működési hiba miatt kerültek elutasításra.

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

    A tárgy előadóival, gyakorlatvezetőivel és laborvezetőivel egyeztetett módon.

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

    Bármely az objektum-orientált programozással és a C++ programozási nyelvvel foglalkozó könyv vagy jegyzet használható.

    Jegyzet:

    • A tárgy weboldalán elérhető elektronikus jegyzetek: http://infocpp.iit.bme.hu
    Ajánlott irodalom:

     

    • Benedek Zoltán - Levendovszky Tihamér: Szoftverfejlesztés C++ nyelven (SZAK, 2007)
    • B. Stroustrup: A C++ programozási nyelv (Kiskapu, 2001
    • Kondorosi Károly - László Zoltán - Szirmay-Kalos László: Objektum-orientált szoftverfejlesztés (CompuerBooks, 2004)
    • Benkő Tiborné - Poppe András: "Együtt könnyebb a programozás" sorozat: Objektum-orientált C++ (CompuerBooks, 2004)
    • Szeberényi Imre: Bevezetés a UNIX op. rendszerbe (oktatási segédlet, 1998)
    14. A tantárgy elvégzéséhez átlagosan szükséges tanulmányi munka
    Kontakt óra  84
    Félévközi készülés órákra  50
    Felkészülés zárthelyire  26
    Házi feladat elkészítése  30
    Kijelölt írásos tananyag elsajátítása  20
    Vizsgafelkészülés 
    Összesen210
    15. A tantárgy tematikáját kidolgozta

    Név:

    Beosztás:

    Tanszék, Int.:

    dr. Szeberényi Imre

     egyetemi docens

     BME IIT

     VIK programozás oktatók munkaközössége.
    IMSc tematika és módszer

    IMSc tematika és módszer

    Az IMSc-s hallgatók számára külön gyakorlati és labor csoportokat indítunk. (Az előadás a teljes évfolyam számára közös.) Ezekben a csoportokban ugyanazon tananyag és tematika mellett mélyebb, összetettebb feladatok gyakoroltatják ugyanazokat a témaköröket.

    Az érdeklődők számára a tárgy keretében tanultak alkalmazását bemutató, illetve a tárgy tananyagán túlmutató szakmai írásokat teszünk közzé a tárgy honlapján. Ezek egyéni elmélyülésre adnak lehetőséget. Feldolgozásukhoz konzultációk keretében segítséget nyújtunk.

    A számonkéréseken alkalmazott pontozás és jegyszámítás mindenkinél egységes.

    IMSc pontozás

    A jeles alsó ponthatára feletti összes többlet pontszámot IMSc pontszámnak számoljuk, a tárgy kreditértékének megfelelően összesen legfeljebb 35 pontot.

    A követelményeknél említett írásos beszámolók, nagy zárthelyik, szorgalmi feladatok és nagy házi feladat pontszámok ugyanolyan módon történő számítása mellett további 2×10 pontot lehet szerezni a nagy zárthelyiken választható kiegészítő feladatokkal. A kiegészítő feladatot tartalmazó zárthelyire előzetesen jelentkezni kell. A kiegészítő feladatot csak az alap feladatok 75%-os teljesítése mellett pontozzuk, és az itt megszerzett pontok az aláírás megszerzésére nem használhatók fel.

    Az IMSc pontok megszerzése a programban nem résztvevő hallgatók számára is biztosított, azonban a tárgy kreditjének megszerzéséhez kötött.