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
- Programozási paradigmák, fordítás/interpretálás, Python alapismeretek (factorial.py, prime.py)
- C nyelvi alapismeretek, I/O menedzsment (fahr2cels.c, prime.c)
- Tömbök, C stringek (sum.c, upper.c, words.c)
- Függvények, input validálás (palindrom-string.c, palindrom-number.c, fibonacci.c, prime.c)
- Pointerek, paraméterátadás
- Dinamikus memóriakezelés, tömbök (array-c.zip, array-py.zip)
- Dinamikus memóriakezelés, mátrixok (matrix-c.zip, matrix-py.zip)
- Összetett típusok I. (books-py.zip, struct.c)
- Összetett típusok II. (perimeter.c, hun_megye.txt)
- Függvény pointerek (func.c, perimeter_sorted.c)
- Vektor adatszerkezet, mély másolás (vector-c.zip)
- Enumerációk (enum.c)
Feladattár
- Állítsd elő az N-nél kisebb Armstrong számokat! N értékét a felhasználó adja meg.
- Állítsd elő az első N darab tökéletes számot! N értékét a felhasználó adja meg.
- 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.
- Írj programot, amely a bekért számot megfordítja és kiírja.
-
Í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:# ### ##### ####### ######### # #
- 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.
-
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. -
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
-
Í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 -
Í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 -
Í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 -
Í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.)