Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Hasonló dokumentumok
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Objektumok tulajdonságai

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Típusok és konstansok

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

A C programozási nyelv I. Bevezetés

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 31. Széchenyi István Egyetem, Gy r

A C programozási nyelv I. Bevezetés

A C programozási nyelv II. Utasítások. A függvény.

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Java II. I A Java programozási nyelv alapelemei

A C programozási nyelv IV. Deklaráció és definíció

Eljárások és függvények

A programozás alapjai 1 Rekurzió

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Adatszerkezetek és algoritmusok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 15. Széchenyi István Egyetem, Gy r

Java II. I A Java programozási nyelv alapelemei

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Informatika terméktervezőknek

Rekurzív algoritmusok

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Bevezetés a programozásba Előadás: A const

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Mintavételes szabályozás mikrovezérlő segítségével

A C programozási nyelv III. Pointerek és tömbök.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A C programozási nyelv III. Pointerek és tömbök.

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Programozás II. 4. Dr. Iványi Péter

Kivételkezelés a C++ nyelvben Bevezetés

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

M veletek és kifejezések

Programozás I. 5. Előadás: Függvények

Programozás alapjai. 7. előadás

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Alprogramok, paraméterátadás

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Programozás alapjai. 5. előadás

Objektumok inicializálása

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Oktatási segédlet 2014

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

8. gyakorlat Pointerek, dinamikus memóriakezelés

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Bevezetés a programozásba I.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Programozás I gyakorlat

A félév során előkerülő témakörök

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

és az instanceof operátor

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Python tanfolyam Python bevezető I. rész

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

Készítette: Nagy Tibor István

Szövegek C++ -ban, a string osztály

Webprogramozás szakkör

Kivételek, kivételkezelés a C++ nyelvben

Programozás C és C++ -ban

Bevezetés a programozásba I.

Pénzügyi algoritmusok

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Web-technológia PHP-vel

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

Megoldott programozási feladatok standard C-ben

Stack Vezérlés szerkezet Adat 2.

Programozási nyelvek JAVA EA+GY 1. gyakolat

10. gyakorlat Tömb, mint függvény argumentum

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Programozási nyelvek (ADA)

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Átírás:

Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 11.

Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért használunk függvényeket? Hosszú forrásszöveg áttekinthet, kisebb részekre tördelése (modularitás) Többszöri felhasználás lehet sége egy programon belül, kódismétlés nélkül több programban, gyakran használt részeket nem kell újra megírni (ld. sqrt, pow)

Függvények Függvény deníció Teljes formai információ a függvényr l: visszatérési érték típusa, azonosító, formális paraméterek, függvénytest (ld. main) Pontosan egy létezhet bel le Forrásfájlokban vagy el fordított könyvtárakban tárolják 3 double a b s z o l u t ( double szam ) { 4 r e t u r n szam <0.? szam : szam ; 5 }

Függvények Függvényhívás A függvénynek a híváskor ismertnek kell lennie Vezérlés + aktuális paraméterek átadása Érték szerinti paraméterátadás Vezérlés visszaadása + visszatérési érték szolgáltatása: return 7 i n t main ( v o i d ) { 8 d o u b l e v ; 9 p r i n t f ( "Szam : " ) ; s c a n f ( "%l f ", &v ) ; 10 p r i n t f ( " A b s z o l u t e r t e k e : %f \ n a b s z o l u t ( 3) == %f " 11 "\ n a b s z o l u t ( v 3) == %f " 12 "\ n a b s z o l u t ( a b s z o l u t ( 3)) == %f \n", 13 a b s z o l u t ( v ), a b s z o l u t ( 3), 14 a b s z o l u t ( v 3 ), a b s z o l u t ( a b s z o l u t ( 3 ) ) ) ; 15 r e t u r n 0 ; 16 }

Függvények Visszatérési érték Vt. típusa nem lehet tömb return utáni kifejezés: hozzárendelési konverzió szükséges lehet void típus: valaminek a hiányát jelzi (eljárás) Formális paraméterlista Nincs információ a paraméterek számáról: int main() {...} Nincsenek paraméterek: int main(void) {...} Egy paraméter: double abszolut(double szam) {...} Két paraméter: double hatvany(double alap, double kitevo) {...} Aktuális paraméterek hozzárendelési konverzió formális paraméterek Tömb átadása speciális eset

Függvények Függvény teste tartalmazhat mindent, ami a main-ben is megengedett volt, azaz Változók deklarációit A blokkon kívül deklarált tételekre történ hivatkozásokat Tevékenységet meghatározó utasításokat Visszatérés a függvényb l a függvény végén return utasítással (a fv. tartalmazhat több return-t is) Karakter els el fordulásának keresése karakterláncban 3 i n t k e r e s ( c h a r miben [ ], c h a r mit ) { 4 u n s i g n e d i ; 5 f o r ( i =0; miben [ i ]!= ' \0 ' ; i ++) { 6 i f ( miben [ i ] == mit ) r e t u r n i ; 7 } 8 r e t u r n 1; 9 }

Függvények Függvények deníciói nem ágyazhatóak egymásba! (Kivéve GCC, nem szabványos b vítés) #i n c l u d e < s t d i o. h> i n t main ( v o i d ) { } double a b s z o l u t ( double szam ) { r e t u r n szam <0.? szam : szam ; } p r i n t f ( "%f \n", a b s z o l u t ( 1. ) ) ; r e t u r n 0 ; Fordítási hiba (GCC: gyelmeztetés) beagyazas.c: In function 'main': beagyazas.c:3:3: warning: ISO C forbids nested functions [-Wpedantic] double abszolut(double szam) {

Hozzárendelési konverzió El fordulások: változónak történ értékadáskor, pl. fv. visszatérési értékének átalakításakor unsigned int signed int 3 i n t k e r e s ( c h a r miben [ ], c h a r mit ) { 4 u n s i g n e d i ; 5 f o r ( i =0; miben [ i ]!= ' \0 ' ; i ++) { 6 i f ( miben [ i ] == mit ) r e t u r n i ; 7 } 8 r e t u r n 1; 9 }

Hozzárendelési konverzió El fordulások: változónak történ értékadáskor, pl.?: operátor használatakor int char 4 i n t main ( v o i d ) { 5 c h a r k ; 6 p r i n t f ( " K a r a k t e r : " ) ; s c a n f ( "%c ", &k ) ; 7 k = k>=' a ' and k<=' z '? k ' a '+ 'A ' : k ; 8 p r i n t f ( " Nagybetus a l a k : %c \n", k ) ; 9 r e t u r n 0 ; 10 }

Hozzárendelési konverzió El fordulások: változónak történ értékadáskor, pl. fv. aktuális paraméterének konverziójakor int double 3 d o u b l e a b s z o l u t ( d o u b l e szam ) { 4 r e t u r n szam <0.? szam : szam ; 5 } 13 a b s z o l u t ( v ), a b s z o l u t ( 3),

Hozzárendelési konverzió Részletek: C in a Nutshell Néhány példa: Mir l? Mire? Kimenetel signed+ unsigned signed unsigned el jel funkcióvesztése long int int értékvesztés veszélye int double pontosságvesztés veszélye oat double double oat pontosságvesztés veszélye double int törtrész levágás

Mintapélda függvények használatára Megvalósítandó szolgáltatások (függvények): Kombináció Adott n különböz elem. Ha n elem közül k(0 < k n) elemet úgy választunk ki, hogy mindegyik csak egyszer kerül sorra, és a kiválasztás sorrendje nem számít, akkor az n elem egy k-ad osztályú ismétlés nélküli kombinációját kapjuk. Jele: C k n C k = n! n (n k)!k! = ( ) n k Példa: hányféleképpen tudunk három gyümölcs (mondjuk alma, körte, barack) közül kett t kiválasztani? 1 alma, körte 2 alma, barack 3 körte, barack

Mintapélda függvények használatára Megvalósítandó szolgáltatások (függvények): Faktoriális Egy n nemnegatív egész szám faktoriálisa az n-nél kisebb vagy egyenl pozitív egész számok szorzata. Jele: n! n! = n k=1 k minden n 0 számra. Megállapodás szerint 0! = 1 n elemet n! sorrendbe lehet állítani (permutációk) Példa: hányféleképpen tudunk három gyümölcsöt (mondjuk alma, körte, barack) sorba állítani? 1 alma, körte, barack 2 alma, barack, körte 3 körte, alma, barack 4 körte, barack, alma 5 barack, alma, körte 6 barack, körte, alma

Mintapélda függvények használatára Megvalósítandó szolgáltatások (függvények): Beolvasás Beolvasandó n és k értéke F program Adatok beolvasása, ( n k) megjelenítése main beker kombinacio faktorialis

Mintapélda függvények használatára main beker kombinacio faktorialis be: n vissza: n be: k vissza: k mennyi n alatt k? vissza: n alatt k mennyi n!? vissza: n! mennyi k!? vissza: k! mennyi (n-k)!? vissza: (n-k)!

Mintapélda függvények használatára 1 #i n c l u d e < s t d i o. h> 2 #i n c l u d e < l i m i t s. h> 3 #i n c l u d e <s t d b o o l. h> 4 #i n c l u d e <i s o 6 4 6. h> 5 6 i n t b e k e r ( i n t max ) { 7 i n t szam ; 8 b o o l h i b a s ; 9 do { 10 p r i n t f ( "Szam : " ) ; s c a n f ( "%d", &szam ) ; 11 h i b a s = szam<1 o r szam>max ; 12 i f ( h i b a s ) p r i n t f ( " H i b a s a d a t! \ n" ) ; 13 } w h i l e ( h i b a s ) ; 14 r e t u r n szam ; 15 }

Mintapélda függvények használatára 17 u n s i g n e d l o n g f a k t o r i a l i s ( i n t n ) { 18 i f ( n < 2) r e t u r n 1 ; 19 u n s i g n e d l o n g f = 1 u l ; 20 f o r ( i n t i =1; i <=n ; i ++) { 21 f = i ; 22 } 23 r e t u r n f ; 24 } 25 26 u n s i g n e d l o n g kombinacio ( i n t n, i n t k ) { 27 r e t u r n f a k t o r i a l i s ( n ) / ( f a k t o r i a l i s ( k ) f a k t o r i a l i s ( n k ) ) ; 28 } 29 30 i n t main ( v o i d ) { 31 i n t n = b e k e r (INT_MAX ) ; 32 i n t k = b e k e r ( n ) ; 33 p r i n t f ( "%l u \n", kombinacio ( n, k ) ) ; 34 r e t u r n 0 ; 35 }

Fogalmak élettartam Élettartam (lifetime, duration): az a periódus a futásid alatt, amíg a változó/függvény létezik, memóriát foglal. Típusai: Statikus Futás kezdetét l végéig foglal memóriát Összes függvény, és globális (függvényeken kívül deklarált) változó ilyen Globális változók implicit inicializálása: minden bit zérus érték Lehet leg kerülni kell a globális változók használatát + Paraméter-átadás költsége megtakarítható Nehézkes újrahasznosíthatóság, rugalmatlan, környezetfügg kód, névütközések veszélye,...

Fogalmak élettartam Lokális blokkba belépést l annak elhagyásáig rendelnek memóriát hozzájuk függvényparaméterek, vezérlési szerkezetek deníciói is ilyenek csak explicit inicializáció történhet u n s i g n e d l o n g f a k t o r i a l i s ( i n t n ) { i f ( n < 2) r t u r n 1 ; e u n s i g n e d l o n g f = 1 u l ; f o r ( i n t i =1; i <=n ; i ++) { f = i ; } r e t u r n f ; } 17 18 19 20 21 22 23 24 Élettartamok (C99): faktorialis program teljes futásideje alatt létezik n f i 3 fv. hívás miatt 3x létrejön a fv. hívásakor/megsz nik visszatéréskor (18 v. 23. sor) létrejön ha n elég nagy, és megsz nik amikor a végrehajtás a 23. sorhoz ér a 20. sor elérése pillanatában jön létre, és a ciklusból kilépéskor felszabadul

Fogalmak hatáskör Hatáskör (érvényességi tartomány, hatókör, scope): meghatározza, hogy az objektumot a program mely részén lehet elérni; deklarációtól és annak helyét l függ en: Blokk (lokális, bels ) Deklarációtól a tartalmazó blokk végéig, beleértve a beágyazott blokkokat is Pl. függvény formális paraméterei, lokális változói Fájl (globális, küls ) minden függvény testén kívül deklarált azonosítók; deklarációs ponttól a fájl végéig Pl. függvények, globális változók

Fogalmak láthatóság Láthatóság (visibility): A forráskód területe, melyben az azonosító elérhet, hivatkozható Hatáskör és láthatóság általában fedik egymást, de a beágyazott blokkban deklarált azonosító ideiglenesen elrejtheti a befoglaló blokkban lév azonosítót rossz programozói gyakorlat, kerülend!

Rekurzió Rekurzív függvényhívás Minden fv. hívhatja magát közvetlenül vagy közvetve Minden hívásnál új területet foglalnak a formális paramétereknek, lokális változóknak A globális változók mindig ugyanazon a területen maradnak! El kell kerülni a végtelen mélység rekurziót! 17 u n s i g n e d l o n g f a k t o r i a l i s ( i n t n ) { 18 i f ( n < 2) r e t u r n 1 ; 19 r e t u r n n f a k t o r i a l i s ( n 1); 20 }

Rekurzió Hatványozás szorzásokra visszavezetve 2 l o n g hatvany ( i n t alap, u n s i g n e d k i t e v o ) { 3 l o n g eredmeny = 1 ; 4 u n s i g n e d i ; 5 f o r ( i =0; i <k i t e v o ; i ++) { 6 eredmeny = a l a p ; } 7 r e t u r n eredmeny ; } Rekurzív hatványozás, pl. 3 5 = 3 2 2 3 1 = 243 3 l o n g hatvany ( i n t alap, u n s i g n e d k i t e v o ) { 4 l o n g eredmeny ; 5 i f ( k i t e v o == 0) r e t u r n 1 ; 6 i f ( k i t e v o == 1) r e t u r n a l a p ; 7 eredmeny = hatvany ( alap, k i t e v o / 2 ) ; 8 eredmeny = eredmeny ; // nem h i v j u k 2 x! 9 i f ( k i t e v o%2 == 1) eredmeny = a l a p ; 10 r e t u r n eredmeny ; }

Rekurzió Fibonacci-sorozat: másodrendben rekurzív sorozat. Képzeletbeli nyúlcsalád növekedése: hány pár nyúl lesz n hónap múlva, ha az els hónapban csak egyetlen újszülött nyúl-pár van, az újszülött nyúl-párok két hónap alatt válnak termékennyé, minden termékeny nyúl-pár minden hónapban egy újabb párt szül, és a nyulak örökké élnek. F n = 0, ha n = 0 1, ha n = 1 F n 1 + F n 2 ha n > 1

Rekurzió Iteratív változat 3 u n s i g n e d l o n g f i b o n a c c i ( u n s i g n e d ho ) { 4 u n s i g n e d l o n g i =0, j =1, k ; 5 i f ( ho < 2) r e t u r n ho ; 6 f o r ( u n s i g n e d n=1; n<ho ; n++) { 7 k = i+j ; 8 i = j ; 9 j = k ; 10 } 11 r e t u r n k ; 12 } Rekurzív változat 3 u n s i g n e d l o n g f i b o n a c c i ( u n s i g n e d ho ) { 4 i f ( ho < 2) r e t u r n ho ; 5 r e t u r n f i b o n a c c i ( ho 1)+ f i b o n a c c i ( ho 2); 6 }