Cserép Máté honlapja


Gyorslinkek: tartalom, navigáció.


Oktatás » ELTE » Imperatív programozás » 2018/2019 ősz


Célkitűzés

A tárgy célja, hogy programozási nyelvekkel kapcsolatos fogalmakkal ismertesse meg a hallgatókat, melyek alapján a hallgatók a programozás során képesek lesznek tudatosan választani a nyelvi eszközök közül. A tárgyalt ismeretkör az imperatív, a procedurális és (kisebb részben) a moduláris programozási paradigmát fedi le, alapot teremtve későbbi, az objektum-orientált és konkurens programozási paradigmákat tárgyaló kurzusoknak.
A tárgy utal a vele egy időben tartott Funkcionális programozás kurzusra is (és viszont). A tárgy szoros kapcsolatban áll a vele egy időben tartott Programozás, illetve (kisebb mértékben) a Számítógépes rendszerek kurzusokkal.

Számonkérés

Az átlagos hallgatótól 150 munkaórányi (azaz 150 x 45 perc) befektetést várunk el (ez felel meg az 5 ECTS kreditnek, ami a tárgy elvégzéséért jár). Ezt a 150 munkaórát a következő bontásban javasolt a tanulási folyamatra fordítani.

  • 65 munkaóra a heti 5 tanórán, 13 héten át;
  • 52 munkaóra önálló tanulás (13 héten át heti 4);
  • 28 munkaóra a félév a zh-ra készülés (ismétlés);
  • 5 munkaóra a félév végén a ZH.

Értékelés

A tárgy kombinált számonkérésű, azaz egyetlen (gyakorlati) jegy zárja a tárgyat.
A jegyszerzés 50%-ban a gyakorlatokon végzett munka alapján (folyamatos számonkérés), másik 50% a félév végén géptermi ZH eredménye alapján történik.
A félév végi zárthelyit egy alkalommal meg lehet ismételni.
Az érdemjegy a következőképpen kerül meghatározásra. Az elégséges jegy eléréséhez a megszerezhető pontok 50%-ra van szükség, közepes 63%-tól, jó 75%-tól, jeles pedig 87%-tól adható.

Irodalomjegyzék

  • B. Kernighan, D. Ritchie:A C programozási nyelv, Műszaki Könyvkiadó, 2008
  • Bjarne Stroustrup: A C++ programozási nyelv, Kiskapu Kiadó, 2001
  • Mark Summerfield: Python 3 programozás, Kiskapu Kiadó, 2009
  • Eric Matthes: Python Crash Course, No Starch Press, 2015

Gyakorlati tematika

  1. Programozási paradigmák, fordítás/interpretálás, Python alapismeretek (factorial.py, prime.py)
  2. C nyelvi alapismeretek, I/O menedzsment (fahr2cels.c, prime.c)
  3. Tömbök, C stringek (sum.c, upper.c, words.c)
  4. Függvények, input validálás (palindrom-string.c, palindrom-number.c, fibonacci.c, prime.c)
  5. Pointerek, paraméterátadás
  6. Dinamikus memóriakezelés, tömbök (array-c.zip, array-py.zip)
  7. Dinamikus memóriakezelés, mátrixok (matrix-c.zip, matrix-py.zip)
  8. Komplex típusok (books-py.zip, struct.c)

Feladattár

  1. Állítsd elő az N-nél kisebb Armstrong számokat! N értékét a felhasználó adja meg.
  2. Állítsd elő az első N darab tökéletes számot! N értékét a felhasználó adja meg.
  3. Határozd meg két természetes szám, A és B legnagyobb közös osztóját! A és B értékét a felhasználó adja meg.
  4. Írj programot, amely a bekért számot megfordítja és kiírja.
  5. Írj programot, amely kirajzol egy fenyőfát. A fa szára mindig két sornyi. A fa magasságát kérd be a felhasználótól. Példa N=7 esetére:
        #
       ###
      #####
     #######
    #########
        #
        #
    				
  6. Készíts egy kő-papír-olló játékot, amelyet egy játékos és a számítógép játszhat! Az emberi játékos az ko, papir, ollo szavak valamelyikét adhatja meg, egyéb esetben újra kell próbálkoznia. A gépi játékos mindig véletlenszerűen választ. A játék addig tart, ameddig valaki nem nyer, a program jelenítse meg a győztest.
  7. Kérj be N számot egy dinamikus tömbbe, majd rendezd őket növekvő sorrendbe! N értékét a felhasználó adja meg. A rendezést egy int* sort(int* array) függvényben implementáld. A rendezéshez tetszőleges algoritmust használhatsz, például a buborékrendezést.
  8. Készíts egy int* collatz(int start) függvényt, amely kiszámolja és egy tömbben visszaadja a paraméterhez tartozó Collatz-sorozatot, detektálva a megállási feltételt. Mivel a sorozat hossza előre nem ismert, hasznos lehet a realloc() függvény.