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 1

    A tantárgy angol neve: Basics of Programming 1

    Adatlap utolsó módosítása: 2022. augusztus 24.

    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
    VIEEAA00 1 2/2/2/f 7  
    3. A tantárgyfelelős személy és tanszék Kohári Zsolt,
    A tantárgy tanszéki weboldala https://infoc.eet.bme.hu/
    4. A tantárgy előadója

    Név:

    Beosztás:

    Tanszék, Int.:

    Kohári Zsolt

    Tudományos munkatárs

    Elektronikus Eszközök T.

    Dr. Pohl László

    Egyetemi docens

    Elektronikus Eszközök T.

    5. A tantárgy az alábbi témakörök ismeretére épít -
    6. Előtanulmányi rend
    Kötelező:
    NEM
    (TárgyEredmény("BMEVIEEA100", "jegy", _) >= 2
    VAGY
    TárgyEredmény("BMEVIEEA100", "felvétel", AktualisFelev()) > 0
    VAGY
    TárgyEredmény("BMEVIEEA101", "jegy", _) >= 2
    VAGY
    TárgyEredmény("BMEVIEEA101", "felvétel", 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 rend az adott szak honlapján és képzési programjában található.

    Ajánlott:
    -
    7. A tantárgy célkitűzése

    A tantárgy célkitűzése, hogy a hallgatók készség szinten alkalmazható ismereteket szerezzenek a számítógépes problémamegoldás módszereinek és alapvető eszközeinek használatában, úgy mint elemi és összetett adatok, lineáris adatszerkezetek, memóriakezelés. További cél, hogy a megszerzett ismereteket és készségeket további tanulmányaik során hatékonyan legyenek képesek alkalmazni.

    A célkitűzés teljesítését egy magas szintű programozási nyelv, a C megismerése teszi lehetővé. A tárgyat teljesítő hallgató képes lesz:

    (K3) alkalmazni az imperatív programozás ismertetett eszköztárát,

    (K3) statikus és dinamikus lineáris adatszerkezeteket építeni programjában, ezeken alapvető algoritmusokat, elemi programozási tételeket alkalmazni,

    (K3) C programozási nyelvet és integrált fejlesztőkörnyezetet használni a fenti eszközöket használó programok implementálásához,

    (K2) elemi megfontolásokat tenni egy program erőforrásigényére,

    (K2) specifikációkat, programozói dokumentációkat megérteni,

    (K2) elmagyarázni a tematikában szereplő magasabb szintű absztrakciók és nemlineáris adatszerkezetek működését, alkalmazási lehetőségeit.

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

    Az előadások részletes tematikája

    1. hét.

    Bevezetés. Programozás fogalma. Kifejezések és változók, típus fogalma. C nyelv alapjai. Egyszerű kifejezések a programban.

    2. hét.

    Forráskódok elemei. Algoritmus fogalma, leírása. Ciklus, elágazás, szekvencia. Kombináció: összetett vezérlési szerkezetek, összetett kifejezések.

    3. hét.

    Egyszerű algoritmusok pszeudokód és C változatai. Összegzés, számlálás, szélsőérték keresése és szétválogatás tételei. Karakter és logikai típusok. Tömbök.

    4. hét.

    A számítógép felépítése. Beépített típusok részletesen. Véges ábrázolás. Egész és lebegőpontos számok ábrázolása, számábrázolási korlátok. Függvények fogalma, használata. Absztrakció, paraméterek és lokális változók.

    5. hét.

    Operátorok. Precedencia, kiértékelés, mellékhatás. Összetett adatszerkezetek, struktúrák és saját típusok használata.

    6. hét.

    Felsorolt típus. Állapotgép. Cím szerinti paraméterátadás, indirekció és sztringek a C nyelvben.

    7. hét.

    Program kapcsolata a külvilággal: parancssori paraméterek és fájlkezelés. Előfeldolgozó. Programszegmentálás. Karbantartható programok írása, dokumentáció.

    8. hét.

    Tömbi algoritmusok. Keresések. Rendezések. Rekurzió.

    9. hét.

    Dinamikus memóriakezelés. Dinamikus tömbök. Dinamikus sztring kódolása. Memóriakezelés rendszerező tárgyalása.

    10. hét.

    Dinamikus adatszerkezet: láncolt listák. Listák használata. Bejárás, törlés, beszúrás. Egyszeres és többszörös láncolás.

    11. hét.

    Dinamikus adatszerkezet: bináris fák használata. Keresőfák, dekódoló fák. Fák bejárásai. Többszörös indirekció. Hasító táblák röviden.

    12. hét.

    Függvényre mutató pointerek, generikus algoritmusok és típusok a C nyelvben.

    13. hét.

    További adatszerkezetek. Nagyobb programok tervezése. Funkcionális dekompozíció bemutatása egy komplex példán.

    14. hét.

    Tartalék előadás.

     

     A gyakorlatok/laborok részletes tematikája

    1. hét.

    Labor: HSZK bemutatása, házirend. Operációs rendszer alapismeretek: parancssor, program indítása parancssorból, szabványos bemenet és kimenet, átirányítás, paraméterek. Egyszerű C program lefordítása és kipróbálása.

    Gyakorlat: Hétköznapi algoritmusok. Folyamatábra készítése közismert algoritmusokhoz (pl. írásbeli összeadás, prímtényezős felbontás).

    2. hét.

    Labor: Integrált fejlesztői környezet bemutatása. Program szövegének szerkesztése, fordítása. Szintaktikai és szemantikai hibák, nyomkövetés, értékadás megfigyelése, változók vizsgálata. A fordító hibaüzenetei. Printf és scanf kezelése, formátumok megadása.

    Gyakorlat: Algoritmizálás gyakorlása a kártyapakli példáján. Alapalgoritmusok iteratív megfogalmazása: „benne van-e?”, „melyik a leg...?”, „sorban van-e?”

    3. hét.

    Labor: Kódolás struktogramból, pszeudokódból. Triviális I/O-t végző programok; egyszerű számítások. Nyomkövető használata.

    Gyakorlat: Algoritmusok leírása C nyelven. Számelméleti példák, prímszám, tükörszám, másodfokú egyenlet, numerikus módszerek, pl. pi kiszámítása ciklussal.

    4. hét.

    Labor: Összetett vezérlési szerkezetek gyakorlása. Ismert algoritmus (pl. prímszám, lnko) programozása.

    Gyakorlat: Tömbbel megoldható feladatok gyakorlása, pl. naptár kezelése, hisztogramok, eloszlások számítása.

    5. hét.

    Labor: Alapvető tömbkezelés. Tömbök létrehozása. Keresés, számlálás, szélsőérték keresése alapfeladatok. Tömbműveletek, tömb léptetése. Túlindexelés hatásának bemutatása.

    Gyakorlat: Összetett problémák, dekompozíció. Függvények használata; paraméterek és visszatérési értékek. Egyszerű, matematikai jellegű függvények írása, karakterek használata.

    6. hét.

    Labor: Számrendszerek, bitműveletek. Szám kiírása kettes számrendszerben. Bitminta előállítása. Túlcsordulás hatásának vizsgálata. Lebegőpontos pontatlanság szemléltetése.

    Gyakorlat: Struktúrák, hozzájuk tartozó műveletek és függvények. Többszörösen összetett adatok. Struktúrában tömb, tömbben struktúra.

    7. hét.

    Labor: Beépített sztringkezelő függvények. Tömbök kezelése – további gyakorlás. Többdimenziós tömbök.

    Gyakorlat: Tömbök és függvények használata, tömb átadása függvénynek. Sztringes feladatok. Szöveg megfordító, palindrom. Sztring átadása függvénynek. Tömbméret és sztringhossz közti különbség. Túlindexelés veszélye.

    8. hét.

    Labor: Állapotgépek megvalósítása C nyelven. Fájlkezelés a C programokban.

    Gyakorlat: Állapotgépek tervezése példákon keresztül; részletek implementálása.

    9. hét.

    Labor: Rekurzió megfigyelése a nyomkövetőben. Rekurzióval megoldható problémák, pl. visszafelé kiírás, adott számrendszerben kiírás.

    Gyakorlat: Rekurzív problémák; a rekurzió tervezésének gyakorlása.

    10. hét.

    Labor: Dinamikus memóriakezelés és sztringek. Saját sztring típus létrehozása és műveleteinek kódolása.

    Gyakorlat: Munka dinamikus tömbbel. Komplett halmaz típus kódolása. Méret nyilvántartása, keresés, átméretezés. Munka struktúrákra mutató pointerekkel.

    11. hét.

    Labor: Listakezelés implementálása. Lista építése. Fájlba írás, fájlból olvasás. Strázsa alkalmazása. Beszúrás, törlés.

    Gyakorlat: Adatszerkezetek választása. Alacsony szintű listaműveletek, beszúrás és törlés, memóriakezelés.

    12. hét.

    Labor: Fák kezelése: létrehozás, másolás, keresés.

    Gyakorlat: Fák algoritmusai. Csomópontok, szintek, levelek. Tükörképek, szimmetrikus fa vizsgálata.

    13. hét.

    Labor: Házi feladatok beadása. Dinamikus adatszerkezetek gyakorlása.

    Gyakorlat: Függvényre mutató pointerek. Numerikus integrálás, generikus számlálás és rendezés.

    14. hét.

    Labor: Gyakorlás, áttekintő feladatok.

    Gyakorlat: Gyakorlás, áttekintő feladatok.

    9. A tantárgy oktatásának módja (előadás, gyakorlat, laboratórium)

    A tárgyból heti egy alkalommal a teljes évfolyamnak előadást és heti egy alkalommal a tanulókörök számára tantermi gyakorlatot tartunk. A tárgyból számítógépes laboratóriumi foglalkozásaira a Hallgatói Számítóközpont (HSZK) termeiben kerül sor, az órarend szerinti időpontokban, kiscsoportos oktatással. A csoport- és terembeosztást külön hirdetményben tesszük közzé a tárgy weboldalán.

    A laboratórium célja, hogy a hallgatók gyakorlati jártasságot szerezzenek az előadáson és megismert módszerek kipróbálása által, és készség szinten elsajátítsák a fejlesztőkörnyezetek használatát. A gyakorlatok anyaga folyamatosan követi az előadások és a laborok tematikáját, azok mélyebb megértését, az algoritmusok részletes megismerését támogatja.

    Az anyag jobb elsajátítása érdekében a laboratóriumi foglalkozásokhoz kapcsolódóan egy nagyobb házi feladatot is meg kell oldani. A kis zárthelyik célja a folyamatos készülés motiválása. A nagy zárthelyik a megszerzett ismeretek alkalmazására fókuszálnak.

    10. Követelmények

    Szorgalmi időszakban

    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ékét a TVSz rögzíti (30%). A feltételnek mindhárom óratípuson külön-külön is teljesülnie kell.

    A laborgyakorlatokon a felkészültséget szintfelmérővel (beugróval) ellenőrizzük, amelynek anyaga az adott laborhoz tartozó előadás anyagával kapcsolatos. A beugró lehet rövid dolgozat, házi feladat vagy órai feladat is. Sikertelen beugró esetén az adott laboralkalom nem teljesítettnek számít.

    Kis zárthelyik (ellenőrző dolgozat): a félév során hat alkalommal kis zárthelyit íratunk a gyakorlatokon. A hat kis ZH közül a legjobban sikerült négy pontszámát vesszük figyelembe; ezek összege kell elérje a megszerezhető összpontszám 50%-át. A meg nem írt dolgozatok pontszámát nullának tekintjük.

    Nagy zárthelyi (ö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. Ezeknek egyenként nincs minimumkövetelménye, csak az összegüknek. Az összpontszám el kell érje a két zárthelyire szerezhető összpontszám 50%-át. A két zárthelyi eredményének összege helyett a második zárthelyi pontszámának kétszeresét vesszük figyelembe, ha ez a hallgatónak kedvezőbb.

    Nagy házi feladat (részteljesítmény értékelés): minden hallgatónak egy egyéni nagy házi feladatot kell megoldania, önálló munkával. Ennek elfogadható szintű teljesítése a félév követelménye. A nagy házi feladatokat az 5. héten adjuk ki és a 12. héten kell beadni a megoldásokat. Az előrehaladást a félév közben ellenőrizzük, és az értékelésnél figyelembe vesszük. A házi feladatra kapott pontszám el kell érje az erre szerezhető pontszám 50%-át.

    A félévközi jegy a nagy zárthelyik, a négy legjobban sikerült kis zárthelyi, és a nagy házi feladat pontszáma alapján számítódik ki. A nagy zárthelyikre maximum 2×40 pont, a kis zárthelyikre maximum 4×10 pont szerezhető, a nagy házi feladatra 20, ez összesen 140 pont. Ha a minimumkritériumok teljesülnek, a jegy nem lehet rosszabb elégségesnél.

    A félév elején a tárgy hallgatói számára lehetőség van egy ún. nulladik, szintfelmérő zárthelyit írni. Ennek témája a félév teljes tananyaga. A megfelelő szintű teljesítésével mentességet lehet szerezni a jelenlét követelmények és a gyakorlatokon írt kis zárthelyik alól. A többi tárgykövetelményt (a két nagy zárthelyi, nagy házi feladat) ilyenkor is teljesíteni kell. A kedvezmény elfogadása esetén a pontszámítás ugyanúgy alakul, mint normál esetben; a kis zárthelyik pontszámát a nulladik zárthelyi pontszáma helyettesíti.

    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 veszünk figyelembe.

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

    A jelenlét és a laborgyakorlatokon írt beugrók nem pótolhatóak.

    A kis zárthelyik félév közbeni pótlását az teszi lehetővé, hogy hatból csak a legjobb négyet vesszük figyelembe. Pótlási héten ezek már nem pótolhatóak.

    Nagy zárthelyi pótlására a pótlási héten van lehetőség. A két nagy zárthelyi összevontan javítható vagy pótolható, ilyen esetben az új pontszám kétszerese számít az eredeti pontszámok összege helyett. Második pótlási lehetőség alapértelmezetten nincs.

    A nagy házi feladat javítására vagy pótlására a szorgalmi időszak végéig (utolsó tanítási napon, 14.00 óráig) van lehetőség, azon túl a nagy házi feladat nem adható be. Pótlás esetén különeljárási díj fizetendő. Javítani csak előzőleg már elfogadott megoldást lehet.

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

    A tárgy előadóival, gyakorlatvezetőivel és laborvezetőivel egyeztetett módon. A tantárgy weboldalán is rendszeresen hirdetünk meg konzultációkat.

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

    Jegyzet:

    A tárgy weboldalán elérhető elektronikus jegyzet: https://infoc.eet.bme.hu/.

    Ajánlott irodalom, a C programozási nyelv tekintetében::

    B. W. Kernighan, D. Ritchie: A C programozási nyelv: az ANSI szerint szabványosított változat (Műszaki Könyvkiadó, 1994.)

    Stephen G. Kochan: Programfejlesztés C nyelven. (Kiskapu, 2008.)

    Ajánlott irodalom, algoritmusok tekintetében:

    Pongor György: Szabványos PASCAL programozás és algoritmusok. (Műszaki Könyvkiadó, 1999.)

    Niklaus Wirth: Algoritmusok + Adatstruktúrák = Programok (Műszaki Könyvkiadó, 1982.)

    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

    56

    Felkészülés zárthelyire

    42

    Házi feladat elkészítése

    28

    Kijelölt írásos tananyag elsajátítása

    0

    Vizsgafelkészülés

    0

    Összesen

    210

    15. A tantárgy tematikáját kidolgozta

    Név:

    Beosztás:

    Tanszék, Int.:

    Dr. Czirkos Zoltán

    Egyetemi docens

    Elektronikus Eszközök T.

    Az első éves programozás oktatók munkaközössége.

    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árgyon 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.

    IMSc pontozás

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

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

    A „követelmények” részben említett nagy és kis zárthelyik, illetve szorgalmi és nagy házi feladat pontszámok ugyanolyan módon történő számítása mellett 2×10 pontot lehet szerezni a nagy zárthelyiken választható kiegészítő feladatokkal is. A kiegészítő feladatot tartalmazó ZH-ra 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óak 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.

    Egyéb megjegyzések
    NEM (TárgyTeljesítve("BMEVIEEA100"))    
    VAGY  
    NEM (TárgyTeljesítve("BMEVIEEA101"))