A tantárgy adatlapja

1.	A képzési program adatai
1.1 Felsőoktatási intézmény	Babeș-Bolyai Tudományegyetem	
1.2 Kar 	Matematika és Informatika	
1.3 Intézet	Magyar Matematika és Informatika	
1.4 Szakterület	informatika	
1.5 Képzési szint	alap	
1.6 Szak / Képesítés	Matematika, Matematika-informatika és Informatika	

2.	A tantárgy adatai
2.1 A tantárgy neve	A programozás alapjai	
2.2 Az előadásért felelős tanár neve	Ionescu Klára	
2.3 A szemináriumért felelős tanár neve	Ionescu Klára	
2.4 Tanulmányi év	1	2.5 Félév	1	2.6	Értékelés módja	vizsga	2.7 Tantárgy típusa	kötelező –alap 	

3.	Teljes becsült idő (az oktatási tevékenység féléves óraszáma)
3.1 Heti óraszám	6	melyből: 3.2 előadás	2	3.3 szeminárium/labor	4	
3.4 Tantervben szereplő összóraszám	84	melyből: 3.5 előadás	28	3.6 szeminárium/labor	56	
A tanulmányi idő elosztása:	óra	
A tankönyv, a jegyzet, a szakirodalom vagy saját jegyzetek tanulmányozása	40	
Könyvtárban, elektronikus adatbázisokban vagy terepen való további tájékozódás	5	
Szemináriumok / laborok, házi feladatok, portofóliók, referátumok, esszék kidolgozása	40	
Egyéni készségfejlesztés (tutorálás)	5	
Vizsgák	6	
Más tevékenységek: ..................		
3.7 Egyéni munka össz-óraszáma	95	
3.8 A félév össz-óraszáma	150	
3.9 Kreditszám	6 (M), 6 (MI), 6 (I)	

4.	Előfeltételek (ha vannak)
4.1 Tantervi	•	Nincs	
4.2 Kompetenciabeli	•	Feladatok kijelentéseinek megértése	

5.	Feltételek 
5.1 Az előadás lebonyolításának feltételei	•	Táblával és videoprojektorral felszerelt előadó	
5.2 A szeminárium / labor lebonyolításának feltételei	•	Számítógépes terem, a gépeken Pascal/C++	

6.	Elsajátítandó jellemző kompetenciák
Szakmai kompetenciák	•	Az algoritmus fogalmának megértése, az algoritmusok ábrázolási módozatainak elsajátítása 
•	Az algoritmusok tervezéséhez szükséges készségek kialakítása, a fegyelmezett, logikus és algoritmikus gondolkozás kialakítása
•	A strukturált programozás, a moduláris programtervezés, valamint a top-down és bottom-up programtervezés alapszabályainak megismerése és elsajátítása
•	Adott feladatosztályokhoz tartozó feladatok megoldási algoritmusainak és a szükséges adatszerkezeteknek megismerése és elsajátítása: számok, karakterláncok feldolgozása, sorozatok, kétdimenziós tömbök, keresés, összefésülés, rendezés stb.
•	A megtervezett algoritmusok implementálása egyszerű Pascal/C/C++ programok segítségével
•	A legfontosabb programozási módszerek (visszalépéses keresés, oszd meg és uralkodj, mohó algoritmusok) elsajátítása és a megfelelő feladatmegoldási készség kialakítása
•	Helyes, átlátható programozási stílus kialakítása, a dokumentálás alapszabályainak megismerése 	
Transzverzális kompetenciák 	•	Matematikai problémák megoldása informatikai eszközökkel.

7.	A tantárgy célkitűzései (az elsajátítandó jellemző kompetenciák alapján)
7.1 A tantárgy általános célkitűzése	•	Modellezési, feladatmegoldói, informatikai szövegértési készségek, jártasságok fejlesztése.
•	Az alkotókészség fejlesztése.
•	Egyéni munkára nevelés és a csapatszellem kialakítása.	
7.2 A tantárgy sajátos célkitűzései
	•	Fegyelmezett, logikus és algoritmikus gondolkozás kialakítása.
•	Programozási módszerek elsajátítása és gyakorlása.
•	A szoftvertervezés alapszabályainak megismerése.	

8.	A tantárgy tartalma
8.1 Előadások	Didaktikai módszerek	Megjegyzések	
1.	A számítógépes feladatmegoldás lépései
	1.1.	A programozói tevékenység
	1.2.	A feladatmegoldás lépései számítógépes környezetben
	1.3.	Alkalmazások minőségi szempontjai
2.	Az algoritmusok ábrázolása
	2.1.	Algoritmusok
		2.1.1.	Az algoritmus fogalma
		2.1.2.	Az algoritmusok leírásánál használt elemek
	2.2.	Algoritmusok ábrázolása folyamatábrák és pszeudokód 
			nyelvek segítségével
	2.3.	A strukturált programozás alapelvei
		2.3.1.	Lineáris struktúrák
		2.3.2.	Elágazási struktúrák
		2.3.3.	Ismétlő struktúrák
		2.3.4.	Az alapstruktúrák jelölése pszeudokódban	1.	Előadás	[3] pp: 13-34	
	2.4.	A feladatok számítógépes megoldásához fűződő 
			általános kérdések
		2.4.1.	Algoritmusok helyessége
		2.4.2.	Az algoritmus végrehajtásához szükséges idő
		2.4.3.	Az algoritmus által feldolgozott adatok számára 
				szükséges memória mérete
		2.4.4.	Algoritmusok egyszerűsége
		2.4.5.	Algoritmusok optimalitása
		2.4.6.	Algoritmusok létezése	2.	Előadás	[3] pp: 35-44	
3.	Lépések finomítása
	3.1.	Bevezetés és megoldott feladatok	3.	Előadás	[3] pp: 51-60
[4] pp: 9-35	
4.	Programozási tételek
	4.1.	Egyszerű programozási tételek (Összeg és szorzat, 
			Döntés, Kiválasztás, Szekvenciális (lineáris) keresés, 
			Megszámlálás, Minimum- és maximumkiválasztás, 
			Kiválogatás)	
4.	Előadás	
[3] pp: 73-85
[9] pp: 1-34	
	4.2.	Összetett programozási tételek (Szétválogatás, Sorozat 
			halmazzá alakítása, Keresztmetszet, Egyesítés, 
			Összefésülés)	5.	Előadás	[3] pp: 87-96
[10] pp: 1-41
	
5.	Alprogramok
	5.1.	Bevezetés
	5.2.	Algoritmusok és programok fejlesztési módozatai
		5.2.1.	A top-down típusú (fentről lefele) programozás
		5.2.2.	A bottom-up (lentről felfele) programozás
		5.2.3.	Moduláris algoritmustervezés
	5.3.	A moduláris programozás alapszabályai
		5.3.1.	Moduláris dekompozíció
		5.3.2.	Moduláris kompozíció
		5.3.3.	Modulok tulajdonságai
		5.3.4.	A modularitás alapelvei
	5.4.	Algoritmusok tesztelése
		5.4.1.	A fekete doboz módszere
		5.4.2.	Az átlátszó doboz módszere	6.	Előadás	[3] pp: 111-119
[4] pp: 42-66
	
6.	Rendezési algoritmusok
	6.1.	Bevezetés
	6.2.	Összehasonlításos rendezési módszerek
		6.2.1.	Buborékrendezés 
		6.2.2.	Egyszerű felcseréléses rendezés
		6.2.3.	Válogatásos rendezés
		6.2.4.	Minimum/maximum kiválasztásra épülő rendezés
		6.2.5.	Beszúró rendezés
	6.3.	Rendezések lineáris időben
		6.3.1.	Leszámláló rendezés (ládarendezés) 
		6.3.2.	Számjegyes rendezés 	7.	Előadás	[3] pp: 131-140	
7.	Rekurzió
	7.1.	Bevezetés és megoldott feladatok
	7.2.	Közvetlen rekurzió	8.	Előadás	[3] pp: 141-153	
8.	A visszalépéses keresés módszere (backtracking) 
	8.1.	Bevezetés
	8.2.	A visszalépéses keresés általános bemutatása
		8.2.1.	Iteratív algoritmus
		8.2.2.	Rekurzív algoritmus	9.	Előadás	[3] pp: 161-174	
8.3.	A visszalépéses keresés bővítése
	8.4.	Visszalépéses keresés a síkban	10.	Előadás	[3] pp: 175-184	
9.	Az oszd meg és uralkodj módszer (divide et 
	impera) 
	9.1.	Bevezetés és megoldott feladatok
	9.2.	Az oszd meg és uralkodj módszer általános bemutatása	11.	és 12. Előadás	[3] pp: 191-209	
10.	Mohó algoritmusok (greedy módszer) 
	10.1.	Bevezetés
	10.2.	A mohó algoritmus általános bemutatása	13. Előadás	[3] pp: 213-235	
	10.3.	Heurisztikus mohó algoritmusok	14. Előadás	[3] pp: 236-240	
Könyvészet
1.	Cormen T., Leiserson C., Rivest R., Stein, C. – Új algoritmusok, Scolar, Budapest, 2003.
2.	Horowitz E. – Fundamentals of Data Structures in C++, Computer Science Press, 1995.
3.	Ionescu K. – Bevezetés az algoritmikába, Egyetemi Könyvkiadó, Kolozsvár, 2007
4.	Kása Z. – Algoritmusok tervezése, Stúdium Könyvkiadó, Kolozsvár, 1994.
5.	Knuth D. E. – A számítógép-programozás művészete, I, II, III kötet, 1992.
6.	Rónyai, L., Ivanyos, G., Szabó, R. – Algoritmusok, Typotex, Budapest, 1999.
7.	Wirth N. – Algorithms + Data Structures = Programs, Prentice Hall Inc., 1976.
8.	Sedgewick R. – Algorithms in C++, Addisson-Wesley, 1992.
9.	Szlávi P., Zsakó L. – Elemi programozási tételek, Neumann János Számítógép-tudományi Társaság, Budapest, 2001.
10.	Szlávi P., Zsakó L. – Összetett programozási tételek, Neumann János Számítógép-tudományi Társaság, Budapest, 2001.	
8.2 Szeminárium / Labor	Didaktikai módszerek	Megjegyzések	
1. Lineáris struktúrák, Elágazási struktúrák, Ismétlő struktúrák, Böhm és Jacopini tétele	1.	Szeminárium	[3] pp:23-35	
2. Elemi algoritmusok (Felcserélés, Maximumérték, Legnagyobb, Palindromszám), érdekes algoritmus: Elnökválasztás	2.	Szeminárium	[3] pp:45-50	
3. Elemi algoritmusok 2 (Eukleidész algoritmusa, Prímszámok, Fibonacci-számok, Háromszög, Fordított szám, Törzstényezők, Konverzió, Gyors hatványozás)	3.	Szeminárium	[3] pp:51-72	
4. Egyszerű programozási tételek (Összeg és szorzat, Döntés, Kiválasztás, Szekvenciális (lineáris) keresés, Megszámlálás, Minimum- és maximumkiválasztás, Kiválogatás)	4.	Szeminárium	[3] pp:73-85
[3] pp:97-100
[9] pp: 1-34	
5. Összetett programozási tételek (Szétválogatás, Sorozat halmazzá alakítása, Keresztmetszet, Egyesítés, Összefésülés)	5.	Szeminárium	[3] pp:87-96
[3] pp:101-104
[10] pp: 1-41	
6. Alprogramok (polinomok, mátrixok, determináns)	6.	Szeminárium	[3] pp:114-116
[3] pp:120-130	
7. Rendező algoritmusok (Buborékrendezés, Egyszerű felcseréléses rendezés, Válogatásos rendezés, Minimum/maximum kiválasztásra épülő rendezés, Beszúró rendezés, Leszámláló rendezés, Számjegyes rendezés) 	7.	Szeminárium	[3] pp:131-136	
8. Parciális vizsga 	8.	Szeminárium		
9. Rekurzív algoritmusok (Egy szó betűinek megfordítása (Szavak sorrendjének megfordítása, Faktoriális, Legnagyobb közös osztó, Számjegyösszeg, Descartes-szorzat, k elemű részhalmazok, Konverzió, Fibonacci-sorozat, Minden részhalmaz, Partíciók, Halmazpartíciók, Kamatos kamat)	9.	Szeminárium	[3] pp:145-160	
10. Visszalépéses kereséssel megoldandó feladatok 1: 8 királynő a sakktáblán, Variációk, Zárójelek, Legrövidebb utak, Játékok, Szürjektív függvények, S pénzösszeg kifizetése, Összegkifizetés minimum számú bankjeggyel 	10.	Szeminárium	[3] pp:163-174	
11. Visszalépéses kereséssel megoldandó feladatok 2: Visszalépéses keresés a síkban, Labirintus, Fénykép, Legnagyobb méretű tárgyak	11.	Szeminárium	[3] pp:175-190	
12. Oszd meg és uralkodj módszerrel megoldandó feladatok: Minimumszámolás, Hatványozás, Bináris keresés, Összefésülésen alapuló rendezés, Gyorsrendezés, Hanoi tornyok, Úszómedence	12.	Szeminárium	[3] pp:192-211	
13. Mohó algoritmusokkal megoldandó feladatok: Összeg, Az átlagos várakozási idő minimalizálása, Buszmegállók, Autó bérbeadása, Hátizsák, Minimális feszítőfák (Kruskal és Prim), Minimális hosszúságú utak (Dijkstra algoritmusa)	13.	Szeminárium	[3] pp:216-235	
14. Heurisztikus mohó algoritmusokkal megoldandó feladatok: Utazóügynök, Gráfszínezés, Összegkifizetés legkevesebb számú bankjeggyel	14.	Szeminárium	[3] pp:236-245	
Könyvészet
1)	Ionescu K. – Bevezetés az algoritmikába, Egyetemi Könyvkiadó, Kolozsvár, 2007
2)	Kása Z. – Algoritmusok tervezése, Stúdium Könyvkiadó, Kolozsvár, 1994.
3)	Szlávi P., Zsakó L. – Elemi programozási tételek, Neumann János Számítógép-tudományi Társaság, Budapest, 2001.
4)	Szlávi P., Zsakó L. – Összetett programozási tételek, Neumann János Számítógép-tudományi Társaság, Budapest, 2001.	

9.	A tantárgy tartalmának összhangba hozása az episztemikus közösségek képviselői, a szakmai egyesületek és a szakterület reprezentatív munkáltatói elvárásaival.
•	A tantárgy tartalma megegyezik az egyetemi oktatásban a fontosabb egyetemeken oktatott algoritmusok és programozás bevezető tárgy hagyományos tartalmával.
•	A tárgy keretében figyelembe vesszük a számítógép használata nyújtotta lehetőségeket a matematikai problémák vizsgálatában. 	

10.	Értékelés
Tevékenység típusa	10.1 Értékelési kritériumok	10.2 Értékelési módszerek	10.3 Aránya a végső jegyben	
10.4 Előadás 	Alapfogalmak és algoritmusok ismerete	A félév közepén parciális írásbeli és gyakorlati vizsga	33 %	
10.5 Szeminárium / Labor	Házi feladatok (helyesség, stílus, dokumentáltság, indentálás, tesztelés) 33%	A vizsgaidőszakban írásbeli és gyakorlati vizsga	33 %	
10.6 A teljesítmény minimumkövetelményei	
•	Az elemi algoritmusok ismerete, a programozási tételek alkalmazása
•	Egyszerű rekurzív algoritmusok ismerete
•	Tudjon megoldani feladatokat visszalépéses kereséssel, oszd meg és uralkodj módszerrel, mohó algoritmussal	

Kitöltés dátuma			Előadás felelőse			Szeminárium felelőse
2012. okt. 21. 			...............................			...................................

Az intézeti jóváhagyás dátuma				Intézetigazgató,	
2012. okt. 28.						Dr. Szenkovits Ferenc, egyet. docens
..........................