A programozás alapjai 1

VIEEAA00  |  Mérnökinformatikus BSc  |  Félév: 1  |  Kredit: 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.

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.