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. Összetett típusok I. (books-py.zip, struct.c)
  9. Összetett típusok II. (perimeter.c, hun_megye.txt)
  10. Függvény pointerek (func.c, perimeter_sorted.c)
  11. Vektor adatszerkezet, mély másolás (vector-c.zip)
  12. Enumerációk (enum.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.

Zárthelyi elméleti minta tesztsorok

A teszteket javasolt segédanyag nélkül kitölteni és a megoldókulcsot csak utólagos ellenőrzésre használni.

Zárthelyi gyakorlati minta feladatok

  1. Írj C-ben egy függvényt, ami a paraméterként kapott int-eket tartalmazó tömb elemeit eggyel jobbra shifteli, azaz az eredetileg 0. indexű elem az 1. indexű lesz, az eredetileg 1. indexű elem a 2. indexű lesz, és így tovább. A tömb eredetileg utolsó eleme kerüljön a tömb 0. indexére. A main függvényben létrehozott tömbbel hívd meg a megoldásodat és írd ki az elemeit!
    Megoldás: shift.c
  2. Írj C/Python függvényt, amely a paraméterként kapott sztringet pozitív egész számmá konvertálja. További nehezítés, hogy a sztring elején tetszőleges számú szóköz lehet, ezeket a függvény hagyja figyelmen kívül. Feltehető, hogy a sztringben csak a szóköz és 0-9 karakterek szerepelnek. Mutassa be a függvény működését. Python választás esetén az int(string) nem elfogadható megoldás.
    Példa input: " 5684"
    Elvárt output: 5684
  3. Írj C/Python függvényt egy sztringben az "[a-z]" alakú rövidítések feloldására, tehát a sztringben a "[a-z]" helyett "abcde...xyz" szerepeljen. Elég az angol ABC betűivel dolgozni.
    Például a "This is my [f-o] string"-re a helyes output: "This is my fhijklmno string". Vedd figyelembe, hogy egy sztringben több rövidítés is lehet, azonban rövidítésen belül nem lehet másik rövidítés. Feltehetõ hogy a [ és ] karakterek csak ezen célból fordulnak elő a sztringben, és mindegyik rövidítés helyesen van megadva.
    Példa input:
    "This is [f-o] to demo [a-z] my [a-b] [b-b] program [b-d]"
    Elvárt output:
    "This is fghijklmno to demo abcdefghijklmnopqrstuvwxyz my ab b program bcd"
    Megoldás: unpack.c, unpack.py
  4. Írj tartalmazásvizsgálat függvényt C-ben sztringekre: Egy adott sztringben keressük az első olyan indexet, ahol egy adott mintasztring bármelyik karaktere előfordul. Amennyiben a minta egyetlen karaktere sem fordul elő az adott sztringben, a függvény visszatérési értéke legyen -1.
    Példa input: "This is my first string", minta: "first"
    Elvárt output: 2

Eredmények

  • A tárgy kombinált számonkérésű, azaz egyetlen (gyakorlati) jegy zárja a tárgyat.
  • A kurzus során különböző formákban pontokat kell gyűjteni. A pontok 50%-át a szorgalmi időszakban lehet megszerezni az órai röpdolgozatokkal.
  • A fennmaradó 50%-ot a félév végén egy zárthelyi dolgozaton lehet megszerezni. A zh két részből: elméleti kérdéssorból és programozási feladatból áll, melyek 20%-ot, illetve 30%-ot érnek a számonkérésben.
  • A programozási feladatra jutalompontok is gyűjthetők, de összességében a zárthelyire pluszpontokkal együtt sem lehet 60%-nyi pontnál többet kapni. A programozási feladat C nyelvű megvalósítására maximum 30%-nyi, a Python megvalósításra maximum 20%-nyi pont kapható. (Azaz a zh-n az elméletre és a programozási feladatra összességében 70%-nyi pontot lehetne kapni, de a kapott pontok összegének és a 60%-nak megfelelő pontértéknek a minimumát képezzük.)
A tartalom megtekintése autentikációhoz kötött. Hitelesítsd magad.