Professional Documents
Culture Documents
Ea05 Handout
Ea05 Handout
2020. október 5.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 1 / 32
Függvények A felsorolt típus
Tartalom
Motiváció Mintapélda
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 2 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
1. fejezet
Függvények
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 3 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Szegmentálás motiváció
7 sum = 0; /* inicializ á l á s */
8 for (i = 1; i < 12; i = i +1) /* i = 1 ,2 ,... ,11 */
9 sum = sum + i * i ; /* ö sszegz é s */
10
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 4 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Szegmentálás motiváció
4 sum1 = 0; /* 12 - re */
Írjunk programot, mely
5 for ( i = 1; i < 12; i = i +1)
6 sum1 = sum1 + i * i ; elvégzi az el®bbi feladatot
7 a 12, 24 és 30 számokra!
8 sum2 = 0; /* 24 - re */
9 for ( i = 1; i < 24; i = i +1)
10 sum2 = sum2 + i * i ; Copy+Paste+javítgatás
11
Sok hibalehet®ség
12 sum3 = 0; /* 30 - ra */
13 for ( i = 1; i < 30; i = i +1) Hosszú program
14 sum3 = sum3 + i * i ; Nehezen
15
karbantartható
16 printf ( " %d , %d , % d \n " ,
17 sum1 , sum2 , sum3 );
18 return 0;
19 } link
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 5 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvények
A függvény
Önálló programszegmens
x↓
P1
x−
i2
i=1
y↓
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 6 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvények megoldás
1 int squaresum ( int n ) /* f ü ggv é nydefin í ci ó */
2 {
3 int i , sum = 0;
4 for (i = 1; i < n ; i = i +1)
5 sum = sum + i * i ;
6 return sum ;
7 }
8
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 7 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvény deníciója
Függvénydeníció szintaxisa
<visszatérési érték típusa>
<függvény azonosító> (<formális paraméterek listája>)
<blokk>
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 8 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvény deníciója
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 9 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 10 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvény deníciója
Formális paraméterlista
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 11 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvény deníciója
A return utasítás
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 12 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Függvényhívás
Függvényhívás szintaxisa
<függvény azonosító> (<aktuális paraméterek kif>)
1 double a = 1.0;
2 double x = distance (2.5 -1.0 , a ); /* x 0.5 lesz */
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 13 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
A f®program is függvény
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 14 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
A függvényhívás mechanizmusa
{
0x1FF0: 2
3
int S ;
0x1FF4: 3
4
S = x * y;
T 0x1FF8: 6
5
return S ;
b 0x1FFC: 3
6
}
a 0x2000: 2
7
/* F ® program */
regiszter: 0
9
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 15 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
A függvényhívás mechanizmusa
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 16 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Lokális változók
1 A függvény paraméterei és
2 a függvényben deklarált változók
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 17 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Rejtvény
Mit ír ki az alábbi program?
3 int a , b ;
4
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 18 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Összetett feladat
f®program prímteszt(p)
BE : low , high MINDEN i - re 2 - t ® l p gy ö k é ig
MINDEN i - re low - tó l high - ig HA i osztja p - t
HA pr í mteszt ( i ) IGAZ return HAMIS
KI : i return IGAZ
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 19 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 20 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
19
20 int main ()
21 {
22 int i;
23
33 return 0;
34 } link
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 21 / 32
Függvények A felsorolt típus Motiváció Def main Mech. Lok/Glob Pl.
Tervezési alapelv
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 22 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
2. fejezet
A felsorolt típus
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 23 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
A S D
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 24 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
Problémák:
A program többi részén (sok helyen) kell dekódolnunk a
karakterekb®l az irányokat.
Ha a programot átírjuk ←↓↑→ vezérlésre, ezer helyen kell
módosítanunk.
Megoldás:
Helyben kell dekódolnunk, és csak az irányt kell visszaadnunk.
De azt milyen formában?
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 25 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
Probléma:
A program többi részén a 0-3 számokat kell használnunk az
irányokra, a programozónak emlékeznie kell a szám-irány
összerendelésre.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 26 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
A típus használata
1 enum direction d ;
2 d = LEFT ;
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 27 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 28 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
És a függvény használata:
1 if ( d == RIGHT )
2 printf ( " Megevett egy tigris \ n " ); link
A felsorolt típus. . .
beszédes kóddal helyettesíti a magic konstansokat,
a tartalomra koncentrál az ábrázolás helyett,
magasabb szint¶ programozást tesz lehet®vé.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 29 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 30 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
enum példák
9 AUG , /* 7 */ 9 c = GREEN ;
10 SEPT , /* 8 */ 10 printf ( " c : % d \ n " , c );
11 OCT , /* 9 */
12 NOV , /* 10 */ c: 4
13 DEC /* 11 */
14 };
15
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 31 / 32
Függvények A felsorolt típus Motiváció Szintaxis Példák
Köszönöm a gyelmet.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. Függvények. A felsorolt típus. 2020. október 5. 32 / 32