A programozás alapjai 1

A tantárgy angol neve: Basics of Programming 1

Adatlap utolsó módosítása: 2019. május 17.

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 Dr. Czirkos Zoltán, Elektronikus Eszközök Tanszéke
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.:

Dr. Czirkos Zoltán

Egyetemi docens

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 rendek grafikus formában itt láthatók.

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

1. hét.

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

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.

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

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.

Előadás: 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.

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.

Előadás: 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.

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.

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

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.

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

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.

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

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.

Előadás: Tömbi algoritmusok. Keresések. Rendezések. Rekurzió.

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.

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

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.

Előadás: 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.

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.

Előadás: 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.

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.

Előadás: Függvényre mutató pointerek, generikus algoritmusok és típusok a C nyelvben.

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.

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

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.

Előadás: Tartalék előadás.

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

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. 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énye számít; ez kell elérje az adott dolgozatra szerezhető pontszám 40%-á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 páronként jobban sikerült kis zárthelyik, é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 3×10 pont szerezhető, a nagy házi feladatra 20, ez összesen 130 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 páronként mindig a jobban sikerült számít. Az egyik kis zárthelyi pár pótlására a pótlási héten is biztosítunk lehetőséget, különeljárási díj megfizetése mellett.

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 már 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), 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

Készülés előadásokra

14

Készülés gyakorlatokra

21

Készülés laborra

21

Készülés zárthelyire

42

Házi feladat elkészítése

28

Önálló tananyag-feldolgozás

0

Vizsgafelkészülés

0

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"))