1

PROGRAMOZA8 C NYELVEN


Mélyen. mégis egyszerûen.
gyakorlatiasan és érdekesenl
Legyen benne eredetiségl
2
EI õszó

könyvet, amelyet kezeben tart az olvaso, tankönyvnek szantam. Gondolom,
eredmenyesen Iogiak hasznalni ugy a közepiskolas diakok, mint az egyetemi
hallgatok. Sót, remelem tanar kollegaim is talalnak benne ötlet eket, amelyeket
hasznalni tudnak maid bizonyos temak oktatasakor.
könyv megirasakor többre törekedtem, mint egyszerúen bemutatni a C
nyelvet (az SI standardnak megIelelóen), a celom az volt, hogy programozni
tanitsak. z elsó Ieiezettel igyekszem egy atIogo kepet nyuitani a programozasrol,
mint szamitogepes Ieladat megoldasrol. z ezt követó Ieiezetek olyan sorrendben
követik egymast, hogy Iokozatosan vezessek be az olvasot a programozas vilagaba.
Ieiezet ek t öbbe-kevesbe egymasra epülnek. Igyekeztem nem hivatkozni olyasmire,
ami meg nem lett bemutatva. Peldaul mar a masodik Ieiezetben a billentyúzetról
valo olvasassal es a monitorra valo irassal parhuzamosan bevezetem dioheiban a
szöveges allomanykezelest. z utolso Ieiezet celia, olyan helyzetbe iuttatni az
olvasot, hogy mintegy Ielülnezetból lasson bizonyos temaköröket.
zert, hogy a könyv ne túniön szaraznak, sok Iogalmat megoldott Ieladatokon
keresztül vezetek be. Iogalmak elmelyiteset ugyancsak megoldott Ieladatok altal
valositom meg. legt öbb Ieladat eseteben igyekszem elóször ravezetni az olvasot a
megoldasra, es csak azutan közlöm a Iorraskodot. Minden Ieiezet vegen kitúzött
Ieladatok talalhatok.
Tizenket eves oktatoi tapasztalatomat igyekeztem beepit eni e könyvbe.
Törekedtem ra, hogy gazdagon legyen illusztralva szemleltetó abrakkal. Egyes
Ieiezetek (peldaul a rekurzio) oktatasahoz egeszen saiatos modszereket iavasolok.
Diakiaim eredmenyei azt mutatiak, hogy ezen modszerek hat ekonyan alkalmazhatok.
Több kollegam is kiprobalta óket szep eredmennyel.
Bizom benne, hogy a kedves olvaso ugy talalia maid, hogy gyakorlatias,
erdekes, hasznos es eredeti tankönyvet tartott kezeben.

szerzó
3
%artalomjegyzék
EVEZETÉS 6
2 MEMÓRIA VÁLTOZÓK 2
2.1 Változónév (azonosító) 12
2.2 Változócím 12
2.3 Változótípusok 13
2.4 Változó értéke 14
2.5 Változódefiniálás 14
2.6 A scanf printf fscanf és fprintf függvények 15
&TASÍTÁSOK 25
3.1 Kifejezés-utasítás 25
3.2 Összetett utasítás 25
3.3 Döntési utasítások 25
3.3.1 z if utasitas 25
3.3.2 switch utasitas 29
3.4 Ciklus utasítások 33
3.4.1 while ciklus 33
3.4.2 do while ciklus 35
3.4.3 for ciklus 37
3.5 Ugró utasítások 40
3.5.1 break utasitas 40
3.5.2 continue utasitas 40
3.5.3 goto utasitas 41
3.5.4 return utasitas 42
KIFEJEZÉSEK 55
4.1 A kifejezések jobb (Rvalue) és bal (Lvalue) értéke 56
4.2 Konstansok 57
4.2.1 Egesz tipusu konstansok 57
4.2.2 Valos tipusu konstansok 58
4.2.3 Karakter tipusu konstansok 58
4.2.4 Karakterlanc tipusu konstansok 59
4.2.5 Szimbolikus konstansok 60
4.3 Operátorok 60
4
4.3.1 ritmetikai operator 60
4.3.2 Összehasonlitasi operator 61
4.3.3 Logikai operatorok 61
4.3.4 Bitenkenti operatorok 62
4.3.5 Ertekadas operator 64
4.3.6 Kombinalt operatorok 64
4.3.7 Vesszó operator 64
4.3.8 Felteteles operator 65
4.3.9 $izeof operator 65
4.3.10 Cast operator (explicit tipuskonverzio) 66
5 POINTEREK (M&TATÓK) 70
5.1 Muveletek pointerekkel 72
5.1.1 Ertekadas 72
5.1.2 Összehasonlitas 73
5.1.3 ·pointer~ ¹ / - ·egesz~ 73
5.1.4 Pointerek különbsege 74
6 TÖMÖK 76
6.1 Egydimenziós tömbök 76
6.1.1 Inicializalas deIinialaskor 77
6.1.2 Kapcsolat a tömbök es pointerek között 77
6.2 Karakterláncok (stringek) 85
6.2.1 Karakterlancok beolvasasa/kiirasa 86
6.2.2 Karaktrelanc kezeló Iüggvenyek 88
6.3 Kétdimenziós tömbök 95
6.4 Többdimenziós tömbök 100
7 DINAMIK&S HELYFOGLALÁS 0
FELHASZNÁLÓ ÁLTAL DEFINIÁLT TÍP&SOK 09
8.1 A typedef módosító jelzõ 109
8.2 A struct típus 109
8.2.1 struct - pointerek 113
8.2.2 Bitmezók 114
8.3 A union típus 116
8.4 A felsorolás típus (enum) 120
9 FÜGGVÉNYEK 22
9.1 Címszerinti paraméterátadás 126
9.2 Paraméterátadás a STACK-en keresztül 129
5
9.3 Globális és lokális változók 130
9.4 Programtervezés kicsiben 133
9.5 Függvény pointerek 137
9.6 Függvény paraméterként való átadása függvénynek 138
9.7 Változó paraméterszámú függvények 140
9.8 Parancssor argumentumok (a main függvény paraméterei) 143
9.9 Rekurzív függvények 144
0 MAKRÓK 50
ÁLLOMÁNYKEZELÉS (INP&T / O&TP&T MÛVELETEK) 55
11.1 Állománykezelõ függvények 156
11.2 A scanf/fscanf illetve printf/fprintf függvények közelebbrõl 162
11.3 Alacsony szintu állománykezelés 172
2 EGY ÁTFOGÓ KÉP A C-NYELVRÕL 7
12.1 Strukturált programozás 174
12.2 Moduláris programozás 175
12.3 Definíció és deklaráció 176
12.4 A változók osztályozása 177
12.5 A C nyelv típusai felülnézetbõl 181
12.6 Egy összetett feladat 182

6
EVEZETÉS

Ieladatmegoldas szamitogeppel kommunikaciot Ieltetelez. Ehhez viszont szükseg
van mindenek elótt a következókre:
1. Egy nyelvre, amely altal közölni tudom a szamitogeppel, mit szeretnek,
hogy elvegezzen.
2. gep .gondolkodasmodiahoz¨ igazodni, azaz, gepi szinten elmagyarazni,
hogy mi a teendóie.

Milyen nyelvet .ert¨ a szamitogep? gepi kodot. Ennek a gepnyelvnek az abeceie a
0 es 1 szamiegyekból all. Elvileg milyen lehetósegek lennenek a kommunikaciora?
O gep megtanul magyarul. Ez kizart, különben nem gep lenne, hanem
ember.
O Elsaiatitiuk mi a gepi kod-nyelvet. Ez termeszetesen lehetseges az elsó
szamitogepek igy voltak programozva de rendkivül .Iaraszto¨. Gondoliunk
bele, nehez egy olyan nyelven .beszelni¨, amelynek abeceie csupan ket betúból
all.
Mivel az ember kenyelmes leny, mas megoldasokat keresett. Igy született meg a
Iordito (kompilator) gondolata: irni egy olyan szoItvert (programot), amely Iordit gepi
kodra.
O legkenyelmesebb az lenne, ha letezne Iordito magyarrol gepi kodra.
Egyelóre ilyen Iorditot meg nem irtak.
O megoldas egy programozasi nyelv letrehozasa volt. Olyan .primitiv¨
nyelvról van szo, amely közelebb all az emberhez, mint a gepi kod,
megIogalmazhatok benne a gepnek szant utasitasok, es a ielenlegi eszközeinkkel
kepesek vagyunk olyan Iorditot irni, amely Iordit az illetó nyelvról gepi kodra.
ttol Iüggóen, hogy mennyire van közel az illetó nyelv az emberi nyelvhez, es
mennyire van tavol a gepi nyelvtól, megkülönböztetünk magas-, kòzepes- es alacsonv-
szintú programozasi nyelveket.
C egy közepes szintú programozasi nyelv.
mellekelt 1. abra szemleletesen mutatia be mindezt. kerdóiel azt a szakadekot
szemlelteti, amelyet at kell hidalnia valakinek, ha programozo szeretne lenni:
O meg kell tanulnia egy programozasi nyelvet
O meg kell tanulnia programozni a szamitogepet az illetó nyelven
Ebben a hasznos, es egyben erdekIeszitó törekvesben szeretne segitseget nyuitani a
könyv, amelyet az olvaso kezeben tart.
E könyvben a C nyelvnek Ióleg az SI szabvany szerinti valtozata kerül bemutatasra.
Miutan az 1970-es evekben Dennis Ritchie es Brian Keringhan letrehoztak a C nyelvet, a
nyelv különbözó valtozatai kezdtek megielenni. Szüksegesse valt tehat a nyelv
szabvanyositasa. Ez lehetóve teszi olyan programok irasat, amelyet barmely modern Iordito
Ielismeri. Ezt nevezik hordozhatosagnak.
7







PC







Belsó
MEMORI
(RM)

Mikroprocesszor
Hattertarak
merevlemez. CD. floppv)
Bemeneti periIeriak
!l. billentvúzet)
Kimeneti periIeriak
!l. kepernvo.
nvomtato)

EMBERI ELV (pl. magyar)
GEPI KOD (a gep .anyanyelve¨)
MGS SZITU PROGRMOZASI ELVEK (pl. Basic, Pascal, Cobol)
KÖZEPES SZINTÜ PROGRAMOZÁSI NYELVEK (pl. C, Forth)
LCSO SZITU PROGRMOZASI ELVEK (pl. ssembly)

K
O
M
P
I
L
A
1
O
R
?
2. abra
1. abra
8
ogvan tòrtenik fizikailag a kapcsolatteremtes a szamitogep feladatmegoldo
reszevel? Ezt mutatia be a mellekelt 2. abra:
.programozo F PC (personal computer)¨ iranyu kommunikacio altalaban a
billentyúzeten, a Iorditott iranyu pedig a monitoron vagy a nyomtaton keresztül törtenik.
szamitogepbe (PC) beiuttatott adatok a belsó memoriaban kerülnek eltarolasra.
Neumann Janostol erreIele, ugy a Ieladat adatai, mint a Ieladatot megoldo program itt
kerül eltarolasra. Ezt nevezzük a .tarolt program elvenek¨, amely Iordulopontot ielentett
a szamitastechnika törtenelmeben.
program vegrehaitasa abbol all, hogy a mikroprocesszor egyenkent kiolvassa a
memoriabol a program utasitasait es elvegzi óket. mikroprocesszor, az elóirt
múvelethez szükseges adatokat a belsó memoriabol
veszi es az eredmenyeket ugyanitt tarolia el. Ezert
ketiranyu a kommunikacio a mikroprocesszor es a belsó
memoria között.
leIorditott C program negy, logikailag különbözó
memoria-területet hasznal, mindeniknek megleven a
maga szerepe. Ezek egyike a program kodiat (az
utasitasokat) tartalmazza, a masik harom pedig az
adatokat, amellyel a program dolgozik. Kesóbb latni
Iogiuk, mitól Iügg, hogy bizonyos adatok melyik
memoria-területen (DT SZEGMES, STCK,
HEP) kerülnek eltarolasra. Függ a Iorditotol, a
programozasi környezettól es a mikroprocesszor
tipusatol, hogyan nez ki pontosan a programunk altal
hasznalt memoria-terület terkepe. mellekelt abra
elvileg mutatia be C programunkat a szamitogep memoriaiaban.
Mivel a belsó memoria tartalma törlódik a szamitogep kikapcsolasakor, kialakitottak
a hattertarakat (külsó memoriak). Ide ki lehet menteni adatokat, maid pedig vissza lehet
tölteni óket. hattertarakon az adatok allomanyokba (file) rendezve vannak tarolva.

ogvan kell megoldani egv feladatot szamitogeppel?

Hat lepest különithetünk el. iobb megertes kedveert egy iol ismert Ieladaton
keresztül mutatiuk be a lepeseket.
Feladat. Iriunk programot, amely kiindulva egy masodIok egyenlet valos együtthatoibol
(a, b, c), kiiria a gyökeit (x
1
, x
2
).

1. lépés. A feladat elemzése

Ieladat elemzesekor az alabbi kerdesekre keressük a valaszt:
1. Mi adott a Ieladatban? Ezek lesznek a bemeno adatok. ielen esetben az a. b. c
együtthatok.
Egy C program elvi
memoria terkepe

STCK




HEP


DT SZEGMES


PROGRM KODJ


9
2. Mit kell kiszamitani vagy elvegezni? Ezeket nevezzük eredmenveknek.
masodIoku egyenlet megoldasanak eredmenyei az x
1
, x
2
gyökök.
3. Melyik az a szamitogep szintien megIogalmazott múveletsor, amelyet, ha
vegrehait, lepesról-lepesre elvezeti a bemenó adatoktol a megoldashoz? Ezt
nevezzük a Ieladat megoldasi algoritmusanak. Ennek meghatarozasa ielenti
lenyegeben a Ieladat megoldasat. Ez a legIontosabb es egyben legnehezebb
lepes.
z algoritmusok ket kitüntetett múvelete, a bemenó adatok beolvasasa, illetve az
eredmenyek kiirasa. Honnan törtenik a bemenó adatok beolvasasa, illetve hova irodnak
ki az eredmenyek? beolvasas altalaban a billentyúzetról vagy egy allomanybol, a
kiiras a kepernyóre vagy egy allomanyba törtenik.
Egy lehetseges Iorgatokönyve annak, ahogy a szamitogep megoldia a Ieladatot, a
következó:
Beolvassa a billentyúzetról azt, ami adott a Ieladatban, a megoldasi algoritmusnak
megIelelóen feldolgozza ezeket az adatokat, es kiiria az eredmenyeket a kepernyóre.
z algoritmusokat logikai semak vagy pszeudokod nvelv segitsegevel szokas
abrazolni. z alabbiakban megtekinthetó a Ienti Ieladatot megoldo algoritmus logikai
semaval es pszeudokod nyelven Ielvazolva, illetve C nyelvre atirva. em Iúzünk
magyarazatot hozzaiuk, hiszen celunk velük egyszerúen annyi, hogy megIoghatobba
tegyük a megtargyalt Iogalmakat. Ennek ellenere csak nyer belóle az olvaso, ha
megprobalia magatol megerteni óket.
b ÷ 0
c ÷ 0
incs
megoldas
Vegtelen sok
megoldas
- c / b
a ÷ 0
a, b, c
STRT
STOP
d ÷ b
2
- 4ac
d · 0
incs valos
megoldas
x1 ,x2
a
d b
x
2
1


a
d b
x
2
2

beolvasas

kiiras

ertekadas

döntes
i
i
i
i
h
h
h
h
Logikai sema
10
algoritmus másodfokúegyenlet(a, b, c)
beolvas a, b, c pszeudókód
a a = 0
akkor a b = 0
akkor a c = 0
akkor kiír °Végtelen sok megoldás¨
különben kiír °Nincs megoldás¨
vége a
különben kiír - c / b
vége a
különben
d = b
2
- 4ac
a d < 0
akkor kiír °nincs valós megoldás¨
különben
x1 = (-b + d / 2a
x1 = (-b - d / 2a
kiír x1,x2
vége a
vége a
vége algoritmus
# include <stdio.h C - nyelvu program
# include <math.h
main(

double a, b, c, d, x1, x2;
scanf(°%lf%lf%lf¨, &a, &b, &c;
if (a == 0
if (b == 0
if (c == 0 printf(°Vegtelen sok megoldas¨;
else printf(°Nincs megoldas¨;
else printf(°%lf¨, - c / b;
else

d = b · b - 4 · a · c;
if (d < 0 printf(°Nincs valos megoldas¨;
else

x1 = (- b + sqrt(d / (2 · a;
x2 = (- b - sqrt(d / (2 · a;
printf(°%lf, %lf¨, x1, x2;
·
·
return 0;
·
11
Ha rendelkezesre all az algoritmus, milyen tovabbi lepesekre van szükseg ahhoz,
hogy a szamitogep altal vegrehaithato programhoz iussunk?
2. lépés. Kódolás
z algoritmus atirasa C nyelvre. Eredmenye a program (kod),
amelynek utasitasai utasitiak a szamitogepet az algoritmusban
elóirt múveletek elvegzesere.

3. lépés. Szerkesztés (Editálás)
C program megszerkesztese egy megIeleló (altalaban a C
programozasi környezetbe beepitett) szövegszerkesztóvel.
Eredmenye a Iorraskodnak nevezett allomany.

4. lépés. Fordítás (Kompilálás)
Iorraskod leIorditasa gepi kodra. Eredmenye a targykod.

5. lépés. Összeszerkesztés (Linkeditálás)
Eredmenye a Iuttathato kod (a gep kepes vegrehaitani).

6. lépés. Futtatás (Run)
gep vegrehaitia a program utasitasaiban elóirt múveleteket,
megoldva ezaltal a kivant Ieladatot.

Feladat
Algoritmus
!rogram(kod)
A feladat elemzese
Kodolas
Feiben / papiron
Forráskód
(.c állomány)
A program
szerkesztese
Kompilalas
Forditas)
Tárgykód
(.obj állomány)
Linkeditalas
Csszeszerkesztes)
Futtatható kód
(.exe állomány) Run
Kompilalasi
hibak
Linkelesi
hibak
Futasi/
Logikai
hibak
Mas targykod
egysegek
Szamitogepen
12

2 Memóri a váI tozók

Hova kerülnek a Ieladat bemenó adatai a beolvasas nyoman? memoriaba,
pontosabban az ugynevezett memoria valtozokba. Ugyancsak valtozokban taroliuk a
Ieladat eredmenyeit es reszeredmenyeit is.
memoriat ugy kell elkepzelni, mint sorszamozott memoriarekeszek egymasutaniat.
Minden rekeszben nyolc bitnek nevezett binaris szamiegy (0 vagy 1) kerül
eltarolasra. Mivel 8 bit 1 byte-ot alkot, a rekeszek szama megadia a memoria kapacitasat
byte-ban. Egy rekesz cimet a sorszama Ieiezi ki. memoriavaltozok szamara egymas
utani memoria rekeszek Ioglalodnak le. z elsó rekesz cime szamit a valtozo cimenek.
Egy valtozo merete annyi byte, ahany memoria rekesz van leIoglalva szamara.
Tekintsük egyelóre a valtozok alabbi negy iellemzóiet:






1. neve
2. címe
3. típusa
4. értéke

Memoria
0 00000000
1 00000000
2 00000000
. 00000000
. 00000000
. 00000000
1000 00000000
cime -~ 1001 00100100
1002 00011101
1003 00000000
. 00000000
. 00000000
. 00000000

2. VáItozónév (azonosító)
z angol abece kis es nagy betúit, az alahuzasielt, valamint szamiegyeket
tartalmazhat, de nem kezdódhet szamieggyel. C nyelv CSE erzekeny ami azt ielenti,
hogy különbseget tesz kis- es nagybetú között: mas, Mas, MA$, mas-mas valtozonevek. Ez
a meghatarozas ervenyes minden azonositora a C nyelvben, nemcsak a valtozonevekre.
ianlatos .beszedes¨ azonositokat valasztani, vagyis olyanokat, amelyeknek a ielentese
sugalmazza, hogy mire, milyen cellal Iogiuk hasznalni. Sót hasznos lehet kialakitani
szokasokat. Peldaul az s valtozoban mindig összeget taroliunk, az i-ben szamlalot ...

2.2 VáItozócím
z & operator segitsegevel hivatkozhatunk egy valtozo cimere. Peldaul &mas. a mas
nevú valtozo cimet ielenti.

13
2. VáItozótípusok
valtozo tipusa hatarozza meg a meretet, valamint azt, hogy milyen
ertektartomanybol tarolhat ertekeket. Kesóbb latni Iogiuk, hogy a tipus magaba Ioglalia
az illetó adattal elvegezhetó múveleteket is.
Alaptipusok:
char, int : egesz szamok tarolasara
float, double : valos szamok tarolasara
void : semmilyen/barmilyen tipus (lasd kesóbb)
egiegvzes.
O em minden valos szam tarolhato el pontosan a szamitogep memoriaiaban.
Ez logikus, hiszen egyes valos szamok vegtelen tizedes szamiegyet
tartalmaznak, amit lehetetlen abrazolni a ma hasznalatos szamitogepeken.

z alaptipusokbol ugynevezett tipus modositokkal tovabbi tipusok nyerhetók.

1ipusmódositók: signed, unsigned, short, long

z alabbi tablazat összeIoglalia a leggyakrabban hasznalt egyszerú tipusokat,
megadva a meretüket byte-ban, es a hozzaiuk kapcsolodo ertektartomanyt. mennyiben
hianyzik az alaptipus, implicit int-nek tekintendó. Peldaul a short valoiaban short
int-et ielent.

Tipus Meret Ertektartomany
1
char
8 -128 .. 127
2 unsigned char
8 0 .. 255
3
short
16 -32768 .. 32767
4
unsigned short
16 0 .. 65535
5
int
16/32
-32768 .. 32767/
-2147483648 .. 2147483647
6 unsigned int
16/32 0 .. 65535/ 0 .. 4294967295
7
long
32 -2147483648 .. 2147483647
8 unsigned long
32 0 .. 4294967295
9
float
32 3.4 10-38 .. 3.4 1038
10
double
64 1.7 10-308 .. 1.7 10308
11
long double
80 3.4 10-4932 .. 1.1 104932

Ienti tablazatba Ioglalt ertekek csak altalaban ervenyesek, hiszen a tipusmeretek
Iügghetnek a Iorditotol. z SI standard csak az alabbiakat iria eló:
1 <= sizeof(char <= sizeof(short <= sizeof(int <= sizeof(long
sizeof(float <= sizeof(double
sizeof operator egy tipus meretet adia meg byte-ban. (4.3.9. alIeiezet)

14
2. VáItozó értéke
Egy valtozo erteke a benne eltarolt ertek. Ezen ertek a programIutas alatt valtozhat
(ezert is nevezik valtozonak). mindennapi eletben altalaban 10-es szamrendszerben
dolgozunk, ami azt ielenti, hogy 10 szamiegyet (0, 1, 2, ... 9) hasznalunk. Ezzel szemben
a szamitogep csak 2 szamiegyet ismer, a 2-es szamrendszer szamiegyeit, a 0-t es az 1-et.
Mindennek dacara, a mi kenyelmünkert, 10-es szamrendszerben ertekezik a
Ielhasznaloval. Ez viszont azt ielenti, hogy a billentyúzetról begepelt adatokat a
szamitogepnek elóször at kell alakitania es csak azutan kerülhet sor az eltarolasukra. zt
a binaris alakot, amelyben az adatok eltarolasra kerülnek a memoriaban, belso
abrazolasnak nevezzük. nelkül, hogy reszleteznenk megemlitiük, hogy az egesz
szamok belsó abrazolasat Iixpontos, a valos szamoket pedig lebegópontos (angolul
floating) abrazolasnak nevezik.

2.5 VáItozódefi niáIás
Hogyan közöliük a szamitogeppel, hogy hozzon letre a memoriaban egy valtozot? z
illetó valtozo deIinialasa altal. Egy valtozo deIinialasakor, meg kell adnunk a valtozo
nevet, tipusat (ez hatarozza meg a meretet), es adhatunk egy kezdóerteket is (ez nem
kötelezó). Ha egy valtozonak nem adunk erteket a deIinialasakor, akkor bizonyos
esetekben (programozasi környezettól Iüggóen) automatikusan 0-val inicializalodik,
maskor viszont ugynevezett .memoria szemetet¨ Iog tartalmazni.
valtozodeIinialas szintaxisa:
típus> változó>[= kezdóérték>];
szögletes zaroielek azt ielzik, hogy a kezdóertek-adas nem kötelezó.
Peldak:
int a;
float b1, b2;
long i, j = 1, k;
unsigned char c = 65;
long double x, y = 3.14;

z algoritmusok kapcsan ket kitüntetett múveletról beszeltünk: a bemenó adatok
beolvasasarol, es az eredmenyek kiirasarol. Hogyan utasithato a szamitogep egy C
programbol ezen múveletek lebonyolitasara? billentyúzetról valo olvasasra, illetve a
monitorra valo irasra, peldaul a scanf es printf Iüggvenyek altal. Szöveges
allomany(bol/ba) valo olvasas/iras eseten hasznalhatiuk az fscanf es fprintf
Iüggvenyeket.

15
2.6 A scanf printf fscanf és fprintf függvények

Lassunk mindenek elótt egy konkret peldat az emlitett Iüggvenyek hasznalatara:

. feladat. Iriunk programot, amely beolvas a billentyúzetról/allomanybol egy egesz
szamot, maid kiiria a kepernyóre/allomanyba.
agvarazat. tanulsagok.
O program .kereteról¨ ,
#include <stdio.h
main(

. . .
return 0;
·
egyelóre csak annyit, hogy
o az #include <stdio.h programsort a scanf, printf, fscanf es
fprintf Iüggvenyek hasznalata teszi szüksegesse
o a main( ... return 0;· IóIüggveny minden C program resze.
Egy program vegrehaitasa alapvetóen a main Iüggveny utasitasainak
vegrehaitasat ielenti. z operacios rendszer, a program Iuttatasakor,
ennek a Iüggvenynek adia at a vezerlest es ettól is kapia vissza
(return 0;). Termeszetesen a main Iüggveny meghivhat mas
Iüggvenyeket, atadva es visszakapva a vezerlest. Ezek lehetnek
könyvtari Iüggvenyek (ielen programiainkban az fopen, fclose,
scanf, fscanf, printf, fprintf) vagy saiat Iüggvenyek (9. Ieiezet).

em all szandekunkban itt, most, a teliesseg igenyevel bemutatni ezeket a Iüggvenyeket. Csak annyit
szeretnenk elmondani, amennyire szüksegünk lesz ahhoz, hogy hasznalni tudiuk a könyv elsó Ieleben
szerepló Ieladatokban. z allomanykezelessel Ioglalkozo Ieiezetben (11.2 alIeiezet) uira visszaterünk
raiuk. Ha az olvaso telies kepet szeretne nyerni roluk, Iordulion a Help-hez, vagy a könyveszet azon
könyveihez, amelyek telies leirast adnak a C nyelvról.
C - nyelven

#include <stdio.h
main(

int a;
scanf(°%d¨,&a;
printf(°A szám:%d¨,a;
return 0;
·

C - nyelven

#include <stdio.h
main(

FILE · f;
FILE · g;
int a;
f = fopen(°be.txt¨, °r¨;
g = fopen(°ki.txt¨, °w¨;
fscanf(f, °%d¨, &a;
fprintf(g, °A szám:%d¨, a;
fclose(f; fclose(g;
return 0;
·

16
O Minden kapcsoszaroiel-par köze zart programreszt blokknak nevezünk.
Vegyük eszre, hogy a valtozok definialasara a blokkok eleien kerül sor.
Lesznek peldak, amelyekben helytakarekossagi okokbol csak a main
Iüggveny blokkianak tartalmat Iogiuk megirni.
O z elsó program a billentyúzetról olvas es a monitorra ir. masodik programban
viszont a beolvasas a be.txt nevú allomanybol törtenik, a kiiras pedig a ki.txt
nevú allomanyba.
O z allomany(bol/ba) valo olvasas/iras eseten szükseges az allomanyt ezt
megelózóen megnyitni (fopen), maid a vegen bezarni (fclose).
O bemeneti allomanyt (be.txt) olvasasra (r read) nyitiuk meg, a kimenetit
(ki.txt) pedig irasra (w rite).
O bemeneti allomanynak leteznie kell a program Iuttatasat megelózóen, es
tartalmaznia kell a bemenó adatokat, a kimeneti allomanyt viszont a program
Iogia letrehozni, a megadott nev alatt, es ebbe iria az eredmenyeket.
O z f es g, FILE · tipusu valtozokat allomanvmutatoknak nevezzük, es ezek
altal ielezzük az fscanf illetve fprintf Iüggvenyeknek, hogy melyik
allomanybol olvassanak, illetve melyikbe irianak. FILE · tipus egy pointer
tipus, amelyet kesóbb Iogunk bemutatni.
O Vegyük eszre, hogy scanf illetve fscanf, es printf, illetve fprintf
Iüggvenyek csak abban különböznek, hogy az utobbiakban szerepel az
allomanymutato.

z allomanymutato deIinialasanak szintaxisa :
FILE · <állomány_mutató;

Allomany megnyitasanak szintaxisa:
<állomány_mutató = fopen("<állomány_név",
"<megnyitás_módja";

Allomany bezarasanak szintaxisa:
fclose(<állomány_mutató;

scanf, printf, fscanf es fprintf Iüggvenyek szintaxisai:
scanf("<formázósor",<változócím_lista;
fscanf(<állomány_mutató,"<formázósor",<változócím_lista;
printf("<formázósor",<kifejezés_lista;
fprintf(<állomány_mutató,"<formázósor ",<kifejezés_lista;

Emlitve volt, hogy a beolvasott adatok bizonyos atalakulasokon mennek at, mielótt
eltarolasra kerülnenek a megIeleló valtozokban. Ha azt az alakot, amelyben begepeliük
az adatokat a billentyúzetról, vagy amelyben a bemeneti allomanyban vannak, kùlso
abrazolasnak nevezzük, akkor beolvasaskor at kell terni külsó abrazolasrol belso
17
abrazolasra, kiiraskor pedig Iorditva, belsóról külsóre. Mivel az atalakitasok tipus-
Iüggóek, taiekoztatnunk kell Iüggvenyeinket arrol, hogy tekintettel a valtozok
(scanf/fscanf eseteben), illetve a kiIeiezesek (printf/fprintf eseteben) tipusara,
milyen atalakitasra van szükseg. Ezt a szerepet a Iormazosorok ° karakterrel bevezetett
ugynevezett Iormazo karakterei töltik be. Peldaul, a scanf (fscanf) beolvassa a
billentyúzetról begepelt (az allomanyban talalhato) adatokat, a megIeleló Iormazo
karakter altal megielölt modon atalakitia óket, maid belsó abrazolasukat eltarolia a
valtozolistaban megielölt valtozocimekre. scanf (fscanf) Iormazosora gyakran csak
Iormazokaraktereket tartalmaz.
printf (fprintf) a Iormazosoraban talalhato nem Iormazo karaktereket egy az
egyben kiiria a kepernyóre (allomanyba), a °-al bevezetett Iormazo karakterek helyere
pedig beiria a kiIeiezeslista megIeleló kiIeiezesenek az erteket (miutan atalakitotta a
Iormazokarakterrel megadott modon belsó abrazolasbol külsó abrazolasba).
leggyakrabban hasznalt Iormazokarakterek:

%ipus Formazokarakter
char c
int d vagy i (10-es szamrendszerben)
o (8-as szamrendszerben)
x,X (16-os szamrendszerben)
unsigned int u
short int hd vagy hi
unsigned short int hu
long int ld vagy li
unsigned long int lu
float f
double lf
long double Lf
karakterlánc s
pointer p

z alabbi peldak bemutatiak a Iormazosor Iormazokaraktereit, valamint a scanf
valtozocim listaia, illetve a printf kiIeiezes listaia közötti kapcsolatot:
long a;
float b;
double c;
long double d;
scanf("ldflff", &a, &b, &c, &d;

printf("a=ld\nb=f\nc=lf\nd=f\n", a, b, c, d;

Következzen egy pelda az o, x es X Iormazokarakterek hasznalatara:
printf("%d, %o, %x, %X ", 10, 10, 10, 10; utasitas nyoman, a
kepernyón a következó ielenik meg: 10, 12, a, A
18
egiegvzes. a tizes-szamrendszerbeli 10-es, nyolcas szamrendszerben (oktal) 12,
tizenhatos szamrendszerben (hexa) pedig a vagy A.

Ha több adatot szeretnenk beolvasni ugyanazzal a scanf-Iel, akkor ezeket Ieher-
karakterekkel (ite-space-nek nevezzük, peldaul, a SPCE, TB es ETER billentyúk
leütesekor tovabbitodo karaktereket) elvalasztva kell begepelni, es a vegen ETER-t
kell leütni. Ugyanezeket az elvalaszto karaktereket kell hasznalni a bemeneti
allomanyokban is. Billentyúzetról valo beolvasas alatt a szamitogep megieleniti az
ugynevezett Ielhasznaloi kepernyót (UserScreen), amely visszhangozza a begepelt
karaktereket. Ugyanezen a kepernyón ieleniti meg a printf is az eredmenyeket.

Ha a Ienti Ieladat elsó megoldasaban a billentyúzetról beolvasott ertek 13, akkor a
kepernyón a következó ielenik meg: A szam:13
UserScreen tartalma a program leIutasa nyoman:


egiegvzes.
O scanf-nek es fscanf-nek illetve printf-nek es fprintf-nek, mint
Iüggvenyeknek, az ertekük, a sikeresen beolvasott ertekek, illetve a kiirt
karakterek szama lesz. Figyeliük meg, hogyan Iog kinezni a UserScreen az
alabbi utasitasok vegrehaitasa nyoman, ha n-be 15-öt olvasunk be:
int a, b;
a = scanf("%d", &n;
b = printf("%d ", n;
printf("%d %d", a, b;

tovabbi Ieladatokbol meg több derül ki a bemutatott Iüggvenyekról.

2. feladat. Iriunk programot amely beolvas a billentyúzetról ket valos szamot, maid
kiiria a kepernyóre magukat a szamokat, illetve az összegüket.
13
A szám:13
beolvasas visszhangia
kiiratas eredmenye
15
15 1 2
scanf visszhangia
printf-ek .nyoma¨
19


egiegvzes.
O Biztosan Ieltúnt, hogy a printf Iormazosoraban a % karaktert nem
közvetlenül követte az f (float Iormazokarakter. Igen, megadhato, hany
pozicion kerülienek kiirasra az ertekek, es valos szamok eseten az is, hogy
ebból hany legyen a tizedesresznek Ienntartva (ennek hianyaban implicit 6
tizedes pontossaggal törtenik a valos szamok kiirasa). Ugyis mondhatnank,
Iormazhato a megielenites modia. Ienti peldaban öt pozicion törtenik a
kiiras, amiból kettó a tizedes resze. Ez azt ielenti, hogy az egesz resznek
ugyancsak ket pozicio marad, hiszen egy poziciot a tizedespont Iog elIoglalni.
Ha az egesz resz több szamiegyú, mint ahany pozicion keriük a kiiratast,
akkor Iigyelmen kivül lesz hagyva a kert pozicioszam, hogy az inIormacio ne
serüliön. Ellenkezó esetben, az üresen maradt poziciok szoköz karakterrel
potolodnak ki. Ha a tizedes szamiegyek szama több, mint a szamukra
Ienntartott pozicioszam, akkor a plusz szamiegyek .lemaradnak¨, es kerekites
törtenik. Kevesebb tizedes szamiegy eseten nullakkal egeszitódik ki a
tizedesresz.


Pelda:

printf("%5.2f", x

megielenites

ha x erteke: 13.47
1
3 . 4 7
ha x erteke: 1352.4712 1 3 5 2 . 4 7
ha x erteke: 3.4777

3 . 4 8
ha x erteke: .5

0 . 5 0
ha x erteke: 0.

0 . 0 0

#include <stdio.h
main(

float x1, x2;
printf(°Ird be az elsó számot:¨;
scanf(°%f¨, &x1;
printf(°Ird be a második számot:¨;
scanf(°%f¨, &x2;
printf(°A két szám:%5.2f es %5.2f\n¨, x1,x2;
printf(°A két szám összege:%5.2f¨, x1+x2;
return 0;
·
20
3. feladat. Iriunk programot, amely beolvas a billentyúzetról ket egesz szamot, maid
kiiria a kepernyóre az összegüket, különbsegüket, szorzatukat, hanyadosukat valamint
osztasi maradekukat (Ieltetelezzük, hogy a masodik szam különbözik nullatol).

#include <stdio.h
main(

int a,b,osszeg,kulonbseg,szorzat,hanyados,maradek;
printf(°Ird be a két számot:¨; scanf(°%d%d¨, &a, &b;
osszeg = a + b;
kulonbseg = a - b:
szorzat = a · b;
hanyados = a / b;
maradek = a % b;
printf(°Jsszeg:%4d\nKulönbség:%4d\n$zorzat:%7d\n
Hányados:%4d\nMaradék:%4d¨, osszeg, kulonbseg, szorzat,
hanyados, maradek;
return 0;
·


egiegvzes.
O Egesz szamok kiirasakor is megadhato a mezószelesseg, azaz, hogy hany
pozicion kerülienek kiirasra. Ugyanaz a megiegyzes ervenyes raiuk, mint amit
a valos szamok egeszreszenel tettünk.
Pelda:
printf("%5ld", x

megielenites

ha x erteke: 12947
1
2 9 4 7
ha x erteke: 135294712 1
3 5
2 9 4 7
ha x erteke: 77

7 7

egiegvzesek a programban hasznalt operatorokkal (múveletielek) kapcsolatban:

1. ¹, -, * operatorok a matematikaban megszokott modon viselkednek. / operator
eseteben, ha mindket operandus egesz, akkor egesz osztas törtenik, ha viszont
valamelyik valos, akkor valos osztas. ° az egesz osztas maradekat adia meg, ezert
operandusai csak egeszek lehetnek.
Peldak:
7 / 2 <- 3
7.0 / 2.0 <- 3.5
7.0 / 2 <- 3.5
7 / 2.0 <- 3.5
7 % 2 <- 1
2. z "=" ielet, ertekadas operatornak nevezzük.

21
z ertekadas szintaxisa:
<változó = <kifejezés;
Hatasara a valtozo (bal oldal) Ielveszi a kiIeiezes (iobb oldal) erteket.
Peldak:
double x = 1, y = 2, z = 3, w;
w = (x + y · (z - 1;
w valtozo erteke 6 lesz.

3. Különbözó lehetósegek egy valtozo ertekenek eggyel valo növelesere illetve
csökkentesere:
int a = 7;
a = a + 1; < == a += 1; < == a++; < == ++a;
a = a - 1; < == a -= 1; < == a--; < == --a;

4. Mi a különbseg az a++, illetve ++a inkrementalasok között?
Pelda:
int a = 1, b, c = 2, d;
d = c++; /· d erteke 2, a c erteke pedig 3 lesz·/
b = ++a; /· Ugy a b mint az a valtozok erteke 2 lesz ·/
z elsó utasitas ertelmeben a szamitogep elóször hasznalia a valtozo erteket a
kiIeiezes kiertekeleseben es csak azutan növeli, a masodik esetben pedig Iorditva:
elóször növeli es azutan hasznalia.
Termeszetesen ugyanez igaz a -- operator eseteben is.

5. Valtozo eretkenek növelese egy adott ertekkel:
int a = 7, b = 3;
a = a + b; < == a += b;
a = a - b; < == a -= b;

6. Kombinalt operatorok hasznalatanak szintaxisa:

<változó=<változó+<kifejezés; <== <változó+= <kifejezés;

Mas kombinalt aritmetikai operatok: +=, -=, ·+, /=, %=

7. \n-nel ielölt karaktert a printf, illetve a fprintf Iormazosoraban uisor
(neline) karakternek nevezik, ugyanis uisorba lepteti a kepernyón vagy a kimeneti
allomanyban a kurzort.


4. feladat. dott 4 egesz szam a szamok.be szöveges allomanyban. Szamitsuk ki az
összegüket es iriuk ki a szamok.ki szöveges allomanyba.

22
egiegvzes. Elsó latasra ugy túnhet, hogy szüksegünk lesz negy valtozora a negy szam
eltarolasara. z alabbi megoldasbol kiderül, hogy eleg egy valtozot hasznalni erre a
celra. mellekelt abra szemlelteti az ötletet. Ezen megközelites elónye, hogy a valtozok
szama nem Iügg a beolvasott szamok szamatol.



5. feladat. Iriunk programot amely, beolvas a billentyúzetról egy negyiegyú termeszetes
szamot es kiiria a szamiegyei összeget a kepernyóre.
Ctlet. z n % 10 kiIeiezes az n utolso szamiegyet adia meg, az n /= 10; utasitas
pedig levagia n utolso szamiegyet. mellekelt tablazat nyomon követi, hogyan valtozik
az n es a p valtozok erteke a program vegrehaitasa alatt.

#include <stdio.h
main(

int n, p = 1;
printf(°Ird be a számot:¨;
scanf(°%d¨,&n;

4-szer fogom megismételni a
következó két muveletet :
p-t megszorzom n utolsó
számjegyével, majd levágom n
utolsó számjegyét.
·/
p ·= n % 10; n /= 10;
p ·= n % 10; n /= 10;
p ·= n % 10; n /= 10;
p ·= n % 10; n /= 10;
printf(°A szorzat:%d¨, p;
return 0;
·


Pelda: Ha a beolvasott szam, 2541


n p
2541 1
254 1
25 4
2 20
0 40

#include <stdio.h
main(

FILE ·f1, ·f2;
int x,s = 0;
f1 = fopen(°szamok.be¨, °r¨;
f2 = fopen(°szamok.ki¨, °w¨;
fscanf(f1, °%d¨, &x; s += x;
fscanf(f1, °%d¨, &x; s += x;
fscanf(f1, °%d¨, &x; s += x;
fscanf(f1, °%d¨, &x; s += x;
fprintf(f2, °Az Jsszeg:%d¨, s;
fclose(f1; fclose(f2;
return 0;
·

Pelda:
75 10 -50 -5


¹÷
x s


75 10 -50 -5 Az összeg: 30
szamok.be szamok.ki
23

Egy C program tartalmazhat magyarazoszövegeket, ugynevezett kommentarokat (/ *
... */). Ezeket a Iordito Iigyelmen kivül hagyia. Celiuk, könnyebben erthetóve tenni a
Iorraskodot. z olyan programok eseteben, amelyeket hosszu idón keresztül hasznalunk,
elengedhetetlen a megIeleló kommentarok hasznalata.

Kitúzòtt feladatok.

1) Iriunk programot, amely beolvas ket valos szamot ket valtozoba, kicsereli a
valtozok tartalmat, maid pedig kiiria a szamokat Iorditott sorrendben. Probaliuk
megoldani a Ieladatot ugy is, hogy ne hasznaliunk harmadik valtozot a cserehez.
2) Iriunk programot, amely beolvas egy öt szamiegyú termeszetes szamot egy egesz
valtozoba, elóallitia a Iorditottiat egy masik valtozoban, maid kiiria a ket szamot
egymas ala a kepernyóre.
3) Iriunk programot, amely beolvas negy, harom szamiegyú termeszetes szamot, es
kiiria a szamiegyeik összegenek atlagat.
4) Iriunk programot, amely kiszamitia egy adott sugaru gömb, illetve adott sugaru
es magassagu egyenes henger es kup Ielszinet es terIogatat. z eredmenyeket
tablazatos Iormaban ielenitse meg.
5) Iriunk programot, amely kiszamolia es kiiria egy gepkocsi Iektavolsagat a
sebesseg es az utviszonyok Iüggvenyeben. Ieltetelezett lassulas
a) normal uton: 4,4 m/s
2

b) vizes uton: 3,4 m/s
2

c) vizes, nyalkas uton: 2,4m/s
2

reakcio idó: 1 masodperc
gepkocsi kezdósebessege bemeneti adat.
6) Iriunk programot, amely beolvassa egy derekszögú haromszög egyik szögenek
erteket Iokokban, az atIogot cm-ben es kiiria a haromszög beIogoinak hosszat es a
haromszög köre irhato kör területet es kerületet.
7) Olvassuk be a kepernyóról egy piskotatarto mereteit atmeróiet es magassagat
valamint a ra teendó krem vastagsagat cm-ben. Szamoliuk ki, mennyi kremre van
szükseg a torta bevonasahoz, ha 5°-os rahagyassal dolgozunk (gyerekek is vannak a
csaladban...)!
8) dott ket pont, es B a sikban a koordinataik altal. Hatarozzuk meg:
a) az B szakasz hosszat

2
B
2
B
y y x x ' B '

b) az B szakasz közeppontianak koordinatait

2 / y y y
2 / x x x
B M
B M



c) az B egyenes iranytenyezóiet
24
B
B
d
x x
y y
m

d) egy M pont tavolsagat az B egyenestól
2 2
M M
b a
c y b x a
) d , M ( tavolsag

c c

ahol a. b. c a d egyenes egyenletenek együtthatoi (aX¹bY¹c÷0). Tovabba ket
ponton atmenó egyenes egyenlete: X-x
A
)v
A
-v
B
)÷Y-v
A
)x
A
-x
B
)
9) dott egy haromszög. Hatarozzuk meg a haromszög kerületet es területet a
csucspontiainak koordinatai alapian.
c p b p a p p S
BC
c c c

ahol a. b. c az oldalhosszak, p pedig a Ielkerület.

egiegvzes. Ieladatokat oldiuk meg az alabbi esetekben:
bemenet kimenet
billentyúzet monitor
billentyúzet allomany
allomany monitor
allomany allomany

25
&tasí tások
z utasitasok utasitiak a szamitogepet a Ieladat megoldasi algoritmusaban elóirt
múveletek elvegzesere. következókben bemutatiuk a C nyelv utasitaskeszletet.

. Ki fejezés-utasítás
Szintaxisa: kifejezés>;
leggyakrabban hasznalt kiIeiezes-utasitas az ertekadas. Egy fùggvenvivas is
kiIeiezes-utasitas. Eddigi programiainkban kizarolag ilyen utasitasok szerepeltek. Ime
hat pelda kiIeiezes-utasitasra:
printf("Ird be a két számot:";
scanf("%d%d", &a, &b;
osszeg = a + b;
a + b; /· bár szintaktikailag helyes, értelmetlen ·/
p ·= n % 10;
n /= 10;
Egy specialis kiIeiezes-utasitas, az ùres-utasitas. ;
Altalaban olyan helyen hasznaliuk ahol a szintaxis utasitast követel, de nekünk nem
all szandekunkban oda utasitast irni (peldaul olyan ciklusokban, amelyeknek hianyzik a
magiuk 3.4 alIeiezet).

.2 Összetett utasítás
Ha szeretnenk több egymas utan következó utasitast egyetlen összetett utasitaskent
kezelni, akkor össze kell Iogiuk óket egy kapcsoszaroiel-parral( ] ). Összetett
utasitasok kepezesere akkor lehet szükseg, amikor a szintaxis egyetlen utasitast ker, de
mi több utasitast szeretnenk oda irni. Mivel egy kapcsoszaroiel-par köze zart resz
blokkot kepez, az elózó Ieiezetben tett megiegyzessel összhangban, minden összetett
utasitas eleien deIinialhatunk valtozokat. Ezek viszont lokalisak lesznek az illetó
blokkra nezve, ami azt ielenti, hogy csakis a blokk kereten belül hasznalhatok.

. Döntési utasítások
. . Az if utasí tás

kkor hasznaliuk, amikor egy Ieltetel igaz vagy hamis voltatol Iüggóen, mas-mas
múveletet kell elvegezni. Olyan helyzet is elóIordulhat, amikor, amennyiben igaz a
Ieltetel el kell vegezni egy bizonyos múveletet, különben nem. z alabbi abrak logikai
semaval, pszeudokodban es C nyelven mutatiak be a döntesutasitast.
döntes Ieltetele gyakran összehasonlitast Ioglal magaba. z összehasonlitasi
operatorok a következók: <, <=, , =, == (egyenlóseg vizsgalat), != (különbözóseg
vizsgalat)

26


Lassuk, hogyan hasznalhatok a döntesi utasitasok Ieladatok megoldasaban?

. feladat: Iriunk programot, amely beolvas a billentyúzetról ket termeszetes szamot a-t
es b-t, maid kiiria óket növekvó sorrendben.

. megoldas.

!8eudókód

a <logikai_kifejezés
akkor <utasítás
¯különben
<utasítás`
vége a
C - nvelven
if (<logikai_kifejezés
<utasítás;
¯else <utasítás;`
Logikai sema










F Ieltetel (logikai kiIeiezes)
U1, U2 utasitasok
i igaz, h - hamis
F
U1 U2
F
U1
i i h h
!8eudókód

beolva8 a, b
a ab
akkor kiír b,a
különben kiír a,b
vége a
C - nyelven

int a, b;
scanf(°%d%d¨, &a, &b;
if ( a b printf( °%d %d¨, b, a;
else printf( °%d %d¨, a, b;
a~b
b, a
a, b
i h
a, b
27
Logikai sema
2. megoldas.


egiegvzes.
z elsó megoldasban, egyszerúen kiirtuk a ket valtozo erteket a kert sorrendben, mig
a masodik megoldas Iel is csereli a ket valtozo erteket. Igy, ebben a kert sorrendben
allnak rendelkezesre az esetleges tovabbi Ieldolgozasok soran.

2. feladat: z input.c bemeneti allomanyban adott harom valos szam, iriuk ki óket
növekvó sorrendben az output.c kimeneti allomanyba.

Ctlet. Összehasonlitgatiuk a valtozokat kettónkent az abran bemutatott strategia szerint,
es ahol szükseges (az összehasonlitott valtozok ertekei nincsenek növekvó sorrendben)
kicsereliük a tartalmukat.

Logikai sema
!8eudókód

beolva8 a, b
a ab
akkor
v = a
a = b
b = v
vége a
kiír a, b
C - nyelven

int a, b, v;
scanf(°%d%d¨, &a, &b;
if ( a b v = a; a = b; b = v;·
printf( °%d %d¨, a, b;
a~b
v ÷ a
i h
a, b
a ÷ b
b ÷ v
a, b
FILE ·f,·g;
float a, b, c, v;
f = fopen(°input.c¨, °r¨;
g = fopen(°output.c¨, °w¨;
fscanf(f, °%f%f%f¨, &a, &b, &c;
if ( a b v = a; a = b; b = v;·
if ( b c v = b; b = c; c = v;·
if ( a b v = a; a = b; b = v;·
fprintf(b, °%f %f %f¨, a, b, c;
fclose(f;
fclose(g;
a b c
1
3
2
28
3. feladat. Olvassunk be negy egesz szamot a billentyúzetról. Ellenórizzük van-e
közöttük paros szam es iriunk ki egy megIeleló üzenetet a kepernyóre.

. megoldas.
Mielótt adnank egy elegansabb megoldast is a Ienti Ieladatra, ismerkediünk meg a
logikai operatorokkal.

Logikai operátorok:

logikai es. ( and ) ket operandusu
logikai vagv. ( or ) ket operandusu
logikai tagadas. ( not ) egy operandusu

O z and múvelet eredmenye akkor igaz, ha mindket operandusa igaz,
különben hamis.
O z or múvelet eredmenye akkor igaz, ha legalabb az egyik operandusa
igaz, különben hamis.
O not múvelet eredmenye igaz/hamis, attol Iüggóen, hogy operandusa
hamis/igaz.
2. megoldas
O C-ben nincs logikai tipus.
O Minden 0-tol különbözó erteknek igaz a logikai erteke, a 0-nak pedig amis.
Ezert kiIeiezóbb, ha, a (<kifejezés == 0 alak helyett a
(!<kifejezés alakot hasznaliuk. Hasonlokeppen (<kifejezés != 0
helyett iriunk egyszerúen(<kifejezés-t.
3. megoldas
int a,b,c,d;
scanf(°%d%d%d%d¨,&a,&b,&c,&d;
if (a%2 = = 0 printf( °Van közöttuk páros¨ ;
else if (b%2 = = 0 printf(°Van közöttuk páros¨;
else if (c%2 = = 0 printf(°Van közöttuk páros¨;
else if (d%2 = = 0 printf(°Van közöttuk páros¨;
else printf(°Nincs közöttuk páros¨;
int a,b,c,d;
scanf(°%d%d%d%d¨,&a,&b,&c,&d;
if (a%2 = = 0 || b%2 = = 0 || c%2 = = 0 || d%2 = = 0
printf( °Van közöttuk páros.¨ ;
else printf(°Nincs közöttuk páros.¨;
int a,b,c,d;
scanf(°%d%d%d%d¨,&a,&b,&c,&d;
if (!(a%2 || !(b%2 || !(c%2 || !(d%2
printf( °Van közöttuk páros.¨ ;
else printf(°Nincs közöttuk páros.¨;
29
3. 3. 2 A switc ut así tás
z alabbi Ieladat ravezet a switch utasitas gyakorlati ertekere.

. feladat: Iriunk programot, amely beolvas egy, az |1, 5| intervallumhoz tartozo szamot
es kiiria a neki megIeleló minósitest: 1 elegtelen, 2 elegseges, 3 közepes, 4 io, 5
ieles.

. megoldas (egymasba agyazott if utasitasokkal)

switch utasitas szintaxisa:

switch(< szelektor

case < k
1
: <U
1
; ¯ break; `
case < k
2
: <U
2
; ¯ break; `
.
.
.
case < k
n
: <U
n
; ¯ break; `
¯default <U
n + 1
;`
·

egiegvzesek.
O a szelektor barmilyen egesz tipusu kiIeiezes lehet.
O a case-konstansok ( k
1
, k
2
, ..., k
n
) egesz konstansok
O a break utasitas (opcionalis) beIeiezi a switch utasitast (3.5.1 alIeiezet).

Lassuk, hogyan múködik a switch utasitas?
O Kiertekelódik a szelektor-kiIeiezes
O szelektor erteke összehasonlitodik sorra (Ientról leIele) a case
konstansokkal
O Ha letezik a szelektorral egyenló ertekú case konstans (peldaul k
i
), a
program .atlep¨ a megIeleló utasitashoz (U
i
)
O Vegrehaitodik U
i

O Ha U
i
-t break követi, beIeiezódik a switch utasitas
int jegy;
scanf(°%d¨,&jegy;
if(jegy = = 1 printf(°Elégtelen¨;
else if(jegy = = 2 printf(°Elégséges¨;
else if(jegy = = 3 printf(°Közepes¨;
else if(jegy = = 4 printf(°Jó¨;
else if(jegy = = 5 printf(°Jeles¨;
else printf(°Téves beolvasás¨;
30
O Ha U
i
-t nem követi break, Iolytatodik a switch vegrehaitasa az U
i+1
,
U
i+2
, ..., utasitasokkal U
n
-ig, vagy egy olyan utasitasig, amelyet break
követ.
O Ha a szelektor egyetlen case konstanssal sem egyenló, akkor az U
n+1
utasitas haitodik vegre, amennyiben letezik a default ag.
O hhoz, hogy a switch utasitas a Pascal-beli case-hez hasonloan
múködiön, szükseges minden ag vegere a break utasitas.

2. megoldas (switch utasitassal)
egiegvzes.
Ha nem egyetlen kiIeiezes különbözó ertekeitól Iügg az elagazas, vagy a szelektor-
kiIeiezes nem egesz tipusu, akkor nincs mas valasztas, mint az egymasba agyazott if.

z alabbi Ieladat megoldasa bemutatia a switch hasznalatat break nelkül.

2. feladat. Iriunk programot, amely beolvas egy, az |1, 5| intervallumhoz tartozo szamot
es kiir a szammal egyenló szamu csillag karaktert (*).

Kitúzòtt feladatok

egiegvzes. Mivel a valos szamok nem mindig tarolhatok el pontosan a szamitogep
memoriaiaban, ezert a velük vegzett múveletek alkalmaval szamitasi hibak adodhatnak.
Ebból kiIolyolag ket valos szam egyenlóseg vizsgalatakor az A = B alak helyett
int jegy;
scanf(°%d¨,&jegy;
switch(jegy

case 1 : printf(°Elégtelen¨; break;
case 2 : printf(°Elégséges¨; break;
case 3 : printf(°Közepes¨; break;
case 4 : printf(°Jó¨; break;
case 5 : printf(°Jeles¨; break;
default : printf(°Téves beolvasás¨;
·
int szam;
scanf(°%d¨,&szam;
switch(szam

case 5 : printf(°·¨;
case 4 : printf(°·¨;
case 3 : printf(°·¨;
case 2 : printf(°·¨;
case 1 : printf(°·¨;
·
31
hasznaliuk |A-B| < 1 alakot, ahol 1 a pontossag, amellyel dolgozunk. Peldaul 1 =
0.0001 eseten az összehasonlitas harom tizedes pontossaggal Iog törtenni.

1) Raizoliuk Iel logikai semakkal az alabbi programreszleteket!
a) if( F
1

if( F
2
U
2
;
else U
1
;

b) if( F
1

if( F
2
U
2

else U
1
;
2) Iriunk programot, amely beolvas negy valos szamot, es megszamolia hany
negativ!
3) Iriunk programot, amely beolvas egy negyiegyú termeszetes szamot, es
összeadia külön a paros, illetve paratlan szamiegyeit!
4) Iriunk programot, amely beolvas negy ötiegyú termeszetes szamot, megszamolia
melyikben talalhato több 5-ös szamiegy, es kiir egy megIeleló üzenetet !
(Hasznaliunk long valtozot a szamok eltarolasara)
5) Iriunk programot, amely beolvas egy negyiegyú termeszetes szamot, es
kiszamitia a prim szamiegyeinek szamtani közepet!
6) Iriunk programot, amely beolvas negy valos szamot es rendezi óket csökkenó
sorrendbe a alabbi strategiak szerint:
7) Iriunk programot, amely a koordinataival megadott P1, P2, P3 pontokrol eldönti,
hogy egy egyenesen talalhatok-e! kollinearitas Ieltetele:
0
1 y x
1 y x
1 y x
3 3
2 2
1 1

8) Iriunk programot, amely egy, a csucspontiainak koordinataival megadott
haromszögról eldönti, hogy egyenló szaru-e!
9) Olvassuk be egy haromszög 3 oldalat cm-ben (egy oldal legtöbb 255 cm lehet)!
mennyiben szerkeszthetó e harom adatbol egy haromszög, szamitsuk ki a területet!
10)dott ket szakasz (B, CD) a vegpontiaik koordinatai altal. Döntsük el, hogy
metszik-e egymast, es ha igen allapitsuk meg melyik pontban!
Ctlet. a metszes Ieltetele, hogy ne legyenek parhuzamosak, es az illetve B
pontok legyenek a CD egyenes különbözó oldalain, valamint a C illetve D pontok
az B egyenes mas-mas oldalan. Ket pont akkor van egy egyenes különbözó
a b c d
1
2
3
4 5
6
a b c d
3
4
5
6
1
2
32
oldalain, ha koordinataikat behelyettesitve az egyenes egyenletebe ellenkezó
elóielú ertekeket adnak.
11)Olvassunk be egy karaktert! Iriuk ki az SCII kodiat, a következó es az elózó
karaktert az SCII tablaban, valamint azt hogy a beolvasott karakter nagybetú-e
vagy nem!
12)Olvassunk be egy karaktert, maid iriuk ki hogy nagybetú, kisbetú, szam, specialis
karakter vagy egyeb!
13)Olvassunk be egy datumot: ev, ho, nap. Iriuk ki, hogy ez a datum az ev hanyadik
napia! Ötlet: helyezzük egy break nelküli switch utasitasba a honapokat, ezek
Iorditott sorrendie szerint.
14)dott ket egyenes ket-ket pontiuk koordinatai altal. Hatarozzuk meg:
a) egymashoz viszonyitott helyzetüket (parhuzamosak (m
1
÷m
2
), metszók,
merólegesek (m
1
m
2
÷-1)). hol m
1
es m
2
a ket egyenes iranytenyezói.
15)dottak egy kör közeppontianak koordinatai es a sugara. Ellenórizzük egy pont,
egy egyenes, illetve egy masik kör hozza viszonyitott helyzetet!
Ctlet. Kiszamitiuk a kör közeppontianak tavolsagat a ponttol, az egyenestól, es a
masik kör közeppontiatol.
16)Ugyanaz a Ieladat de a körök harom pont altal adottak.
dott közeppontu es sugaru kör egyenlete:

2 2
0
2
0
r y x X


Harom nem kollinearis ponton atmenó kör egyenlete:
0
1 y x y x
1 y x y x
1 y x y x
1 X X
3 3
2
3
2
3
2 2
2
2
2
2
1 1
2
1
2
1
2 2

egiegvzesek.
O Csak az ismert utasitasokat hasznaliuk!
O Hasznaliunk minimalis szamu valtozot!
O Hasznaliuk ugy a scanf, printf mint az fscanf, fprintf
Iüggvenyeket!
33

. Ci kI us utasítások

Eddigi Ieladatainkban többször is szembe talaltuk magunkat azzal a helyzettel, hogy
bizonyos utasitast, vagy utasitasokat többször el kellett vegezni. helyett, hogy ilyenkor
többször leirnank az illetó utasitast (nagy ismetlesszam eseten ez nem is lenne
lehetseges) elhetünk a ciklusutasitasok nyuitotta lehetóseggel. Egy ciklusutasitas utasitia
a szamitogepet egy bizonyos utasitas többszöri vegrehaitasara.
C nyelvben harom ciklusutasitas letezik, amelyeket a következókben mutatunk be.

. . A wile cikI us
(elól tesztelós ciklus)

Hogyan haitodik vegre? mig igaz a Ieltetel ismeteld a magot!
Reszletezve:
- kiertekelódik a Ieltetel: ha igaz (F
i
) vegrehaitodik a ciklusmag (M)
- uira kiertekelódik a Ieltetel: ha igaz (F
i
) ismet vegrehaitodik a ciklusmag (M)
. . .
- uira kiertekelódik a Ieltetel: ha hamis (F
h
) beIeiezódik a ciklus-utasitas
Tömören:

F
i
M F
i
M F
i
M ... F
i
M F
h
(1)

egiegvzesek.
O ha az F Ieltetel mar kezdetben hamis, akkor az mag egyszer sem
haitodik vegre.
O ha a mag több utasitasbol all, C nyelven össze kell Iogni óket egyetlen
összetett utasitassa.
!8eudókód


amíg <logikai_kifejezés csináld
<utasítás
vége a
C - nyelven

wile (<feltétel
< utasítás ;

Logikai sema


F
M

F Ieltetel (logikai kiIeiezes)
M ciklusmag
i igaz
i
34
O a mag vegrehaitasanak hatassal kell lennie a Ieltetelre különben a ciklus
vegtelen-ciklus.
Pelda vegtelen ciklusra:
k = 0; i = 0;
while (i <= 10 k++;
/· attól, hogy k-t növeljuk, i sosem lesz 10-nél nagyobb
·/

Feladat. Iriunk programot, amely egesz szamokat olvas be a billentyúzetról nulla
vegielig es kiiria az összegüket a kepernyóre.

Az összegszámítás technikája:
deIinialunk egy valtozot (legyen s), amelyben az összeget Iogiuk kepezni, es
erteket nullara allitiuk
sorra olvassuk be a szamokat (peldaul egy x valtozoba), es mindeniket
közvetlenül a beolvasas utan hozzaadiuk az s összeghez (s += x;

Tehat egyetlen valtozot hasznalunk, az x-et, es mindenik szamot ebbe olvassuk be.
Mivel a következó szamot raolvassuk az elózóre, minden beolvasas utan a beolvasott
erteket ugymond at kell menteni s-be: (s += x.

z alabbi okIeites logikusan probal ravezetni arra, mikent oldhato meg ezen Ieladat
egy while ciklus segitsegevel.

Mit kell csinalion a szamitogep, miutan letrehozta az s, illetve x valtozokat ?
szamitogepnek vegre kell haitania az alabbi múveleteket:

I
s÷0
Be
x
T
x!÷0
S
x
Be
x
T
x!÷0
S
x
Be
x
T
x!÷0
S
x
. Be
x
T
x÷÷0
Ki
s
(2)

I
s÷0
inicializaliuk az s valtozot 0-val
Be
x
beolvasunk egy szamot az x valtozoba
T
x!÷0
teszteliük (ellenórizzük) az x erteket hogy 0-tol különbözó-e
T
x÷÷0
teszteliük (ellenórizzük) az x erteket hogy 0-val egyenló-e
S
x
hozzaadiuk s-hez x-et: s += x
Ki
s
kiiriuk az s erteket

Mi lesz a ciklus Ieltetel? Mitól Iügg, hogy kell-e Iolytatodion az ismetles vagy sem?
z x tesztelesetól!
Tehat:
F ÷÷> T
x


(1) megallapitas alapian a ciklus magvat ket teszteles közötti utasitas/utasitasok
kepezik.
35
Tehat:
M ÷÷> S
x
Be
x

Elvegezve a (2)-es múveletsorban a Ienti helyettesiteseket a következót kapiuk:

I
s÷0
Be
x
T
x!÷0
S
x
Be
x
T
x!÷0
S
x
Be
x
T
x!÷0
S
x
. Be
x
T
x÷÷0
Ki
s

F M F M F M . M F





Figyelembe veve mindezt, ime a Ieladat megoldasa logikai semaval es C nyelven:
. . 2 A do wile cikIus
(hatul tesztelós ciklus)
ciklus utan
elvegezendó múvelet
ciklus elótt
elvegzendó
múveletek
Múveletsor, amely megvalosithato
egy hile ciklussal
C - nyelven

int s = 0, x;
scanf(°%d¨, &x;
while(x

s += x;
scanf(°%d¨, &x;
·
printf(°$=%d¨,s;

STRT
S 0
X
X!÷ 0
S
STOP
S S ¹ X
X
Logikai sema

F
M

F Ieltetel (logikai kiIeiezes)
M ciklusmag
i igaz
!8eudókód

csináld
<utasítás
amíg <logikai_kifejezés
C - nyelven

do
<utasítás;
wile (<feltétel;
36
Hogyan haitodik vegre ? Ismeteld a magot amig igaz a Ieltetel!
Reszletezve:
- vegrehaitodik a ciklus mag (M)
- kiertekelódik a Ieltetel: ha igaz (F
i
) ismet vegrehaitodik a ciklus mag (M)
- uira kiertekelódik a Ieltetel: ha igaz (F
i
) ismet vegrehaitodik a ciklus mag (M)
. . .
- uira kiertekelódik a Ieltetel: ha hamis (F
h
) beIeiezódik a ciklus utasitas
Tömören:

M F
i
M F
i
M F
i
... F
i
M F
h
(3)

egiegvzes.
O mag egyszer mindenkepp vegrehaitodik!
O Különbözik a Pascal repeat until ciklustol, hiszen a ciklusbol valo kilepes -
akarcsak a while ciklus eseteben- amis agon törtenik.

Feladat. Szamokat olvasunk be 1-tól 5-ig 0 vegielig. Iriuk ki, hogy minden egyes
szamnak, mint iegynek, milyen minósites Ielel meg!

ogyan irható át a wile do wile alakba és fordítva?
int jegy;
do

scanf(°%d¨,&jegy;
switch(jegy

case 1 : printf(°Elégtelen¨; break;
case 2 : printf(°Elégséges¨; break;
case 3 : printf(°Közepes¨; break;
case 4 : printf(°Jó¨; break;
case 5 : printf(°Jeles¨; break;
·
while (jegy != 0;
·
F
M
F
M
F
i
i
Do
while
while do while
37
C - nyelven

int n, k, i, x;
scanf(°%d¨, &n;
k = 0;
i = 1;
while (i = n

scanf(°%d¨, &x;
if (!(a%2 k++;
i ++;
·
printf(°%d¨, k;



. . A for cikI us
(ismert lepesszamu ciklus)

Kezdiük egy Ieladattal:
Feladat: dott n darab termeszetes szam, szamoliuk meg hany paros ezek közül?

Adott tulajdonságú elemek megszámolásának technikája:
a) deIinialunk egy k valtozot (szamlalot), amelyet kezdetben nullara allitunk.
b) valahanyszor talalunk egy megIeleló tulaidonsagu elemet a szamlalo (valtozo)
erteket növeliük 1-gyel.

it kell ismetelni?
1. beolvasunk egy szamot a billentyúzetról, peldaul egy x valtozoba.
2. ellenórizzük hogy x paros-e, ha igen, növeliük a szamlalot.

eddig kell ismetelni a fenti múveleteket? n-szer'
ogvan valositato meg ez ile ciklussal?
Veszünk egy i valtozot, amelyet kezdetben 1-re allitunk maid a ciklusmag
minden egyes vegrehaitasakor növeliük az erteket 1-gyel. Ha ciklusIeltetelnek a (i <=
n) logikai kiIeiezest valasztiuk, akkor a ciklusmag pontosan n-szer lesz megismetelve.



A feladat megoldasa ile ciklussal.
F
M
F
M
M
While
do while while
38
int n, k, i, x;
scanf(°%d¨, &n;
k = 0;
for (i = 1; i = n; i ++)

scanf(°%d¨, &x;
if(!(x % 2 k ++;
·
printf(°%d¨, k;


z ismert lepesszamu ismetlesekre van egy specialis ciklus, a for ciklus.

egiegvzes. az i valtozot a for ciklus ciklus-valtozoianak szokas nevezni.



Az elobbi feladat megoldasa 1or ciklussal.




n
k0
i1
i·n
x
k
STOP
x
M
i h
i h
ii¹1
kk¹1
STRT
X°2÷0
i ÷ 1;
while ( i ·÷ n )
¦
·M~
i ¹¹;
}
Ior (i ÷ 1; i ·÷ n; i ¹¹)
·M~
ekvivalens
39
for ciklus altalanos alakia:

for (<kif1; <kif2; <kif3
< M ;

kif1, kif2, kif3 kiIeiezesek; M - ciklusmag

Altalanos alaku for ciklus logikai semaval:

Altalaban.
O ·kiI1~ egy hozzarendeles, amely altal a ciklusvaltozo kezdóerteket kap.
O ·kiI2~ egy összehasonlitas, amely azt vizsgalia hogy a ciklusvaltozo nem-e
haladta meg a vegsóerteket.
O ·kiI3~ a ciklusvaltozo leptetesere szolgal.

Klasszikus ertelemben hasznalt for ciklus:

for(i = <kezdóérték; i <= <végsóérték; i++
< M ;

z ·M~ magot, (<végsóérték - <kezdóérték + 1-szer Iogia
vegrehaitani!

z alabbi ciklusok közül mindkettó n-szer hatia vegre a magot:
for(i = 1; i <= n; i++ <M;
for(j = 0; j < n; j++ <M;
kiI1
M
kiI3
kiI2
a ciklus minden
atiarasaban kiertekelódik
(a ciklusmag
vegrehaitasat követóen)
egyszer a
ciklus elótt
i h
a ·kiI2~ logikailag kerül
kiertekelesre, hogy
ciklusIeltetelkent szolgalion
40

mennyiben hianyoznak a ·kiI1~ es ·kiI3~ kiIeiezesek, a Ior ciklus ugy múködik mint
egy while ciklus:

while (<F <M; ekvivalens for(; <F; <M;

Végtelen ciklusok

while (1 <M;

do<M·while (1;

for (;;

.5 &gró utasítások
. 5. A break utasí tás
break utasitas lehetóve teszi a kiugrast barmely ciklusbol, illetve switc utasitasbol.
program vegrehaitasa a ciklus/ switc utani utasitassal Iolytatodik.





Feladat: Egesz szamokat
olvasunk be 0 vegielig.
Szamitsuk ki a pozitivak
szorzatat, illetve a negativak
atlagat.








. 5. 2 A continue utasí tás
continue hatasara a while illetve do while ciklusok eseten megszakad a ciklusmag
vegrehaitasa es a ciklusIeltetel kiertekelesevel Iolytatodik. Tehat nem ugrik ki a
ciklusbol, csupan az aktualis atiarasabol.
int x, k1 = 0, k2 = 0, p = 1;
float s = 0;
for (;;

scanf (°%d¨, &x;
if (!x break;
if ( x < 0 k1 ++; s += x; ·
else k2 ++; p · = x;·
·
if (k2 printf (¨%d ¨, p;
else printf("Nincs pozitív szám.";
if (k1 printf (¨%f¨, s / k1;
else printf("Nincs negatív szám.";
41
for ciklus eseten Ielbehagyia a ciklusmag aktualis atiarasat, vegrehaitia a · kiI3 ~
kiIeiezes-utasitast, maid a · kiI2 ~ logikai kiIeiezesnek, mint Ieltetelnek a
kiertekelesevel Iolytatia a ciklust.






Feladat: dott n termeszetes
szam. Szamitsuk ki a 0-tol
különbözó szamok szorzatat.






. 5. A goto utasí tás
szintaxis:
goto <címke;

Egy C program barmely utasitasa megcimkezhetó, es egy goto utasitassal oda lehet
ugrani ahhoz, hogy az illetó utasitassal Iolytatodion a program vegrehaitasa.

cimkezes szintaxisa:
<címke : <utasítás;

goto utasitas altalaban kerülendó, mert hasznalata ütközik a strukturalt programozas
alapelvevel es attekinthetetlenne teszi a programot.
Megis bizonyos esetekben (peldaul többszörösen egymasba agyazott ciklusokbol valo
kilepesre) elónyös lehet a hasznalata.

Feladat: Keressük meg 100 es 1000 között a legkisebb pithagoraszi szamharmast.


int n, x, i, p = 1, k = 0;
scanf(°%d¨, &n;
for ( i = 1; i <= n; i ++

scanf(°%d¨, &x;
if (!x continue;
p ·= x; k ++;
·
if (k printf (¨%d ¨, p;
else printf("Nincs nem nulla szám.";
for(a=100; a<1000; a++
for(b=a; b<1000; b++
for(c=b+1; c<=1000; c++

if (c·c==a·a+b·b goto cimke;
·
cimke: printf(°a=%d, b=%d, c=%d¨, a, b, c;
42
Figyelem! break utasitas csak a legbelsó ciklusbol ugrott volna ki.
Termeszetesen a ciklusvaltozo hatarok optimalizalhatok.

. 5. A return utasí tás
szintaxisa:
return ¯<kifejezés`;

return lehetóve teszi a visszaterest egy Iüggvenyból (9. Ieiezet).

Vegül lassunk egy olyan peldat, amelyben üres utasitast hasznalunk. mint emlitettük,
altalaban olyan ciklusok eseten hasznaliuk, amelyeknek hianyzik a magiuk.

int i;
for ( i = 0; i < 10; printf (°%d °, i + +;

Ienti programreszlet kiiria a szamiegyeket 0-tol 9-ig.

egoldott feladatok.

1.) Iriunk programot, amely beolvas ket termeszetes szamot es kiiria az elsó szam
szamiegyeinek az összeget es a masodik szam szamiegyeinek a szorzatat.
program ket egymas utani ciklust tartalmaz, tehat ciklusvaza az alabbi modon
abrazolhato:


2.) Iriunk programot, amely veletlenszerúen general egesz szamokat a |-20, 20|
intervallumbol amig eltalalia a nullat, maid iriuk ki a generalt primek összeget.



int x, y, s = 0, p = 1;
scanf(°%d¨, &x;
while (x

s += x % 10 ;
x /= 10 ;
·
scanf(°%d¨, &y;
while (y

p ·= y % 10 ;
y /= 10 ;
·
printf(°$=%d\nP=%d¨, s, p;
43
int i, j, n, k = 0;
scanf(°%d¨, &n;
for( i = 1; i <= n; i++

for( j = 1; j <= i; j++

printf(°%d, ¨, j;
k ++; if (k == n goto vege;
·
for( j = 1; j <= i - 1; j++

printf(°%d, ¨, i;
k ++; if (k == n goto vege;
·
·
vege:;
egiegvzesek.
rand( Iüggveny veletlenszerúen general egy termeszetes szamot a |0,
RDMX) intervallumbol.
Ieladat megoldasa ket egymasba agyazott ciklust Ieltetelez.
Ciklusvaza:


3.) Iriunk programot, amely generalia es kiiria az alabbi szamsorozat elsó n tagiat:
1, 1, 2, 2, 1, 2, 3, 3, 3, 1, 2, 3, 4, 4, 4, 4, .

Ciklusvaza:







int x, s = 0, prim, i;
srand(time(0; /·inicializálja a véletleszám generátort·/
for( x = rand( % 41 - 20; x; x = rand( % 41 - 20

if (x < 0 x = -x;
if (!x || x==1 prim = 0;
else

prim = 1;
for(i = 2; i <= sqrt(x; i++
if (x % i == 2 prim = 0; break;·
·
if (prim == 1 s += x;
·
printf(°A primek összege=%d¨, s;
44

4.) Iriunk programot, amely beolvas n termeszetes szamot es addig .csomagolia¨
mindeniket önmagaba mig egy-szamiegyúek lesznek. Iriuk ki az igy kapott csomagokat.
Csomagolas alatt azt ertiük, hogy a szamot helyettesitiük a szamiegyeinek összegevel.

Ciklusvaza:

Top Don módszer: Iokozatosan Iinomitiuk a megoldast

int i, n, x, s;
scanf(°%d¨, &n;
for( i=1; i<=n; i++

scanf(°%d¨, &x;
agaba csomagoliuk x-et
amig egv-szamiegvú lesz
printf(°A csomag:%d\n¨,x;
·
/* Magaba csomagoliuk x-et,
mig egy-szamiegyú lesz */

while (x 10

Szamitsuk ki s-ben x
szamiegveinek òsszeget
x = s;
·
/ *Szamitsuk ki s-ben, x
szamiegyeinek összeget
*/

s = 0;
while (x 0

s += x % 10;
x /= 10;
·
45
megoldas egy programban:


egiegvzes.
O megoldott Ieladatokbol arra lehet következtetni, hogy a Ieladatok
különbözó szempontok szerint osztalyozhatok: peldaul a ciklusvazuk alapian,
vagy aszerint, hogy honnan szarmaznak az adataik (billentyúzetról vagy
allomanybol, illetve a gep generalia egy szabaly szerint vagy veletlenszerúen).
Hasznos lehet besorolni a Ieladatot bizonyos Ieladat-osztalyokba, mielótt
hozzalatunk a megoldasahoz.

Elemi algoritmusok òsszefoglalasa

z alabbiakban pszeudokod nyelven mutatunk be nehany alapalgoritmust. zon olvasok
szamara akik elóször talalkoznak pszeudokod programreszletekkel, szolgalianak
magyarazatul a következók:
minden ciklus for ciklus
amíg ciklus wile ciklus
a ... akkor ... különben ... if ... ten ... else ...
MJD osztasi maradek
DIV osztasi hanyados
¯...` egesz resz
< nem egyenló


C - nyelven

int i, n, x, s;
scanf(°%d¨, &n;
for( i = 1; i <= n; i++

scanf(°%d¨, &x;
while (x 10

s = 0;
while (x 0

s += x % 10;
x /= 10;
·
x = s;
·
printf(°A csomag:%d\n¨,x;
·

46
Csszeg- es szorzatszamitas.
Egy n elemú szamsorozat elemeinek összege:

Algoritmus összeg:
összeg=0
beolvas n
minden i=1,n végezd el:
beolvas szám
összeg = összeg + szám
vége minden
kiír összeg
vége algoritmus

Egy termeszetes szam szamiegyeinek szorzata:

Algoritmus számjegyekszorzata:
szorzat=1
beolvas szám
amíg szám 0 végezd el:
szorzat=szorzat·(szám MJD 10
szám=szám DIV 10
vége amíg
kiír szorzat
vége algoritmus

Adott tulaidonsagu elemek megszamolasa.
Egy n elemú valos szamsorozat egesz ertekú elemeinek megszamolasa:

Algoritmus egészszámlálás:
számláló=0
beolvas n
minden i=1,n végezd el:
beolvas szám
a szám = ¯szám` akkor
számláló=számláló+1
vége a
vége minden
kiír számláló
vége algoritmus

Atlagszamitas.
ulla vegielú szamsorozat paros elemeinek atlaga:

Algoritmus párosokátlaga:
számláló=0
összeg=0
beolvas szám
amíg szám < 0 végezd el:
a szám MJD 2 = 0 akkor
összeg=összeg+szám
számláló=számláló+1
vége a
47
beolvas szám
vége amíg
a számláló 0 akkor
kiír összeg/számláló
különben
kiír ,Nincs páros szám¨
vége algoritmus

Adott tulaidonsagu elem letezesenek ellenorzese.
Ellenórizzük, hogy van-e telies negyzet egy n elemú szamsorozatban!

Ctlet. következókeppen ellenórizzük, hogy teliesnegyzet-e egy szam: indulva nullatol,
addig lepegetünk teliesnegyzetról teliesnegyzetre mig, vagy eltalaliuk, vagy atlepiük az
illetó szamot.

Algoritmus négyzetellenórzés:
kém=0
beolvas n
minden i=1,n végezd el
beolvas szám
j = 0
amíg j · j < szám végezd el:
j = j + 1
vége amíg
a j · j = szám akkor
kém=1
vége a
vége minden
a kém = 0 akkor
kiír ,Nincs teljes négyzet¨
különben
kiír ,Van teljes négyzet¨
vége algoritmus

Adott tulaidonsagu elem megkeresese.
ulla vegielú szamsorozatban keressünk meg egy adott szamot!

Algoritmus keresés1:
beolvas keresett
beolvas szám
sorszám = 1
amíg szám < 0 és szám < keresett végezd el:
beolvas szám
sorszám = sorszám + 1
vége amíg
a szám < 0 akkor
kiír sorszám
különben
kiír "A ",keresett," nem található meg."
vége a
vége algoritmus

48
egiegvzes. Ha többször is elóIordul a keresett szam a szamsorozatban, akkor az
elsó elóIordulas helyet adia meg. Ha valamennyi elóIordulas helyet ki szeretnenk
iratni, akkor az algoritmus a következó:

Algoritmus keresés2:
beolvas keresett
beolvas szám
sorszám = 0
amíg szám < 0 végezd el:
beolvas szám
sorszám = sorszám + 1
a szám = keresett akkor
kiír sorszám
vége a
vége amíg
a sorszám = 0 akkor
kiír "A ",keresett," nem található meg."
vége a
vége algoritmus

Legnagvobb es legkisebb elem ertekenek megatarozasa.
Egy n elemú szamsorozat maximumanak meghatarozasa:

Ctlet. Kiielölöm maximumnak az elsó szamot, maid valahanyszor erkezik egy nagyobb
ertek, Irissitem a max valtozo tartalmat.

Algoritmus legnagyobbérték:
beolvas n
beolvas szám
max=szám
minden i=2,n végezd el:
beolvas szám
a szám max akkor
max=szám
vége a
vége minden
kiír max
vége algoritmus

Legnagvobb es legkisebb elem pozicioianak megatarozasa.
Egy termeszetes szam legkisebb szamiegyenek pozicioia (balrol iobbra):

Algoritmus Legkisebb$zámjegyHelye:
számláló = 0
beolvas szám
min = 10
amíg szám 0 végezd el:
számjegy = szám MJD 10
a számjegy < min akkor
min = számjegy
minpozíció = számláló
vége a
49
szám = szám DIV 10
számláló = számláló + 1
vége amíg
kiír számláló - minpozíció + 1
vége algoritmus

Kitúzòtt feladatok.

1) Generaliuk a következó szamsorozatok eseteben az elsó n elemet es egy masik
megoldassal a sorozat n-edik elemet:
a) 1, 2, 3, 4, 5, ...
b) 1, 3, 5, 7, ...
c) 0, 2, 4, 6, 8, ...
d) 2, 3, 5, 7, 11, 13, 17, 19, ...
e) 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
I)1, 1, 2, 1, 2, 3, 1, 2, 3, 4, ...
g) 1, 2, 1, 3, 2, 1, 4, 3, 2, 1, ...
h) 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
i)2, 3, 3, 4, 4, 4, 5, 5, 5, 5, ...
i)0, 1, 2, 1, 2, 2, 3, 2, 3, 3, 3, 4, 3, 4, 4, 4, 4, 5, ...
k) 1, 1, 2, 2, 1, 2, 3, 3, 3, 1, 2, 3, 4, 4, 4, 4, ...

2) Szamitsuk ki a következó kiIeiezesek erteket:
a) E1 ÷ 1 ¹ 2 ¹ 3 ¹ ... ¹ n
b) E2 ÷ 1 ¹ 2 3 ¹ 4 5 ¹ 6 ¹ ... ¹(-1)
n
c n
c) E3 ÷ 1 c 2 ¹ 3 c 4 ¹ 5 c 6 ¹...¹ (2n 1) c 2n
d) E4 ÷ 1 / (1 ¹ 2) c 2 / (2 ¹ 3) c 3 / (3 ¹ 4) c ... c n / |n ¹ (n ¹ 1)|
e) E5 ÷ 2 ¹ 3 5 ¹ 7 11 ¹ 13 17 ¹ 19 ... (n-edik tag)
I) E6 ÷ 1 / 1 ¹ (1 c 2) / (1 ¹ 2) (1 c 2 c 3) / (1 ¹ 2 ¹ 3) ¹...
¹ (-1)
n
(1 c 2 c 3 c... c n) / (1 ¹ 2 ¹ 3 ¹ ... ¹ n)
g) E7 ÷ 1 ¹ 2 ¹ 3 4 ¹ 5 6 7 ¹ 8 9 10 11 12 ¹ 13 14 ...(n-szer)
h) E9÷1/2¹4/3¹9/5¹ 16/7¹25/ 11¹36/ 13¹... (n-edik tag)

3) Egy szamsorozat elemein vegezzük el az alabbi Ieladatokat:
Összeg-, atlag-, szorzatszamitas, szamoliuk meg a parosok illetve paratlanok szamat,
ellenórizzük, hogy tartalmaz-e telies negyzetet, allapitsuk meg a minimum erteket,
az elsó minimum pozicioiat, az utolso minimum pozicioiat, szamitsuk ki a parosok
mediaiat, a paratlanok maximumat, a primek szamat!
szamsorozat elemeit allitsuk a program rendelkezesere:
a) veletlenszam-generatorral n darab 100-nal kisebb termeszetes szamot!
b) veletlenszam-generatorral egesz szamokat a |-10, 10| intervallumbol, amig
eltalaliuk a 0-t!
c) allomanybol olvasva egy n elemú egesz szamsorozatot!
50
d) egesz szamokat olvasva a billentyúzetról 0 vegielig!

4) Olvassunk be egy 0-val vegzódó, egeszekból allo szamsorozatot! Iriuk ki a harmadik
legnagyobb elemet es annak sorszamat is! Valamely Ieltetel nem teliesülese eseten
(peldaul, ha 3-nal kevesebb elemünk van) a program adion hibaielzest.

5) Mit valosit meg az alabbi programreszlet? Ird at ugy, hogy ugyanezt valositsa meg de do-
while ciklussal! Ieladatot papiron oldiuk meg!
int x, k = 0;
scanf(¨%d¨, &x;
while(x k++;
printf(°%d¨, k;

6) Melyek vegtelen ciklusok? Ieladatot papiron oldiuk meg!
ai = 10; while(i--;
bwhile(i = 10i--;
cfor(x = 1; x = 10; x++;
dfor(x = 1; x == 10; x++;

7) Iriunk programot, amely kiszamitia es masodpercenkenti bontasban tablazatosan
kiiria a v0 kezdósebessegú, a gyorsulassal egyenletesen gyorsulo mozgast vegzó
test altal t idó alatt megtett utat! v0. a es t bemenó adatok.
8) Iriunk programot, amely a Pascal haromszög elsó m sorat allitia eló (m bemenó
adat)! Pascal haromszög egyes elemei az ugynevezett binomialis egvùttatok. z
n-edik sor k-adik eleme:
C(n,k) ÷ n! / ((n k)! c k!) ÷ (n c (n 1) c (n 2) ... (n k ¹ 1)) / (1 c 2 c 3 c ... c k).

9) Egy k egesz szamot maidnem-primnek nevezünk, ha nem prim, de ugyanakkor ket
prim szorzata. Ha k es k ¹ 1 is maidnem-primek, akkor iker maidnem-primek.
Iriunk programot, amely 100-ig megkeresi az iker maidnem-primeket!

10)Iriunk programot, amely kiszamitia es kiiria az olyan Pithagoraszi szamharmasokat,
melyeknek egyik tagia sem nagyobb 50-nel!

11)Abrazoliuk a kepernyón az F(x) ÷ (sin x)/x Iüggvenyt a |-26, 26| intervallumon ugy,
hogy a Iüggólegesen Iuto x tengely menten a megIeleló koordinataiu pontokba egy
"*" karaktert helyezünk! Raizoliuk ki az x tengelyt is!

12)Olvassuk be egy sakkIigura (vezer, kiraly, bastya, Iuto, huszar, gyalog) aktualis
koordinatait a sakktablan! Iriunk programot, amely kiiria a sakkIigura altal
tamadhato mezóket!

51
13)Iriunk programot, amely Ior ciklussal szamitia ki az m
n
erteket, ahol az m egy valos
szam, az n egesz tipusu!

14)Iriuk ki azokat az 500-nal kisebb, legalabb ketiegyú paros szamokat, amelyekben a
tizesek helyen paratlan szam all!

15)dott egy kör a sikban közeppontianak es sugaranak koordinatai altal. Iriunk
programot, amely megszamlalia, hogy hany darab egesz koordinatakkal
iellemezhetó koordinatapont esik a körön belülre!

16)Olvassunk be tanulmanyi atlagokat, es hatarozzuk meg a megIeleló a minósiteseket:
kitúnó |9,5010|; ieles |99,50); io |89); közepes |78); elegseges |4,507);
elegtelen|14,50).

egiegvzes. 15-18 Ieladatokban hasznaliuk ki a scanf es printf Iüggvenyek
Iormazo karakterei nyuitotta lehetósegeket.
17)Olvassunk be decimalis szamokat nulla vegielig, es alakitsuk oktalissa (8-as
szamrendszer) óket!

18)Olvassunk be decimalis szamokat nulla vegielig, es alakitsuk hexadecimalissa óket!

19)Olvassunk be hexadecimalis szamokat nulla vegielig, es alakitsuk decimalissa óket!

20)Olvassunk be oktalis szamokat nulla vegielig, es alakitsuk decimalissa óket!

21)Olvassunk be binaris szamokat nulla vegielig, es alakitsuk decimalissa óket!

22)Olvassunk be 1000-nel kisebb decimalis szamokat nulla vegielig, es alakitsuk
binarissa óket!

23)Olvassunk be termeszetes szamokat a billentyúzetról es szamoliuk ki az atlagukat!
szamsor veget ket egymas utani 0 ielezze!

24)Iriunk programot, amely beolvas 20 valos szamot, es megallapitia a leghosszabb
szigoruan növekvó összeIüggó reszsorozat összeget!

25)Iriunk programot, amely beolvas n egesz szamot es kiiria a szomszedos szamok
különbseget!

26)dott egy termeszetes szam. Hatarozzuk meg a szam szamiegyeinek szorzatat,
összeget, atlagat, a legkisebbet, a legnagyobbat, valamint a paros, a paratlan es a
prim szamiegyek szamat.
52

27)Oldiuk meg a 22)-es Ieladatot n darab egesz szam eseteben!

28)Oldiuk meg a 22)-es Ieladatot n darab veletlenszerúen generalt egesz szamra a
(200, 3000) intervallumbol!

29)dott egy termeszetes szam, kepezzük a Iorditott szamot!

30)Hany olyan haromiegyú egesz szam van, amely prim es amelynek a Iorditottia is
prim?

31)dott egy termeszetes szam, kepezzük azt a szamot, amelyet ugy kapunk, hogy
Ielcsereliük az elsó es utolso szamiegyeit.

32)Hany olyan haromiegyú egesz szam van, amely prim es a belóle az elóbbi modon
kepzett szam is prim?

33)dott egy n elemú szamsorozat. Szamoliuk meg, hogy a 2-es szamrendszerbeli
alakiaikban szamonkent es összesen hany 1-es es hany 0 van!

34)Olvassunk be pozitiv egesz szamokat hexadecimalis alakban 0 vegielig es allapitsuk
meg a szamsorozat rendezettseget (egyenló elemekból all-e, növekvó, csökkenó
vagy rendezetlen)! növekvó, illetve a csökkenó rendezettsegnel az egyenló
szamokat is megengediük. Ha a sorozatrol menet közben kiderül, hogy rendezetlen,
Ieiezzük be a bevitelt!

35)Iriuk ki az 1m¹-nel kisebb terIogatu, 10 cm-enkent növekvó sugaru gömbök
terIogatat!

36)Iriuk ki az angol abece összes nagybetúiet növekvó maid csökkenó sorrendben!

37)Olvassunk be egy datumot: ev, ho, nap! Iriuk ki, hogy ez a datum az ev hanyadik
napia!

38)Raizoliunk adott meretú X-eket a kepernyóre! mereteket a raizolas elótt olvassuk
be, es amikor 0 meretet olvastunk, a program beIeiezódik.

39)Tegyünk a kepernyó közepere egy ielet, maid Iel, le, balra, iobbra nyilak
segitsegevel mozgassuk a kepernyón! ielet a kepernyóról ne engediük kimenni, s
az kezdetben huzzon maga utan vonalat! z ·insert~ gomb hatasara, ha eddig volt
vonalhuzas, ne legyen, ha nem volt legyen, ·enter~-re a program Ieiezódiön be.

53
40)Iriunk programot, amely 0 vegielig olvas be szamokat! bevitt szamot csak akkor
Iogadiuk el, ha az elózó szamtol valo elteres (a ket szam különbsege abszolut
ertekben) annak 20°-anal nem nagyobb.

41)Generaliunk veletlenszam-generatorral haromiegyú szamokat, amig olyat talalunk el,
amelynek szamiegyei csökkenó sorrendben vannak! Iriuk ki sorszamozva a
generalt szamokat!

42)Generaliunk veletlenszam-generatorral szamokat az int tartomanybol, amig olyat
talalunk el, amelynek szamiegyei tetó alakot irnak le (egy pontig növekednek, maid
csökkennek)! Iriuk ki sorszamozva a generalt szamokat!

43)Legyen az alabbi algoritmus:
0. ALGJRITMU$
1. beolvas n
2. minden i=1,n végezd
3. beolvas v¯i`
4. nrc¯i`=0
5. vége minden
6. minden i=1,n-1 végezd
7. minden j=i+1,n végezd
8. ha v¯i` v¯j`
9. akkor nrc¯i`++
10. kulönben nrc¯j`++
11. vége ha
12. vége minden
13. vége minden
14. VÉGE ALGJRITMU$
a) Mennyi lesz az nrc¯3` erteke, ha az 5,7,3,1,8,10 ertekeket olvassuk be?
b) Mennyi lesz az nrc¯3` erteke, ha n-nek 5-öt olvasunk be, a v vektorba pedig
azonos ertekeket?
c) Ha azonos ertekeket olvasunk be a v vektorba, milyen szabalyosagot Iognak mutatni
az nrc tömb elemei?
d) Ha n÷7, hanyszor haitodik vegre a ha utasitas?
e) Fogalmazd meg tömören, mit valosit meg az algoritmus?
I) Hogyan Iognak megvaltozni az a) e) pontokra adott Ieleletek, ha a ha utasitas
Ieltetelet v¯i` = v¯j` valtoztatiuk?

44)Legyen az alabbi algoritmus:
0. ALGJRITMU$
1. beolvas n
2. minden i=1,n végezd
3. minden j=1,n végezd
4. a¯i`¯j`=i+j
5. vége minden
6. vége minden
7. minden i=1,n végezd
8. a¯i`¯i`=a¯i`¯i`%a¯6`¯4`
54
9. vége minden
10. VÉGE ALGJRITMU$
a) z a tömb hany eleme lesz 3-al egyenló ertekú az algoritmus vegen, ha n-nek 10-et
olvasunk be?
b) Ha n-nek 10-et olvasunk be, mennyi lesz a tömb legnagyobb elemenek erteke az
algoritmus vegen?
c) Ha n-nek 10-et olvasunk be, hany maximalis eleme lesz a tömbnek az algoritmus
vegen?
d) z a tömb hany eleme lesz 10 az 1-6 programsorok vegrehaitasa utan, ha n-nek 7-et
olvasunk be?
e) Milyen halmazbol vesznek erteket a Ióatlo elemei az algoritmus vegen ha n=6
erteket olvasunk be?
I) Mi mondhato el a mellekatlo elemeiról az algoritmus vegen, ha n-nek paros erteket
olvasunk be?

45)dott egy n csucspontu sokszög a csucsai (az ora iarasanak sorrendieben)
koordinatai altal. Iriuk ki a sokszög területet!

c I
n
1 i 1 i 1 i
i i
poligon
y x
y x
2
1
S

ahol ielöles szerint a kepzeletbeli n¹-edik pont koordinatai: x

. x
2
)
55

Kifej ezések

Egy kiIeiezes operatorokat es operandusokat tartalmaz. Egy operator azt iria eló,
hogy milyen múveletet kell elvegezni a megIeleló operandusokon. múveletek
vegrehaitasanak a sorrendiet az operatorok prioritasa (elsóbbsege, precedenciaia) adia
meg. zonos prioritasu operatorok eseten altalaban balrol iobbra haitodnak vegre a
múveletek, de leteznek olyan operatorok is, amelyek eseteben iobbrol balra. z implicit
sorrendet Ielül lehet biralni akarcsak a matematikaban zaroielezessel (csak kerek
zaroielek hasznalhatok).
z alabbi tablazat a C nyelv operatorait tartalmazza prioritasuk szerint csökkenó
sorrendben. Egyesekkel mar talalkoztunk, masokkal ebben a Ieiezetben ismerkedünk
meg, a többivel pedig kesóbbi Ieiezetekben.

Prioritás táblázat

JPERÁTJRJK $JRREND AZJNJ$
PRIJRITÁ$ E$ETÉN

( ¯` - . balról jobbra
! ~ ++ -- - (típus · & sizeof jobbról balra
· / % balról jobbra
+ - balról jobbra
<< balról jobbra
< <= = balról jobbra
== != balról jobbra
& balról jobbra
^ balról jobbra
| balról jobbra
&& balról jobbra
|| balról jobbra
.: jobbról balra
= += -= ·= /= %= <<= = &= |= ^= jobbról balra
, balról jobbra

lapelvnek szamit, hogy a ket operandusu operatorok operandusainak azonos
tipusuaknak kell lenniük ahhoz, hogy a múvelet vegrehaitodion. Ez a tipus lesz az
eredmeny tipusa is. Es ha nem azonosak? Implicit tipuskonverziora kerül sor
valamelyiknel vagy eppenseggel mindkettónel, az alabbi szabalyok szerint:
1) Aritmetikai konverzio.
a) Elsó lepes: minden rövid tipus (char, short int tipusuva
konvertalodik.
56
b Masodik lepes: a kisebb ertektartomanyu tipus igazodik a nagyobb
ertektartomanyuhoz.

int = unsigned = long = unsigned long = float = double =
long double

Figyelem! a signed char int tipusuva konvertalasakor elóiel-kiteriesztes törtenik.
Peldaul, ha egy char valtozo (amely altalaban signed) erteke -2 (11111110,
akkor miutan tipusa int tipussa konvertalodott, a belsó abrazolasa
(1111111111111110, az erteke pedig ugyancsak -2 lesz.

2) Ertekatadas eseten mindig a iobb oldal igazodik a baloldalhoz.
Figyelem! ha a iobb oldal nagyobb ertektartomanyu tipusu, akkor az ertekadas
inIormaciovesztessel iarhat.
Pelda:
int a = 1, b = 2;
char c1, c2 = 15;
float f = 1;
double d = 3.14;
Mi lesz az alabbi kiIeiezes tipusa, hat a c1 valtozo erteke?

c1 = (c2 + f · (a + d - b;
char char float int double int

int

float

float
double

double
double

double
double

double

char
Tehat a kiIeiezes tipusa char lesz, c1 erteke pedig 64 lesz.
. A kifejezések jobb (RvaI ue) és baI (LvaI ue) értéke
Egy ·J~ ÷ ·kifeiezes~, hozzarendeles eseten a ·J~ valtozonak a cimevel
dolgozunk, a ·kifeiezes~-nek viszont az ertekevel. ·J~ valtozo cimere eltaroliuk a
kiIeiezes erteket. Tehat egy hozzarendeles bal oldalan csakis olyan kiIeiezes ielenhet
meg, amely egy konkret memoriacimen letezó obiektumra vonatkozik. z ilyen
kiIeiezesre azt mondiuk, hogy van balerteke. Ilyen kiIeiezesek a valtozok. zon
kiIeiezesekról, amelyek egy hozzarendelesnek csakis iobb oldalan szerepelhetnek azt
57
mondiuk, hogy csak iobb erteke van. valtozonak peldaul, van bal erteke is (a cimük)
es iobb ertekük is (az ertekük).
Peldaul:
int a = 1, b = 2, c = 3;
a = a + b; /*Helyes, mert az a valtozonak van balerteke*/
a + b = a; /*Helytelen, mert az a + b kiIeiezesnek nincs balerteke*/
c = a; /*Helyes, mert a c valtozonak van balerteke*/

z a + b kiIeiezesnek azert nincs balerteke, mert nem egy olyan obiektum ahova
el lehetne tarolni az ertekadas iobb oldalan levó a valtozo erteket. Tehat nem
szerepelhet egy ertekadas bal oldalan, iobb oldalan viszont igen.

kiIeiezesekben szerepló operandusok alapvetóen valtozok, konstansok (allandok) es
Iüggvenyek lehetnek. valtozokrol mar beszeltünk, a Iüggvenyekról kesóbb lesz szo,
következzenek hat a konstansok.
.2 Konstansok
hogy erre a nevük is utal, a konstansok erteke a valtozokkal ellentetben nem
valtoztathato meg a program Iutasa közben.
. 2. Egész tí pusú konstansok
z egesz tipusu konstansok megielenhetnek programiainkban 10-es (decimalis), 8-as
(oktal) vagy 16-os (hexadecimalis) szamrendszerben.

Peldak:
0, 7, 19, 25432 (10-es szamrendszerben)
0, 013, 0257 (8-as szamrendszerben)
0x1a ,0x234, 0XAB2F (16-os szamrendszerben)

Mivel 65 nyolcas (oktal) szamrendszerben 101, tizenhatos (hexa)
szamrendszerben pedig 41, az alabbi egesz konstansok azonosak:
65 0101 0X41
Tehat azzal ielezzük, hogy egy konstans nyolcas illetve tizenhatos szamrendszerben van,
hogy 0-t, illetve 0x-et vagy 0X-et irunk eleie.

egiegvzes.
O incs negativ egesz konstans C-ben. negativ szamok a minusz)
operatornak elóielkent valo alkalmazasaval kepezhetók.
Peldaul az int x = -1; deIinicioban a minusziel operator, az 1-es pedig egesz
konstans.



58
Az egesz konstansok tipusai.

Minden egesz konstans, amely beleIer az int tartomanyba int tipusu. melyek nem
Iernek bele az int tartomanyba, de beleIernek a unsigned int tartomanyba, azok
unsigned int tipusuak. melyek nem Iernek bele az unsigned int tartomanyba, de
beleIernek a long int tartomanyba, azok long int tipusuak. z ennel is nagyobbak
nyilvan unsigned long int tipusuak.
Ienti szabaly szerinti implicit tipus Ielülbiralhato explicit modon, ugynevezett
tipusszufixekkel. szuIixek ielentese:
u vagy U unsigned int
l vagy L long int
ul vagy UL unsigned long int
Peldaul:
1 int típusú 1-es
1U unsigned int típusú 1-es
1L - long int típusú 1-es
1UL unsigned long int típusú 1-es
. 2. 2 VaIós tí pusú konstansok
Minden valos konstans implicit double tipusu, ez Ielülbiralhato explicit modon F
(float) illetve L (long) szuIixekkel.
Peldak:
3.14, -17.65, 1., 1.0, 0.1, .1, -0.025e-1,-12.6E2 (double
konstansok)
-1.F (float konstans)
0.01E+5L (long double konstans)
egiegvzes. a 0.01E+5L erteke 0.01 · 10
5
= 1000.0L
. 2. Karakter tí pusú konstansok
Különbözó modokon hivatkozhatunk a karakter tipusu konstansokra is.

1. megielenithetó karakterekre ugy hivatkozunk, hogy aposztroIok köze
iriuk: A, a, 0, 9, !, +,
2. Mind a 256 karakterre lehet hivatkozni az SCII kodia altal a
következókeppen: \ooo, vagy \xhh, ahol ooo es hh a karakter SCII kodia
nyolcas illetve tizenhatos szamrendszerben.
3. ehany Iontosabb nem megielenithetó karakterre ugynevezett escape
sekvenciak altal is hivatkozhatunk:

\a BEL csengó
\b BS visszalepes
\f FF lapdobas
59
\n LF uisor (soremeles)
\r CR kocsi vissza
\t HT vagy TB vizszintes tabulator
\v VT Iüggóleges tabulator
\\ \ backslash
\ aposztroI
\¨ ° idezóiel
\. . kerdóiel

egiegvzesek.
O z ETER leütesekor ket karakter tovabbitodik a memoriaba, a CR es a LF.
Ezek visszhangia a kepernyón, a kurzor uisorba ugrasa.
O karakter tipusu konstansok C-ben egesz tipusuak. Peldaul a A karakter
belsó abrazolasa: 0000000001000001. Tehat sizeof(A = 2.

A karakterek beolvasasara a billentvúzetrol letezik arom saiatos fùggvenv.
Pelda:
char c1, c2, c3;
c1 = getchar(; /*puIIerelt beolvasas kepernyó visszhanggal; ETER-t var*/
c2 = getche(; /*direkt a memoriaba olvas kepernyó visszhanggal;
nem var ETER-t */
c3 = getch(; /*direkt a memoriaba olvas kepernyó visszhang nelkül;
nem var ETER-t */
Csak a getchar( SI standard.
getche(es getch(hasznalata igenyli az #include <conio.h programsort.
puIIerelt illetve direkt olvasas reszletes leirasa vegett lasd a 11.1 es 11.2 alIeiezeteket.
Karakterolvasas allomanvbol.
Pelda:
char c;
c = fgetc(fp; /* fp allomanymutato */
Karakteriras kepernvore/allomanvba.
Pelda:
char c = A;
putchar(c;
fputc(c, fp; /* fp allomanymutato */
Karakter olvasas/iras nyilvan lebonyolithato a scanf/printf illetve a
fscanf/fprintf Iüggvenyek segitsegevel is, hasznalva a %c Iormazokaraktert
(reszletek vegett lasd a 11.2 alIeiezetet).

. 2. KarakterIánc tí pusú konstansok
karakterlanc tipusu konstansok idezóielek között ielennek meg programiainkban.
Peldaul a scanf Iormazosorakent, vagy az fopen Iüggveny parametereikent
60
karakterlanc tipusu konstansokat hasznaltunk. Reszletesebben a karakterlancokkal
Ioglalkozo Ieiezetben beszelünk roluk.
Peldak:
°Alma¨, °He\s strong¨, °két\nsor¨, °a + b¨, °%d%d¨

egiegvzes
O °a¨ nem azonos a-val, ugyanis az elsó egy elemú karakterlanc, a
masodik pedig karakter.
O a hosszu karakterlanc tipusu konstansok több sorba tördelhetók a \
karakter segitsegevel:
°két sorba tört hosszú\
karakterlánc konstans¨
O z egymasutan elhelyezkedó karakterlanc konstansokat egyesiti a Iordito:
°a kettó¨ °egy lesz¨
. 2. 5 Szi mboI ikus konstansok
szimbolikus konstansok hasznalata attekinthetóbbe teszi a programot, es megkönnyiti
az utolagos valtoztatast. const modosito ielzóvel (tipusminósitóvel), a #define
direktivaval, illetve az enum tipus segitsegevel hozhatok letre. z enum tipus az
összetett tipusok kereten belül, a #define direktiva pedig a makrokkal Ioglalkozo
Ieiezetben lesz reszletesen bemutatva.
const tipusminósitó egy valtozodeIinialast konstansdeIinialassa alakit. z igy
letreiött konstans azonban nem egy igazi konstans, hanem .irasvedette¨ tett valtozo.
HelyIoglalas törtenik szamara a memoriaban, akar a valtozok eseteben, sót pointeren
keresztül (tehat indirekt modon) meg is valtoztathato az erteke (5. Ieiezet).
z alabbi pelda bemutatia a const es a #define hasznalatanak modiat.
Pelda:
const float PI = 3.14;
#define PI 3.14
egiegvzes.
O szimbolikus konstansok neveit nagybetúkkel szokas irni.
ehany elóre deIinialt szimbolikus konstans:
RAND_MAX, CHAR_MAX, CHAR_MIN, INT_MAX, INT_MIN, UINT_MAX,
LJNG_MAX, LJNG_MIN, ULJNG_MAX
Hasznalatuk igenyli az #include <limits.h programsort.
Ertekeik vegett lasd a Help-et.

. Operátorok

z operatorok lehetnek egy, kettó vagy harom operandusuak.
. . Ari tmetikai operátor

+ összeadas
61
- kivonas
· szorzas
/ osztas
% osztasi maradek
+ illetve - operatorok elóielkent is szerepelhetnek mint egy-operandusu operatorok.
. . 2 ÖsszehasonIí tási operátor

= =, !=, <, , <=, =

Mivel C-ben nincs logikai tipus, ezert, ha egy összehasonlitas eredmenye igaz, akkor az
összehasonlitasnak mint kiIeiezesnek az erteke egy int tipusu 1-es (igaz), ellenkezó
esetben int tipusu 0-s (hamis).
Peldaul a 1 == 0 kiIeiezesnek az erteke 0, mert hamis. Viszont a 13 10 kiIeiezesnek
az erteke 1. ugyanis igaz.
. . Logikai operátorok

! tagadas(egy operandusu)
&& logikus es (2 operandusu)
|| logikus vagy ( 2 operandusu)

z alabbi peldak eseteben vegyük Iigyelembe a C nyelv azon iellegzetesseget, hogy
minden nem nulla ertek logikai erteke igaz, a nulla logikai erteke pedig hamis:

KiIeiezes Logikai erteke

!5 0
!!5 1
!0 1
5&&6 1
0 && 13 0
0 || 13 1
0 || 0 0
2 || 3 1
!(1 = = 1 0
7 = = 8 || 8 = = 7 0
7 = = 7 && 8 = = 8 1

De organ kepletek:

! ( a && b ! a || ! b illetve ! ( a || b ! a && !b

egiegvzes.
62
O Figyelem! Egy logikai kiIeiezes kiertekelese csak addig Iolytatodik, amig
az eredmeny egyertelmúve valik. Ebból problema adodhat, ha nem vagyunk
Iigyelmesek.
Peldaul az a && b++ kiIeiezes kiertekelesekor, ha az a erteke 0, akkor a
kiIeiezes erteke automatikusan 0 lesz, es nem kerül sor a b növelesere.



. . i tenkénti operátorok
( csak egesz tipusu operatorokra alkalmazhatok)

z operandus/operandusok belsó abrazolasanak bitiein kerül vegrehaitasra az operandus
altal elóirt múvelet.

<<, bitenkenti balra/iobbra leptetes (2 operandusu)
& bitenkenti es (2 operandusu)
| bitenkenti vagv (2 operandusu)
^ bitenkenti kizaro vagv (2 operandusu)
~ bitenkenti tagadas (1 operandusu)

kizaro vagv akkor igaz, ha az operandusok (megIeleló bitek) különbözó logikai
ertekúek.
következó tablazat peldakon keresztül, szemleletesen mutatia be mikent múködnek a
bitenkenti operatorok:

Peldak:
unsigned char a=1, b=3;

KiIeiezes Belsó abrazolas Ertek
a 00000001 1
b 00000011 3
a << 3 00001000 8
a 1 00000000 0
a & b 00000001 1
a | b 00000011 3
a ^ b 00000010 2
~a 11111110 254

egiegvzesek.
O Balra lepteteskor a legnagyobb helyertekú bit (a legbaloldalabbi) .kiesik¨,
iobbrol pedig 0-s bit .iön be¨.
63
O Jobbra lepteteskor a legkisebb helyertekú bit (a legiobboldalabbi) .esik
ki¨, balrol pedig elóiel nelküli (unsigned) tipus eseten 0, elóieles (signed) tipus
eseten az elóiel bit .iön be¨.

char a=-1;
unsigned char b = 255;




KiIeiezes Belsó abrazolas Ertek
a 11111111 -1
b 11111111 255
a1 11111111 -1
b1 01111111 127
a<<1 11111110 -2
b<<1 11111110 254

egiegvzesek.
O balra/iobbra leptetes, 2-vel valo szorzast/osztast ielent. Mivel a
bitmúveleteket gyorsabban haitia vegre a szamitogep, ezert 2 hatvanyaival valo
szorzaskor vagy osztaskor hatekonyabb a bitmúvelet hasznalata.
Peldaul:
a · 2 a << 1
a / 2 a 1
O Ha b egy 0 vagy 1 ertekú bit akkor:
b ' 0 ÷ b
b ' 1 ÷ 1
b & 0 ÷ 0
b & 1 ÷ b
b ` 0 ÷ b
b ` 1 ÷ ~b

A maszkolás technikája:
(a peldakban az x valtozo long tipusunak tekintendó)

Hogyan tudiuk lekerdezni egy egesz valtozo p-edik helyertekú bitiet?
if (x & (1UL<<p ...
Hogyan tudiuk kiiratni egy egesz valtozo p-edik helyertekú bitiet?
printf(°%d¨,!!(x & (1UL<<p;
Hogyan tudiuk ellenórizni, hogy egy egesz valtozo p-edik es q-adik helyertekú bitiei
azonosak-e?
if (!!(x & (1UL<<p==!!(x & (1UL<<q ...
Hogyan tudiuk 0-ra allitani egy egesz valtozo p-edik helyertekú bitiet?
64
x &= ~(1UL<<p;
Hogyan tudiuk 1-re allitani egy egesz valtozo p-edik helyertekú bitiet?
x |= 1UL<<p;
Hogyan tudiuk tagadni egy egesz valtozo p-edik helyertekú bitiet?
x ^= 1UL<<p;

. . 5 Értékadás operátor

z ertekadas szintaxisa:
<változó = <kifejezés;

Mivel C-ben az '֬ operator, ezert az ertekadas maga is kiIeiezes, amelynek az erteke
egyenló a valtozohoz rendelt ertekkel.
Pelda:
int a;
printf(°%d ¨, a = 2;
printf(°%d¨, a;

Többszörös ertekadas:
Szintaxisa:
<v1 = < v2 = < v3 = ... = < vn = <kifejezés;

Pelda: (egy valtozo egy utasitasbol valo nullaval inicializalasa)
int a, b, c, d;
a = b = c = d = 0;
egiegvzes.
O Többszörös ertekadas eseten az '÷¨ operatorok iobbrol-balra sorrendre
aktivalodnak.
Mindenik valtozo Ielveszi az ertekadas iobboldalan levó kifeiezes erteket.
. . 6 KombináI t operátorok

+ =, - = , · =, / =, % =, & =, | =, ^ =, =, << =

Altalanosan:
<v = <v <op <kifejezés <v <op= <kifejezés
Peldaul:
a = a | b; a | = b; /*a-t bitenkent .vagyolia¨ b-vel*/
a = a 4; a = 4; /*a-t iobbra lepteti 4 bittel*/
. . 7 Vesszõ operátor

Szintaxisa:
<kif
1
,<kif
2
,<kif
3
, ., <kif
n


2 2
65
<kif
i
kiIeiezesek balrol-iobbra ertekelódnek ki, az egesznek mint kiIeiezesnek
pedig az erteke az utolso kiIeiezes <kif
n
erteke lesz.
vesszó operator hasznalatanak csak akkor van ertelme, ha a <kif
i
,i = 1,...,n-1
kiIeiezeseknek önmagukban is van ertelmük (peldaul hozzarendelesek). Gyakran olyan
helyen hasznaliuk, ahol a szintaxis egy kiIeiezest ker de mi többet szeretnenk oda irni.
Peldak:
int a ,b ,c ,d;
d=(a=1,b=2,c=a+b,c·c;
printf(°%d %d %d %d¨, a, b, c, d;

int i, j;
for(i=1, j=100; i<j; i++, j-- ...
. . FeI téteIes operátor

Szintaxisa:
<kif
1
. <kif
2
: <kif
3
;

Kiertekelódik <kif
1
. Ha a logikai erteke 1 (igaz) akkor kiertekelódik <kif
2
es ez
lesz az egesznek, mint kiIeiezesnek az erteke es <kif
3
Iigyelmen kivül marad. Ha
viszont <kif
1
logikai erteke 0 (hamis), akkor a <kif
3
ertekelódik ki es ennek az
erteke lesz az egesznek, mint kiIeiezesnek az erteke es <kif
2
marad Iigyelmen kivül.
Peldak:
x = x = 0 . x : -x; /* az x valtozo abszoluterteket kepezi */
max = a b . a : b; /* a max valtozoba a es b közül a nagyobbik kerül */

Feladat. Legyenek a es b, egy elsóIoku egyenlet (ax ¹ b ÷ 0) valos együtthatoi. Mit
valosit meg a következó utasitas?
a . printf(¨x=%f¨,-b/a :
b . printf(¨nincs megoldás¨ : printf(°végtelen sok megoldás¨;
. . 9 A$izeof operátor

Megadia byte-ban a meretet egy adott kiIeiezes tipusanak, illetve egy adott tipusnak.
Szintaxisa:
sizeof(<kifejezés vagy sizeof(<típus

egiegvzes.
O kiIeiezes nem kerül kiertekelesre, csupan a tipusa kerül meghatarozasra,
amelyból egyertelmúen adodik a merete, tehat nincsenek mellekhatasok.
O tipusmeret, amint mar emlitve volt Iügg a Iorditotol. Ezert, ha
hordozhato programot szeretnenk irni, hasznaliuk a sizeof operatort.
Peldak:
float a = 1; double b;

1 2 3 9
66
Kifeiezes Erteke
sizeof(a 4
sizeof(double 8
sizeof(a + b 8
sizeof(++a 4 /* az a erteke 1 marad mert a ++a kiIeiezes nem lett
kiertekelve*/
. . 0 A Cast operátor (expI ici t tí puskonverzi ó)
Vannak esetek, amikor azt szeretnenk, hogy egy kiIeiezes kiertekelesekor egy adott
operandus ne az implicit tipusa szerint legyen Iigyelembe veve, hanem egy mas tipus
szerint. Ilyenkor explicit tipuskonverzioval rakenyszeritiük a kivant tipust.
Szintaxisa:
(<tipus<operandus
Peldak:
O Explicit tipuskonverzioval meghatarozhato egy valos szam egesz resze.

float x = 1.9;
printf(°%d¨, (intx;


O Explicit tipuskonverzio segitsegevel megvalosithato ket egesz valtozo
valos osztasa.

int a = 3, b = 6;
printf(°%f¨, (floata / b;

O Meg egy pelda:

float x = 1.9;
printf(°%d¨, (int(++x + 3;
egoldott feladatok.
1. Iriunk programot, amely beolvas egesz szamokat nulla vegielig, es kiiria az
összegüket, a szamtani közepüket, es a parosak illetve paratlanok összegeinek
abszolutertekei közül a nagyobbat!

1
0.500000
5
int x, s, s1, s2, k;
s = s1 = s2 = k = 0;
while(scanf(°%d¨, &x, x

s += x; k++;
x % 2 ? s2 += x : s1 += x;
·
printf(°Az összeg:%d¨, s;
printf(°A számtani közép:%f¨, (float)s/k;
printf(°A nagyobb összeg módulusza:%d¨,
(s1=(s1=0?s1:-s1 = (s2=(s2=0?s2:-s2?s1:s2;
67
2. Iriunk programot, amely karaktereket olvas be · vegielig, es kiiria hany 0-
s karakter volt köztük! Mi valtozik, ha a karakter beolvasasra rendre a
getchar(, getche(, getch( Iüggvenyeket hasznaliuk?

3. Iriunk programot, amely beolvas egy egesz szamot egy long valtozoba, es
kiiria a belsó abrazolasat!

4. Iriunk programot, amely egesz szamokat olvas be egy long tipusu valtozoba
0 vegielig, es megszamlalia a pozitivakat, negativakat, parosokat, paratlanokat,
valamint azokat, amelyek belsó abrazolasaban több 1-es bit volt mint 0-s bit!

int k = 0;
char c;
while((c = getcar()) = `*')
if(c == `0'k++;
printf(°Az 0-k száma:%d¨, k;
long x;
int i;
unsigned long maszk = 1U sizeof(long)*8-1;
scanf(°%ld¨, &x
printf(°A szám belsó ábrázolása:\n¨;
for(i = 1; i = sizeof(long)*8; i++)
{
if(x maszk)putcar(`1');
else putcar(`0');
maszk >>= 1;
}
long x;
int pozitiv=0, negativ=0, paros=0, paratlan=0, k=0, k1,
k2, i;
while(scanf(°%ld¨, &x, x

if(x1) paratlan++;
else paros++;
if(x1sizeof(long)*8-1) negativ ++;
else pozitiv ++;
k1 = k2 = 0;
for(i = 1; i <= sizeof(long·8; i++

if(x (1 sizeof(long)*8 - i))k1++;
else k2++;
·
if(k1 k2k++;
·
printf(°%d\n%d\n%d\n%d\n%d\n¨,
pozitiv,negativ,paros,paratlan,k;

68
int j, n;
unsigned short x, y, maszk;
scanf(°%d¨, &n;
for(j = 1; j <= n; j++

scanf(°%hu¨, &x;
y = (x sizeof(sort)*8/2)
(x >> sizeof(sort)*8/2);
printf(°%hu :¨, x;
maszk = 1 << sizeof(short·8-1;
while(maszk

if(x & maszkputchar(1;
else putchar(0;
maszk = 1;
·
putchar(\n;
printf(°%hu :¨, y;
maszk = 1 << sizeof(short·8-1;
while(maszk

if(y & maszkputchar(1;
else putchar(0;
maszk = 1;
·
putchar(\n;
·






5. Iriunk programot,
amely n darab termeszetes
szamot unsigned short
tipusu valtozoba olvas es
elóallitia azokat a szamokat,
amelyeket ugy nyerünk a
beolvasott szamokbol, hogy
a belsó abrazolasuk also
byte-iat kicsereliük a
Ielsóvel! Iriuk ki az eredeti
szamot, az elóallitott szamot,
valamint a belsó
abrazolasaikat!

69
Kitúzòtt feladatok.

1) dott egy egesz szam, amelyet egy long tipusu valtozoba tarolunk el. Forgassuk
körkörösen (ami kiesik egyik Ielól, az iön be a masik Ielen) iobbra/balra a belsó
abrazolasa bitieit es iriuk ki az igy kapott szamokat belsó abrazolasukkal együtt!
2) Ugyanaz a Ieladat de a Iorgatast ugy valositiuk meg, hogy a legkisebb helyertekú
es legnagyobb helyertekú bitek Iixen maradianak (a többit Iorgatiuk maguk között).
3) dott egy egesz szam, amelyet egy long tipusu valtozoba tarolunk el. Allitsuk
eló azt a szamot, amelyet ugy kapunk, hogy a belsó abrazolasa szomszedos bitieit
(0.-1., 2.-3., ...) kicsereliük egymas között!
4) dott egy x termeszetes szam az unsigned long tartomanybol, valamint az a, b,
c, d 0..31 közti termeszetes szamok. x belsó abrazolasanak az a-adik bitiet allitsuk
0-ra, a b-edik helyertekú bitiet 1-re, a c-edik bitiet tagadiuk, maid leptessük d
pozicioval balra. Iriuk ki az eredeti szamot es belsó abrazolasat, maid az uionnan
nyert szamot es belsó abrazolasat!
5) dott n egesz szam az int tartomanybol. Csomagoliuk össze negyenkent a belsó
abrazolasuk bitieit egy-egy hexadecimalis szamiegybe es iriuk ki az igy kapott 16-os
szamrendszerbeli szamot!

70
5 Pointerek (mutatók)


Beszeltünk mar arrol, hogy minden valtozonak van cime, espedig annak a
memoria-rekesznek a cime, amellyel kezdódóen hely van Ioglalva szamara a
memoriaban.
Eltarolato-e a memoriaban valamelv valtozo cime? Igen, cim tipusu
valtozokban. Ezeket pointereknek vagy mutatoknak nevezzük.

pointer-deIinialas szintaxisa:
<típus · <pointer;
Peldak:
int ·pi;
float ·pf;
long double ·pld;

pi egy int tipusu valtozo cimet tartalmazhatia, ezert azt mondiuk, hogy int-
pointer (tipusa int·). pf-ben, illetve pld-ben valamely float, illetve long
double valtozo cime tarolhato el.

Hogyan tudunk hivatkozni egy valtozo cimere? z operator segitsegevel!
Szintaxisa:
& <változó
Pelda:
int a , ·p;
p = &a;
zt mondiuk, hogy a p pointer az a valtozora mutat.

Hogyan lehet egy pointeren keresztül hivatkozni arra a valtozora, amelyre mutat? ·
operator segitsegevel!
Szintaxisa:
·<pointer

Pelda:
float x = 3.14, ·px = &x;
printf(° %f\n%f ¨, ·px, x;

Tehat: ·px <= x





3.140000
3.140000

71


különIele cim-tipusok között nincs implicit tipus-konverzio, de alkalmazhato a
CST operator (explicit tipus konverzio).
Pelda:
long x = 2003, ·p1; float ·p2;
p1 = &x; /* helyes*/
p2 = &x; /* helytelen, mert p2 float· tipusu, azaz float-
pointer, &x viszont long· tipusu, leven long-cim.*/
p2 = (float · &x; /* helyes*/

Mi ielenik meg a kepernyón a printf (¨% f¨, ·p2; kiiratas nyoman? z a valos
szam, amelynek float-kent valo belsó abrazolasa azonos a 2003-as egesz long-kenti
belsó abrazolasaval.

Leteznek olyan pointerek, amelyek barmely tipusu valtozo cimet eltarolhatiak.
Ezek a void-pointerek, tipusuk void·.
Pelda:
int a = 1; double b = 2; char c = A ;
void · p;
p = &a; printf(¨%d\n¨, ·(int·p;
p = &b; printf(¨%lf\n¨, ·(double·p;
p = &c; printf(¨%c¨, ·(char·p;

Tehat ha egy void-pointeren keresztül szeretnenk hivatkozni arra a valtozora, amelynek
cimet tartalmazza, elóször a CST operator segitsegevel a void pointert a valtozo
tipusanak megIeleló pointerre kell konvertalnunk es csak azutan alkalmazhatiuk a ·
operatort.
Ienti peldabol az is kiderül, hogy ha egy void-pointerhez rendelünk barmilyen
tipusu pointert, akkor nincs szükseg explicit tipuskonverziora. C-nyelvben Iorditva is
igaz (barmilyen tipusu pointerhez hozzarendelhetó egy void-pointer), de C¹¹-ban mar
1
2.000000
A
3.140000
3.140000

long a = 13, ·pa = &a, ··ppa = &pa



100 00001101
a ·pa ··ppa
00000000
00000000
00000000
104 01100100
pa ·ppa
00000000
106 01101000
ppa
00000000



13
100
104
72
nem. Ezert ezt az utobbi esetet kerüliük, vagyis hasznaliunk explicit tipuskonverziot, ha
hordozhato programot szeretnenk irni.

!ointerek es a const modosito ielzo

const <típus · <pointer nem valtoztathato meg a pointeren keresztül,
a valtozo ahova a pointer eppen mutat
<típus · const <pointer nem valtoztathato meg a pointer

pelda:
int a = 1, b = 2;
const int c = 3;
int · pc = &c;
const int · p; /* p, int tipusu konstansra mutato pointer valtozo*/
int · const q = &a; /* q, int-pointer-konstans, amely az a cimet
tartalmazza */
p = &a; /* helyes, mert p valtozo */
a++; /* helyes, mert a valtozo */
(·p++; /* helytelen, mert ·p konstans
(p-n keresztül a konstansnak latszik)*/
p++; /* helyes, mert p valtozo */
(·q++; /* helyes, mert ·q valtozo */
q++; /* helytelen, mert q konstans */
c++; /* helytelen, mert c konstans */
(·pc++; /* helyes, mert ·pc valtozo;
ezert mondtuk, hogy c nem igazi konstans */



5. MûveI etek poi nterekkeI
5. . Értékadás
z azonos tipusu pointerek egymashoz rendelhetók. mint mar lattuk különbözó
tipusu pointerek eseten szükseges az explicit tipus-konverzio, kiveve, ha void-
pointerhez rendelünk pointert.
Peldaul:
char c, · pc = &c; long double ld, · pld = &ld;
void · p;
pc = pld; /*helytelen*/
pc = (char ·pld; /*helyes*/
p = pld; /*helyes*/
pld = p; /*helyes, de kerülendó*/
pld = (long double ·p; /*igy aianlatos*/
73

5. . 2 ÖsszehasonIí tás
z azonos tipusu pointerek összehasonlithatok.
Mivel a pointerek a bennük tarolt memoria-cimek
alapian vannak összehasonlitva, ezert, ha ket pointer
ugyanarra a valtozora mutat, akkor egyenló.
Peldaul:
unsigned short u1 = 1, u2 = 2, ·p1 = &u1,
·q1 = &u1, ·p2 = &u2;

Ienti peldaban p1 es q1 egyenló, p2 viszont
nagyobb naluk, hiszen u2 nagyobb memoria-cimre
kerül, mint u1.

5. . <poi nter> + / - <egész>

Legyen a következó altalanos deIinialas:
<típus v. ·p = & v; (p a v valtozora mutato <típus· tipusu pointer)

Ha n egy egesz szam, akkor p + n illetve p - n. p-vel azonos tipusu pointerek
lesznek, amelyek a p + n · sizeof(<típus, illetve p - n ·
sizeof(<típus cimen levó <típus tipusu adatokra mutatnak.
Ugy is mondhatnank, hogy minden pointernek van egy lepesmerete, amely
azonos azzal a .tipusmerettel¨, amely megIelel annak a tipusnak, amilyen tipusu
valtozora mutat. Ha egy pointerhez hozzaadunk egy egesz szamot, akkor az összeg az
illetó szammal megegyezó szamu .lepessel¨ Iog .arrebb¨ mutatni a memoriaban.

Szemleletesebben:
char c, ·p1= &c;
float ·p2 = (float ·&c;
3.140000
3.140000




100
H
00000001
u1
00000000
102
H
00000010
u2
00000000
104
H
0
H
0
H

p1
1
H

H

106
H
0
H
0
H

q1
1
H

H

108
H
0
H
2
H

q2
1
H

H




1
2
p2 p1 100 c
p1 + 1 101
p1 + 2 102

p1 + 3 103
p2 + 1 p1 + 4 104

p1 + 5 105
p1 + 6 106

p1 + 7 107
p2 + 2 p1 + 8 108

p1 + 9 109
p1 + 10 110

p1 + 11 111
p2 + 3 p1 + 12 112
p1 + 13 113
74
Peldak:
int a = 1, b = 2, c = 3, ·p = &a;
printf(¨%d\n%d\n%d¨, ·p, ·(p-1, ·(p-2;
Iüggvenyekkel Ioglalkozo Ieiezet Iogia
tisztazni, hogy miert kerülnek a valtozok
csökkenó memoriacimekre (amennyiben
lokalis valtozokent, valamely Iüggvenyen
belül, peldaul a main-en belül deIinialiuk
óket).

Mi a hatasa a következó for ciklusnak?
float x, ·p;
for(p = &x ; p < &x + 10 ; p++
printf(°%f\n¨, ·p;
p pointert raallitia az x valtozora maid 4 byte-onkent (float meret) lepteti a
memoriaban (10-szer). Minden lepesben kiiria az illetó cimen talalhato float
erteket, tehat azt, ahova eppen mutat.

Figvelem' pointerek nyuitotta ezen szabadsaggal Ielelóssegteliesen kell elnünk,
hiszen ha visszaelünk vele könnyen kiakadhat a programunk.

Ha p pointer, n pedig egesz szam, akkor helyesek az alabbi múveletek:
p = p + n; p = p - n;
p += n; p -= n;
p ++; ++ p;
p -- ; -- p;

5. . Poi nterek küI önbsége
Ket azonos tipusu pointer kivonhato egymasbol, különbsegük az az egesz szam
lesz, amennyivel az elsó pointer el van leptetve a masodikhoz kepest.

Ez a múvelet az 5.3.1 alpontban bemutatott múveletnek a következmenye:
ha p1 = p2 + n akkor p1 - p2 = n
ha p1 = p2 - n akkor p1 - p2 = -n
Peldaul:
double x, y, z, px = &x, pz = &z;

pz-px pointerkülönbseg erteke -2 lesz,
mivel pz (mint double-pointer) 2 double-val
.mutat elóbbre¨ (.van visszaleptetve¨) a
memoriaban px-hez kepest.

1
2
3

(p-2)-~ c
(p-1)-~ b
p-~ a

z a, b, c cellak a megIeleló
valtozokat szemleltetik a
memoraban. Mindenikük merete
sizeof(int memoria rekesz.

pz-~ z
y
px-~ x

z x, y, z cellak a megIeleló
valtozokat szemleltetik a
memoraban. Mindenikük merete
sizeof(double memoria
rekesz.
75
Feladat. dott egy valos szam, amelyet long double valtozoban tarolunk el. Iriuk ki
a belsó abrazolasat.


long double x; int j;
unsigned char maszk;
char ·p = (char·&x; p += sizeof(long double-1;
/· Definiálunk egy char-pointert, amit ráállítunk
x legnagyobb helyértéku byte-jára */
scanf(°%Lf¨, &x;
for( j = 1; j <= sizeof(long double; j++

maszk = 1 << sizeof(char·8-1;
while(maszk

if(·p & maszkputchar(1;
else putchar(0;
maszk = 1;
·
p--;
·
76
6 Tömbök


6. Egydi menziós tömbök
z elózó Ieiezetekben több olyan algoritmust is bemutattunk, amelyek egy
szamsorozat elemeivel dolgoztak (peldaul kiszamitottak az elemek összeget,
megszamoltak a parosokat, meghataroztak a maximumot stb.). Ezen algoritmusok egyik
közös vonasa az volt, hogy a szamsorozat elemeit ugyanabba az elemek tipusanak
megIeleló tipusu memoriavaltozoba olvastak be. Ez azt ielentette, hogy a memoriaban
egy adott pillanatban a szamsorozat egyetlen eleme volt eltarolva. mikor beolvastuk a
következó elemet a valtozoba, az elózó elem erteke elveszett. Ez azert nem ielentett
gondot, mert az algoritmusok olyan termeszetúek voltak, hogy a szamsorozat elemein,
rögtön a beolvasasuk utan, elvegeztek az összes múveletet, amelyet a Ieladat megoldasa
megkövetelt.
Vannak azonban olyan Ieladatok, amelyek megoldasi algoritmusai megkövetelik,
hogy egy szamsorozat elemei egyidóben bent legyenek a memoriaban (ilyen Ieladatok
peldaul a rendezesek).
Mi a megoldas? tòmbtipus.
DeIinialasanak szintaxisa:
<elemtípus<név¯<elemszám`;

Peldak:
# define N 100

int a¯10`;
float b¯20`;
char c¯N`;
egiegvzes.
O az elemszam egesz tipusu konstans lesz.

z elsó deIinicio nyoman letreiött tömbvaltozot igy lehetne abrazolni:


0 1 2 3 4 5 6 7 8 9

Ienti tömbben egy maximum 10 elemú egesz szamsorozat elemei tarolhatok el.

tömb elemei azonos tipusuak. Peldaul az a, b, c tömbök elemei rendre int,
float, char tipusuak.

zert, hogy hivatkozni tudiunk a tömb egyes elemeire, ezek indexelve vannak 0-
tol kezdve <elemszám-1-ig.
a
77
Szintaxis:
<tömbnév ¯<index`

Peldak: a¯0`, b¯5`, a¯99`, a¯i`, b¯2·i+1`
egiegvzes.
O z index egesz tipusu kifeiezes lehet.

Egy tömb elemei szamara egymas utani memoriaterület kerül leIoglalasra.

t cime

..................

tömb szamara leIoglalt memoriaterület merete: <elemszám·sizeof
(<elemtípus. Peldaul a t tömb szamara leIoglalt tarhely merete: 10·4 byte ÷ 40
byte. Egy tömb cime a 0-adik elemenek a cime.

6. . I niciaI i záIás definiáIáskor
Peldak:
int a¯10` = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10·;
float f¯100` = 3.14, -12.45·; /* többi elem 0-val inicializalodik */
int b¯50` = 0·; /* minden eleme 0-val inicializalodik;
csak 0-val lehet ily modon inicializalni */
double d¯` = 1, 5.7, -3.45, 12, 0.66·; /* tömb automatikusan
5 elemúre deIinialodik */
int a¯5` = 1, 2, 3, 4, 5, 6, 7·; /* Helytelen, tul sok a kezdóertek. */

6. . 2 KapcsoIat a tömbök és poi nterek között
Egy tömb neve ugy tekinthetó, mint a 0-adik elemenek a cime; pontosabban, mint
egy pointer konstans, amely a tömb 0-dik elemere mutat.

Iloat t|10|;
t|0| cime
t|1| cime
t|2| cime
t|9| cime
t|0|
t|1|
t|2|
t|9|
78
Peldaul legyen az alabbi tömbdeIinialas:
float a¯100`;
a-nak, mint pointernek a tipusa float·, az erteke pedig &a¯0`.
Tovabba:
a &a¯0` a 0-dik elem cime
a + i &a¯i` az i-edik elem cime
·a a¯0` a 0-dik elem
·(a + i a¯i` az i-edik elem

Egy masik bizonyitekat a tömbök es pointerek rokonsaganak a következó pelda
illusztralia:
int a¯10`, ·p = a;

a¯i` p¯i` ·(a+i ·(p+i az i-edik elem
&a¯i` &p¯i` a + i p + i az i-edik elem cime

Tehat a pointerek indexelhetók: p¯i` = ·(p+i;
z alapvetó különbseg a es p között az, hogy a konstans p pedig valtozo: amig p++-t
követóen p az a¯1` elemre Iog mutatni, addig az a++ inkrementalas hibas.
Ha p long-pointer (long ·p;), akkor ugy is IelIoghato, mint egy p cimen
kezdódó, long elemtipusu tömb .neve¨ es p¯i`, mint ennek a tömbnek az i-edik eleme.
Ha p nem egy a memoriaban letezó tömbre mutat, akkor p¯i` a p+i cimen levó 4
byte-os területet ielenti, ahol .ki tudia mi van¨.

. Feladat. dott egy n elemú egesz szamokat tartalmazo sorozat. Olvassuk be egy
egydimenzios tömbbe, maid pedig iriuk ki a tömb elemeinek erteket a kepernyóre.


2. Feladat. dott egy n elemú egesz szamokat tartalmazo sorozat. Rendezzük az
elemeit növekvó sorrendbe.
szamsorozat elemeit egy a tömb a¯0`, a¯1`, ., a¯n-1` elemeiben taroliuk el.

Buborekos rendezes

buborekos rendezes strategiaiat - elsó megközelitesben- az alabbi abra mutatia be.

int a¯100`, n, i;
scanf(°%d¨, &n;
for(i = 0;i < n; i ++
scanf(°%d¨, &a¯i`;
for(i = 0;i < n; i ++
printf(°%d\n¨, a¯i`;
int a¯100`, n, i, ·p;
scanf(°%d¨, &n;
for(p = a; p - a < n; p ++
scanf(°%d¨, p;
for(p = a; p - a < n; p ++
printf(°%d\n¨, ·p;

79

szamsorozatot (n-1)-szer Iogiuk beiarni. Pontosabban: az i-edik beiarasban a
szamsorozat a|0..n-i| szakaszat. Hogyan? Peldaul az elsó beiarasban összehasonlitiuk
a|0|-t a|1|-el, maid a|1|-t a|2|-vel, ... vegül a|n-2|-t a|n-1|-el. Altalanosan: a|i|-t a|i¹1|-
el, ahol i÷0, 1, ..., n-2. Valahanyszor ugy talaliuk, hogy a|i| ~ a|i¹1|, Ielcsereliük óket.
z eredmeny: a legnagyobb elem kivandorol a tömb vegere (az a|n-1| tömbelembe).
következó beiarasokban hasonlokeppen iarunk el, es tovabbi elemek vandorolnak a
helyükre, ahhoz hasonloan, ahogy a levegóbuborekok szoktak Ieliönni a viz Ielszinere.
Mivel minden beiarassal helyere kerül legalabb egy elem, a beiart elemek szakasza -
minden beiaras utan- rövidithetó legalabb eggyel.
Hany összehasonlitast vegez a Ienti algoritmus? n * (n - 1) / 2.
Es hany ertekadast? Ez attol Iügg, hany cserere van szükseg. legrosszabb
esetben, ha a szamsorozat eredetileg csökkenó sorrendben van, minden összehasonlitast
csere követ, ami viszont harom ertekadast Ieltetelez. Ez összesen 3 * n * (n - 1) / 2
ertekadast ielent.
Ha alapmúveletnek az ertekadast es az összehasonlitast valasztiuk, akkor a
buborekos rendezes legrosszabb esetben 4 * n * (n - 1) / 2 alapmúveletet Ieltetelez.
Mivel ez a szam a bemenet meretetól (n) negyzetesen Iügg, azt mondiuk, hogy ezen
algoritmus bonyolultsaga (komplexitasa) O(n
2
).
em nehez atlatni, hogy ielenlegi allapotaban, legiobb esetben is ha a
szamsorozat mar eredetileg növekvó sorrendben van- On
2
) az algoritmus bonyolultsaga
(bar nem kerül sor cserere az összehasonlitasok szama ugyan annyi marad).
Hogyan lehet iavitani az algoritmus bonyolultsagan? Vegyük eszre, hogy a Ienti
algoritmus .vak¨, abban az ertelemben, hogy nem veszi eszre, ha a szamsorozat mar
rendezve van. Hogyan lehetne .kinyitni a szemet¨? Figyeliük, hogy törtenik-e csere egy
beiaras alatt. Ha nem, akkor a szamsorozat rendezett. Sót a tömb egyszeri beiarasa
alkalmaval szerencses esetben több elem is a helyere kerülhet. Ha megiegyezzük az
utolso csere helyet, a következó lepesben eleg csak addig menni.
iavitott algoritmus legrosszabb esetben, tovabbra is O(n
2
) bonyolultsagu,
viszont legiobb esetben csak On), hiszen az elsó beiaras utan .eszreveszi¨, hogy a
szamsorozat rendezett.
a|0| a|1| a|2| a|3| . . . a|n-3| a|n-2| a|n-1|



. . .
. . .
. . .
1. beiaras:
n-1
2. beiaras:
n-2
n-1. beiaras:
1
80
int a¯100`, n, u, i, j, v, ucs;
scanf(°%d¨, &n;
for(i = 0;i < n; i ++
scanf(°%d¨, &a¯i`;
u = n - 1; /· az aktuális bejárás vége ·/
do
{
ucs = 0; /·az utolsó csere helye ·/
for(j = 0;j u; j ++)
if(a[j] > a[j + 1])
{ v = a[j];
a[j] = a[j + 1];
a[j + 1] = v;
ucs = j;}
u = ucs; /· A következó bejárás az elözó
utolsó cseréjének helyéig megy·/
}
wile(ucs);/·Akkor van vége, ha nem volt csere
egy adott bejárásban ·/
for(i = 0;i < n; i ++
printf(°%d\n¨, a¯i`;

inimum-kivalasztasos rendezes

minimum-kivalasztasos rendezes barmilyen szamsorozat eseten kötelezóen
vegig kel szaladion (n-1)-szer a szamsorozat bizonyos szakaszain. Strategiaia abban all,
hogy az i-edik beiarasban az a¯i..n-1`(i=0..n-2 szakasz legkisebb elemet
elórehozza az i-edik pozicioba. Ezt ugy valositia meg, hogy a¯i`-t sorra
összehasonlitia az a¯j`(j=i+1..n-1 elemekkel es valahanyszor kisebbet talal
Ielcsereli óket. Ezt mutatia be szemleletesen az alabbi abra:
z alabbi programreszlet a minimum-kivalasztasos rendezes implementacioia:
...
for(i=0;i<n-1;i++
for(j=i+1;j<n;j++
if(a¯i`a¯j`v=a¯i`;a¯i`=a¯j`;a¯j`=v;·
...
Bar megirni egyszerúbb mint a buborekos rendezest, kevesbe hatekony, ugyanis
keptelen eszrevenni azt az esetet, amikor a szamsorozat rendezette valt, vagy mar
eredetileg rendezett. Ez a magyarazata annak, hogy bonyolultsaga O(n
2
) minden esetben.
egiegvzes.
O Leteznek hatekonyabb rendezesi algoritmusok is, amelyeknek bonyolultsaga
O(n log
2
n) a legrosszabb esetben is, de ezek implementalasa meghaladia ezen
a|0| a|1| a|2| a|3| . . . a|n-1|




. . .
. . .
. . .
1. beiaras:
n-1
2. beiaras:
n-2
n-1. beiaras:
1
81
könyv celkitúzeseit. Ilyenek peldaul: a gvorsrendezes (quicksort), az
òsszefesùlo rendezes (mergesort), a kupacrendezes (eapsort).

z alabbiakban ket olyan algoritmus kerül bemutatasra, amelyeknek bonyolultsaga
linearis (O(n)). Ezek kepezik a Ienti megiegyzesben emlitett elsó ket rendezes magvait.

Szetvalogatas.
Egy n elemú szamsorozat elemeit, amelyek az a tömbben vannak tarolva,
valogassuk szet .az elsó eleme szerint¨ (az elsó elemnel kisebb elemek elótte, a
nagyobbak mögötte legyenek).
Pelda:
a szamsorozat: , 8, 3, 2, 9, 5
szetvalogatva: 5, 2, 3, , 9, 8
Ctlet. Egy i illetve egy j valtozot a szamsorozat eleiere illetve vegere allitunk.
Kezdetben az elem amely szerint a szetvalogatas törtenik (tovabbiakban kulcselem)
nyilvan az i-edik pozicioban van. Miközben i all, iövünk elóre j-vel (magunk mögött
hagyva a kulcselemnel nagyobb elemeket) mig talalunk egy a¯j` kisebb mint a¯i`
elemet. Felcserelve egymas közt a¯i`-t es a¯j`-t, a kulcselem hatrakerül a i-edik
pozicioba, a nala kisebb elem pedig elóre kerül az i-edikbe. Ekkor .üzemmod¨ valtas
törtenik. Miközben i all, i-vel megyünk hatraIele (magunk mögött hagyva a
kulcselemnel kisebb elemeket), mig talalunk egy a¯i` nagyobb mint a¯j` elemet. Ismet
Ielcserelve egymas közt a¯i`-t es a¯j`-t, a kulcselem visszakerül az i-edik pozicioba,
a nala nagyobb elem pedig hatra a i-edikbe. Most uira j-vel iövünk elóre (1. üzemmod),
maid ismet i-vel megyünk hatra (2. üzemmod), mindaddig amig i es j talalkozik.
Figyeliük meg, hogy a kulcselem mindig az allo index iranyaban van, es az elóre
lepegetó i a kulcselemnel nagyobb, a hatraIele mozgo i pedig a kulcselemnel kisebb
elemeket hagyia maga mögött. kulcselem a helyet, amelyet a rendezett
szamsorozatban Ioglalna el, ott talalia meg ahol talalkoznak az i es i indexek. Lassuk,
mikent múködik az algoritmus a Ienti peldan:

8 3 2 9 5 k==0
i

j


5 8 3 2 9 k==1
i i

j



5 3 2 9 8 k==0

i

j j j

5 2 3 9 8 k==1

i i i j


82


Csszefesùles.
dott ket növekvó szamsorozat, Iesüliük össze óket egyetlen növekvó szamsoro-
zatba (a szamsorozatok elemeinek szama n es m, es az a illetve b tömbökben vannak ta-
rolva).
Pelda:
elsó szamsorozat (a): 1, 3, 3, 8
masodik szamsorozat (b): 2, 3, 7, 15, 21
összeIesült szamsorozat (c): 1, 2, 3, 3, 3, 7, 8, 15, 21
Ctlet.
z i valtozo az elsó szamsorozat, a j pedig a masodik elemein Iog lepegetni. z
a¯i` es b¯j` elemek közül mindig a kisebbiket tesszük a c tömbbe, maid lepünk egyet
abban a szamsorozatban, amelyból .elIogyasztottuk¨ azt az elemet, amelyet a c tömbbe
helyeztünk.

a 1 3 3 8








c 1 2 3 3 3 7 8 15 21





b 2 3 7 15 21


i=0; j=n-1;
k=0; /· k logikai értékétól fuggóen vagy
i, vagy j lépeget ·/
while (i<j
if(a¯i`<=a¯j`

k . i++ : j--;
·
else

v=a¯i`; a¯i`=a¯j`; a¯j`=v;
k = !k; /·uzemmód váltás ·/
·

for(i=0;i<n;i++
printf(°%d ¨,a¯i`;
83


Kitúzòtt feladatok.

1) dott egy n elemú valos szamokat tartalmazo sorozat. Ellenórizzük, szimmetrikus-e,
ha nem iriuk ki a tükörkepet.
2) Mit ir ki meg az alabbi programreszlet? Fogalmazd meg altalanosan! Ieladatot papiron
oldiuk meg!
int i, a¯10`=5, 3, 8, 2, 9, 0, 7, 1, 6, 4·;
for(i=0;i<10;i++

if(a¯0`a¯i`v=a¯0`; a¯0`=a¯i`;a¯i`=v;·
if(a¯9`<a¯i`v=a¯9`; a¯9`=a¯i`;a¯i`=v;·
·
printf(°%d, %d¨, a¯0`, a¯9`;
3) Binaris kereses. dott egy n elemú szigoruan növekvó egesz szamokat tartalmazo
sorozat, valamint egy x egesz szam. Keressük meg x-et a szamsorozatban az alabbi
algoritmus szerint. Ha megtalalhato iriuk ki a sorszamat, ha nem, akkor egy
megIeleló üzenetet.
O Összehasonlitiuk x-et a szamsorozat közepsó elemevel.
O Ha egyenlók, akkor megtalaltuk es kiiratiuk a sorszamat
O Ha nem egyenlók, akkor Iolytatiuk a keresest (ugyanilyen modon) vagy a
Ielsó, vagy az also szamsorozat-szakaszban.
O Ha nulla hosszusagu szakaszhoz iutunk, ez azt ielenti, hogy x nem talalhato
meg a sorozatban.
4) Karaktereket olvasunk be * vegielig. Keszitsünk karakter elóIordulasi statisztikat.
5) dott egy termeszetes szam, iriuk ki a kettes szamrendszerbeli alakiat.
6) Iriunk programot, amely megallapitia, hogy egy 50 adatbol allo meresi sorozat adatai
közül hany ter el 10°-nal kevesbe az atlagertektól.
i=j=k=0;
while (i<n && j<m
/· Amig nem érunk valamelyik számsorozat végére,
mikor a-ból, mikor b-ból másolunk elemet c-be
(mindig azt amelyik a kisebb ·/
if(a¯i`<=b¯j`
c¯k++`=a¯i++`;
else
c¯k++`=b¯j++`;
/· Miután kifutottunk valamelyik számsorozatból,
a másik számsorozat megmaradt elemeit egyszeruen
bemásoljuk a c tömb végére ·/
while (i<n c¯k++`=a¯i++`;
while (j<m c¯k++`=b¯j++`;

for(i=0;i<k;i++
printf(°%d ¨,c¯i`;
84
7) Iriunk programot, amely egy n hosszusagu, egeszeket tartalmazo adatsorban
megkeresi egy adott ertek utolso elóIordulasi helyet (sorszamat). Iria ki a program
azt is, hogy ez az adott ertek hanyadik elóIordulasa.
8) Töltsünk Iel egy 20 elemú egesz szamokat tartalmazo tömböt szamokkal. Irassuk ki
ezek közül sorrendben a harom legkisebb ertekút, es azt is, hogy hanyadik helyen
helyezkednek el!
9) dott n valos szam. lakitsuk halmazza óket (vagyis töröliük azokat az elemeket,
amelyek egy bizonyos erteket masodszor, harmadszor stb. tartalmaznak).
10)Iriuk ki a ( 1,2, ..., n) halmaz összes reszhalmazat.
11)dott ket halmaz. Szamitsuk ki a ket halmaz egyesitett halmazat, metszetet,
különbseget.
12)dott ket halmaz. Ellenórizzük, hogy reszhalmaza-e valamelyik valamelyiknek.
13)dott n halmaz. Szamitsuk ki az n halmaz egyesitett halmazat, metszetet,
különbseget.
14)dott ket halmaz. Szamitsuk ki a Descartes szorzatukat.
15)Iriuk ki egy adott halmaz összes reszhalmazat!
16)dott egy n elemú szamsorozat. Rendezzük növekvó illetve csökkenó sorrendbe
a) Buborekos rendezessel
b) Minimum-kivalasztasos rendezessel
c) Maximum-kivalasztasos rendezessel
d) Megszamoliuk hany elem kisebb egy adott elemnel es igy megtalaliuk vegleges
helyet a rendezett sorozatban.
17)dott egy n elemú szamsorozat. Rendezzük maguk között külön a paros, illetve
külön a paratlan poziciokban levóket.
18)dott egy n elemú szamsorozat. Rendezzük maguk között külön a pozitivakat, illetve
külön a negativakat.
19)dott egy n elemú szamsorozat es egy k szam (n legyen k többszöröse). Rendezzük
ugy a szamsorozat elsó k elemet, hogy növekvó reszsorozatot alkossanak, a masodik
k darab elemet ugy, hogy csökkenó reszsorozatot alkossanak, a harmadik k darabot
megint növekvó sorrendbe stb.
20)dott n darab szigoruan növekvó szamsorozat. Fesüliük össze óket egyetlen
szigoruan növekvó szamsorozatta.
21)dott egy n elemú szamsorozat, minden ket eleme köze szuriuk be az atlagukat.
a) Segedtömbbel.
b) Segedtömb nelkül.
22)dott egy n elemú szamsorozat. Töröliük ki belóle a primeket.
a) Segedtömbbel.
b) Segedtömb nelkül.
23)dott egy n elemú szamsorozat. Csereliük Iel egymas között az elsó minimumot es
az utolso maximumot.


85

6.2 KarakterI áncok (stringek)

karakterlancok C-ben karaktertömbökben kerülnek eltarolasra (nincs külön
string tipus, mint peldaul a Pascal nyelvben).
z alabbi peldak sokat elarulnak erról az erdekes tipusrol:

1. char s0¯10`;
2. char s1¯10`=¨alma¨;
3. char s2¯`=¨dió¨;
4. char s3¯10`=a,l,m,a,\0·;
5. char s4¯`=a,l,m,a,\0·;
6. char ·s5;
7. char ·s6=¨körte¨;
8. char s7¯`; /·hibás·/
9. char s8¯3`=¨alma¨; /·hibás·/
10. char· s9¯`=°alma¨, °körte¨, °dió¨, °banán¨·;

1. HelyIoglalas törtenik egy s0 nevú 10 elemú karaktertömb szamara.
2. HelyIoglalas törtenik egy s1 nevú 10 elemú karaktertömb szamara, amelyben
eltarolodik az ¨alma¨ karakterlanc. Hogyan?
S
a` `l` `m` `a` `\0`
0 1 2 3 4 5 6 7 8 9

egiegvzesek.
O karakterlanc karakterei pontosabban az SCII kodiaik a karaktertömb 0-
dik elemevel kezdódóen kerülnek eltarolasra, es követi óket a 0 SCII kodu
karakter, a karakterlanc-vegiel (\0). Ebból következik, hogy egy n elemú
karaktertömbben maximum (n-1) hosszu karakterlanc tarolhato el.
O Mikent törtenik a karaktertömbök karakterlanc-konstanssal valo inicializalasa?
C Iordito a Iorraskodban megielenó összes karakterlanc konstansrol (beleertve a
printf( es scanf( Iormazosorait is) keszit egy string literacioknak nevezett
tablazatot. Peldaul a Ienti deIiniciok közül a helyeseknek megIeleló
tablazatreszlet memoriakepe a következókeppen kepzelhetó el:


`a` `l` `m` `a` `\0` `d` `i` `o` `\0` `k` `o` `r` `t` `e` `\0`

2-es deIinicio alkalmaval a valosagban egy masolat keszül a string literacio
tablazataban levó ¨alma¨ karakterlanc-konstansrol az s1 tömbben.

86
3. Mivel az s2 tömbnek nem adtunk meg elemmeretet, automatikusan 4 elemú lesz,
hogy pontosan elIerien benne a ¨dió¨ karakterlanc-konstans masolata. Ugy is
mondhatnank, hogy indirekt modon közöltük, hany elemú legyen az s2 tömb.
S2
`d` `i` `o` `\0`
0 1 2 3

4,5. Klasszikus tömbinicializalassal törtenik az s3 es s4 karaktertömbökben az ¨alma¨
karakterlanc eltarolasa.
6. Letreiön az s5 karakter pointervaltozo.
7. Csak egy s6 karakterpointer valtozo szamara törtenik helyIoglalas, amely megkapia a
¨körte¨ karakterlanc-konstans string literaciok tablazatbeli cimet. Ugy is
mondhatnank, hogy s6-ot raallitiuk a ¨körte¨ karakterlanc-konstansra. Tehat nem
törtenik karakterlanc masolas. Mivel ¨körte¨ karakterlanc-konstans, ezert amig s6
ramutat, hibas lenne a következó inkrementalas: (·s6++
8. zert helytelen, mert a szögletes zaroielek ( ¯` azt ielzik, hogy s7-nek tömbnek
kell lennie, de sem közvetlen, sem közvetett modon nincs közölve, hogy hany elemú
legyen.
9. z ¨alma¨ karakterlanc eltarolasahoz legalabb egy 5 elemú karaktertömbre lenne
szükseg.
10. s9 egy 4 elemú karakterpointer tömb lesz, amelynek elemei a megIeleló karakterlanc
konstansokra Iognak mutatni.
6. 2. KarakterIáncok beoI vasása/ kií rása

a scanf/printf függvényekkel
pelda:
char s¯10`;
scanf(¨%s¨,s;
printf(¨%s¨,s;



Memoria
s
a` l` m` a` \0`
0 1 2 3 4 5 6 7 8 9

alma
alma
Billentyúzetról

alma<ENTER
Memoria
s
a` l` m` a` \0`
0 1 2 3 4 5 6 7 8 9

alma dio
alma
Billentyúzetról

alma dio<ENTER
a beolvasas visszhangia

a kiiratas nyoma
87
egiegvzesek.
O Figyelem! scanf csak whitespace-ig olvas. Tehat altalaban nem olvashato
be scanf-el több szavas karakterlanc.
O z fscanf es fprintf hasonlokeppen múködnek.

a gets/puts függvényekkel
prototipusa:
char ·gets(char ·s;
int puts(const char ·s;
gets ·ETER~-ig olvas. z uisor karakter nem kerül eltarolasra, helyette a \0
karakter kerül a karaktertömbbe.
puts automatikusan uisorba ugratia a kurzort.

Pelda:
char s¯10`;
gets(s;
puts(¨gyumölcsök:¨;
puts(s;






a fgets/fputs függvényekkel
prototipusa:
char ·fgets(char ·s, int h, FILE· fp;
int fputs(const char ·s, FILE· fp;

egiegvzesek.
O fgets sorvegig olvas, es a gets-tól elteróen az uisor karakter is eltarolasra
kerül a karaktertömbbe.
O h parameterrel azt adiuk meg, hogy maximum hany karakter kerüliön
beolvasasra. Altalaban az s tömb meretet iriuk ide.
O z fputs hasonloan múködik, mint a puts.
O Figyelem! Ha Ielvaltva olvasunk scanf-el es gets-el, illetve fscanf-el es
fgets-el, akkor a következó problemaval talalhatiuk szemben magunkat:
o a scanf/fscanf nem olvassa be a sorvegielt, ezert, ha gets/fgets
követi, akkor ez, ezen sorvegielt Iogia beolvasni.
o Egyik modia annak, hogy ezt elkerüliük ugy törtenik, hogy a
scanf/fscanf-el valo olvasas utan, egy karakterolvaso Iüggvennyel
(getchar/fgetc) kiolvassuk az ottmaradt sorvegielt.

Memoria
s
a` l` m` a` d` i` o` \0`
0 1 2 3 4 5 6 7 8 9

alma dio
gyumölcsök:
alma dio
Billentyúzetról

alma dioENTER>
a beolvasas visszhangia

a kiiratas nyoma
88
6. 2. 2 KaraktreIánc kezeI õ függvények

egiegvzes. karakterlanc kezeló Iüggvenyek prototipusait a string.h header
allomany tartalmazza, ezert hasznalatuk szüksegesse teszi az #include<string.h
programsort.

Az strlen függvény
prototipusa:
int strlen(const char ·s;
strlen Iüggveny visszateriti az s cimen kezdódó karakterlanc hosszat.
Pelda:
char s¯10`=¨alma¨;
printf(°%d%d¨,strlen(s,strlen(°dió¨;

Az strcpy függvény
prototipusa:
char ·strcpy(char ·s1,const char ·s2;
strcpy Iüggveny az s2 cimen kezdódó karakterlancot atmasolia az s1 cimtól
kezdódóen. masolas karakterenkent törtenik, mig atmasolasra kerül a \0 is.
Pelda(1):
char s¯10`, ·p, ss¯10`;
s=¨alma¨; /·helytelen·/
p=¨alma¨; /·a p pointert ráállítjuk az
¨alma¨ karakterlánc-konstansra·/
strcpy(s,¨alma¨; /· az s tömbbe bemásolódik az
¨alma¨ karakterlánc·/
strcpy(ss,s; /·az ss tömbbe átmásolódik az
s tömbben eltárolt karakterlánc·/
strcpy(°alma¨,s; /·helytelen·/
egiegvzesek.
O z elsó ket programsorban nem törtenik karakterlanc masolas, csupan pointer-
hozzarendeles. z elsó ertekatadas azert hibas, mert s mint tömbnev, egy pointer
konstans.
O z utolso programsor azert helytelen, mert az strcpy elsó parametere char·
pointer kell legyen, az °alma¨ cime viszont const char· pointer. Mig a
(char· - (const char· konverzio helyes, a Iorditott iranyu nem az.


Pelda(2):
char s¯10`;
strcpy(s,¨almafa¨;
strcpy(s+2,s+4;/·törli s-ból a ¨ma¨ részkarakterláncot·/
printf(°%s¨,s;

karakterlancokat kezeló Iüggvenyek reszletesebb leirasa vegett, illetve egyeb Iüggvenyek
tanulmanyozasa erdekeben, lasd a Help-et.
4
3
alfa
89
int n, k=0, h, i;
unsigned long nn;
char sn¯11`;
scanf(°%d¨, &n;
nn=n·n;
sprintf(sn,°%lu°, nn;
h=strlen(sn;
for(i=0;i<h;i++
if(sn¯i`==5k++;
printf(°k=%d¨, k;

Az strcat függvény
prototipusa:
char ·strcat(char ·s1,const char ·s2;
z strcat Iüggveny az s2 cimen kezdódó karakterlancot, az s1 cimen kezdódó
karakterlanc utan Iúzi. z s1 karaktertömbnek nyilvan eleg nagynak kell lennie ahhoz,
hogy elIerien benne az s2 karakterlanc is.
Az strcmp függvény
prototipusa:
int strcmp(const char ·s1,const char ·s2;
z strcmp Iüggveny összehasonlitia karakterenkent az s1 illetve s2 cimeken kezdódó
karakterlancokat, es visszaterit negativat, nullat vagy pozitivat attol Iüggóen, hogy
lexikograIikus sorrendben s1 van elóbbre, s1 azonos s2-vel vagy s2 van elóbbre.
Az strstr függvény
prototipusa:
char ·strstr(const char ·s1,const char ·s2;
z s2 cimen kezdódó karakterlancot, megkeresi az s1 cimen kezdódó karakterlancban.
Ha megtalalia visszateriti annak az s1-beli karakternek a cimet, amelytól kezdódóen s2
elóször megtalalhato s1-ben. Sikertelen kereses eseten a NULL pointert teriti vissza.
Az strcr függvény
prototipusa:
char ·strchr(const char ·s, int c;
z strcr Iüggveny megkeresi a c karaktert az s1 cimen kezdódó karakterlancban. Ha
megtalalia, visszateriti annak az s1-beli karakternek a cimet, amely a c elsó elóIordulasi
helye. Sikertelen kereses eseten a NULL pointert teriti vissza.
Az sscanf/sprintf függvények
Hasonlo modon múködnek mint az fscanf/fprintf Iüggvenyek, azzal a különbseggel,
hogy az sscanf nem allomanybol olvas, hanem karakterlancbol, es az sprintf nem
allomanyba ir, hanem karakterlancba.
Gyakran arra hasznaliuk óket, hogy szamot karakterlancca alakitsunk es Iorditva. Ezt
mutatiak be az alabbi peldak is.



Feladat. dott egy termeszetes szam az int
tartomanybol. Szamoliuk meg hany 5-ös
szamiegyet tartalmaz a negyzete.





90
int n,i;
unsigned long x;
char kod¯11`;
gets(kod;
n=strlen(kod;
for(i=0;i<n;i++
kod¯i`-=A-0;
sscanf(kod,°%lu¨,&x;
x=(unsigned longsgrt((doublex;
printf(°A szam=%lu¨, x;
int n,i,st¯256`=0·;
char s¯100`;
gets(s;
n=strlen(s;
for(i=0;i<n;i++
st¯s¯i``++;
for(i=0;i<256;i++
if(st¯i`
printf(°%c: %d¨,i,st¯i`;
Feladat. Egy szamot ugy kodolunk,
hogy negyzetre emeliünk, maid
minden szamiegyet helyettesitiük az
angol abece annyiadik nagybetúievel,
amely a szamiegy ertekenek Ielel
meg. Iriuk meg a dekodolo programot.
szam negyzete beleIer az unsigned
long tartomanyba.


egoldott feladatok.

egiegvzes. Ieladatokban .mondat¨ alatt egy olyan egysoros karaktersort ertünk,
amelyben a .szavak¨ szoközzel vannak elvalasztva.

1.) Iriunk programot, amely beolvas a
billentyúzetról egy többszavas mondatot, es
keszit egy karakter-elóIordulasi statisztikat.
Ctlet. Letrehozunk egy 256 elemú int tipusu
tömböt (legyen a neve st), amelynek minden
eleme szamlalokent Iog múködni. z st¯i`
elem, az i SCII kodu karaktereket Iogia
szamolni.

2.) Iriunk programot, amely beolvas a billentyúzetról egy többszavas mondatot, es kiiria
a palindrom (elölról olvasva ugyanaz mint hatulrol) szavakat egymas ala.
Ctlet. Beolvassuk a mondatot gets-el, maid kiolvassuk belóle a szavakat sscanf-el.

Üres karakterlancbol valo olvasaskor az sscanf -1(EJF terit vissza (különben a
sikeresen kiolvasott .szavak¨ szamat).

int n,i,j;
char s¯100`,szo¯30`;
gets(s;
strcat(s,° ¨;
while(sscanf(s,°%s¨,szo != EJF

n=strlen(szo;
for(i=0,j=n-1;;i++,j--
if(szo¯i`!=szo¯j` break;
else if(i=jputs(szo;break;·
strcpy(s,s+n+1;/·törlöm a kiolvasott szót·/
·
91
3.) Iriunk programot, amely beolvas a billentyúzetról egy többszavas mondatot, es kiiria
a szavak.ki allomanyba a szavakat egymas ala abece sorrendben.
Ctlet. mondatot .Ieldaraboliuk¨ ugy, hogy minden szo külön karakterlanc legyen.
Minden szora raallitunk egy char-pointert. Rendezzük a pointereket aszerint, hogy
milyen szora mutatnak. Ezen modszer elónye abban all, hogy a rendezes targyat kepezó
entitasok nem kerülnek .mozgatasra¨. Különösen hasznos ez, ha az entitasok merete
nagy.

4.) Iriunk programot, amely beolvas a billentyúzetról ket, legtöbb 50 szamiegyú
termeszetes szamot, es kiiria az összegüket.

FILE·f;
int n,i,j,k;
char s¯100`,·p¯20`,·v;
f=fopen(°szavak.ki¨,°w¨;
gets(s;
n=strlen(s;
p¯0`=s;k=1;
/· a mondat °feldarabolása¨ ·/
for(i=1;i<n;i++
if(s¯i-1`== p¯k++`=s+i;s¯i-1`=\0;·
/· a pointerek rendezése ·/
for(i=1;i<k-1;i++
for(j=i+1;j<k;j++
if(strcmp(p¯i`,p¯j`0
v=p¯i`;p¯i`=p¯j`;p¯j`=v;·
/·a szavak kiírása ábécé sorrendben az állományba·/
for(i=1;i<k;i++
fputs(p¯i`,f;fputc(\n,f;·
fclose(f;


int n,n1,n2,i1,i2,i3,av;
char s1¯51`,s2¯51`,s3¯51`;
gets(s1;gets(s2;
n1=strlen(s1;
n2=strlen(s2;
n=n1n2.n1:n2;
av=0; /· átvitel ·/
for(i1=n1-1,i2=n2-1,i3=n-1;i1=0&&i2=0;i1--,i2--,i3--
s3¯i3`=((s1¯i1`-0+(s2¯i2`-0+av%10+0;
av=((s1¯i1`-0+(s2¯i2`-0+av/10;·
for(;i1=0;i1--,i3--
s3¯i3`=((s1¯i1`-0+av%10+0;
av=((s1¯i1`-0+av/10;·
for(;i2=0;i2--,i3--
s3¯i3`=((s2¯i2`-0+av%10+0;
av=((s2¯i2`-0+av/10;·
s3¯n`=\0;
if(av==1putchar(1;/· ha van átvitel kiírjuk ·/
puts(s3;
s1
s2
s3
92
5.) Iriunk programot, amely beolvas a billentyúzetról n mondatot, es megszamolia
hanyban ielenik meg a C karakter.

6.) Iriunk programot, amely beolvas a mondat.be allomanybol n mondatot, es kiiria a
kepernyóre annak a mondatnak a sorszamat, amelyben legelóbbre Iordul eló a ,C
nyelv¨ kiIeiezes.

7.) Iriunk programot, amely beolvas a mondatok.be allomanybol egy szöveget es kiiria
a leghosszabb szot.
Ctlet. Kihasznaliuk, hogy az fscanf szavankent olvas, valamint azt, hogy az
allomanyvegiel olvasasakor -1(EJF terit vissza (különben a sikeresen kiolvasott
.szavak¨ szamat).
int n,i,k=0;
char s¯100`;
scanf(°%d¨,&n;
getchar(;/·kiolvassuk a scanf otthagyta sorvégjelt·/
for(i=0 ;i<n ;i++

gets(s;
if(strchr(s,Ck++;
·
printf(°k=%d¨,k;
FILE·f;
int n,i,k,min_i,min;
char s¯100`;
f=fopen(°mondat.be¨, °r¨;
fscanf(f,°%d¨,&n;
fgetc(f;/·kiolvassuk az fscanf otthagyta sorvégjelt·/
min=100;
for(i=1 ;i<=n ;i++

fgets(s,sizeof(s,f;
k=strstr(s, °C nyelv¨-s; /· k-ba a °C-nyelv¨ s-beli
pozíciója kerul ·/
if(k0 && k<minmin=k;min_i=i;·
/· gondolunk arra az eshetóségre is, hogy a °C-nyelv¨
karakterlánc nem szerepel a kiolvasott mondatban·/
·
fclose(f;
printf(°A sorszám: %d¨,min_i;
FILE·f;
int n,max=0;
char s¯30`,s0¯30`;
f=fopen(°mondat.be¨, °r¨;
while(fscanf(f,°%s¨,s != EJF

n=strlen(s;
if(nmaxmax=n;strcpy(s0,s;·
·
fclose(f;
puts(s0;
93
Kitúzòtt feladatok.

1) Iriunk programot, amely beolvas egy szemelyi szamot (CP) es kiiria az illetó
szemely nemet es születesi datumat.
2) Melyek helyesek? Ieladatot papiron oldiuk meg!
achar s1¯`;
bchar s2;
cchar ·s3;
dchar s4=¨A¨;
echar s5=A;
fchar ·s6=¨A¨;
gchar s7¯`=¨A¨;
hchar s8¯1`=¨A¨;
3) Iriunk programot, amely egy legtöbb 20 elemú karaktersorozatrol eldönti, hogy
palindrom-e. Palindromnak egy olyan szöveget nevezünk, amely balrol iobbra es
iobbrol balra olvasva ugyanaz, a sorközöktól es irasiegyektól eltekintve. Peldaul:
Geza, kek az eg.
4) Iriunk programot, amely a kepernyóról olvas be szamokat. bevitt szamot csak
akkor Iogadiuk el, ha az tenylegesen szam, egesz es az elózó szamtol valo elteres
20°-nal nem nagyobb.
5) dott ket azonos hosszusagu, különbözó karaktereket tartalmazo karakterlanc
(barmely karakter egyszer Iordulhat eló), amelyek egymas anagrammai. Ellenórizzük
az adatok helyesseget, maid sokszorozzuk meg az elsó karakterlanc karaktereit
annyiszor, ahanyadik pozicioban talalhato az illetó karakter a masodik
karakterlancban.
Peldaul: ¨szilva¨, ¨vaszil¨ ÷~ ¨sssszzzzziiiiiilllllllvvaaa¨
6) Egy bemeneti karakterlanc szavakat tartalmaz szoközzel elvalasztva. Töröliük a
legrövidebb szavakat.
7) dott ket, azonos hosszusagu karakterlanc. z elsó betúket, a masodik szamiegyeket
tartalmaz. Ellenórizzük az adatok helyesseget, maid az elsó minden betúiet
sokszorozzuk annyiszor, amennyi a masodik karakterlancbol sorszam szerint
megIeleló szamiegy erteke.
Pl. ¨abcd¨ ,¨3124¨ ÷~ ¨aaabccdddd¨
8) Egy bemeneti karakterlanc binaris szamokat tartalmaz szoközzel elvalasztva.
Keszitsünk egy masik karakterlancot, amelyben megórizzük (szoközzel elvalasztva),
azon binaris szamok tizes szamrendszerbeli alakiat, amelyeknek binaris alakia paros
szamu 1-est tartalmaz.
Peldaul: ¨10010 1101 10001 111 1000 1100¨ ÷~ ¨18 17 12¨
9) Egy bemeneti karakterlancban helyettesitsük egy adott karakterlanc többszöri
elóIordulasait egy masik, adott, karakterlanccal.
10)Olvassunk be a billentyúzetról szavakat es epitsünk Iel egy karakterlancot, amely
betúrendi sorrendben tartalmazza a szavakat.
11)dott egy szöveg. Ha a szöveg tartalmaz szamiegyeket, valtoztassuk meg ugy, hogy
minden szamiegyet annyiszor sokszorozzunk meg, mint amennyi a szamiegy erteke.
94
12)dott egy szöveg. Ha a szöveg tartalmaz szamiegyeket, helyettesitsünk a szövegben
minden szamiegyet annyi (*) karakterrel, mint amennyi a szamiegy erteke.
13)dott egy mondat. Iriuk at .madarnyelvre¨ (minden ·maganhangzo~-t,
helyettesitünk a ·maganhangzo~p·maganhangzo~ karakterlanccal)
Peldaul: ¨Jo reggelt¨ ÷~ ¨Jopo repeggepelt¨
14)dott egy karakterlanc, amely szavakat tartalmaz szoközzel elvalasztva. Tükrözzük
külön mindenik szot, es iriuk ki az igy nyert karakterlancot.
95

6. Kétdi menziós tömbök
Egy ketdimenzios tömb ugy kepzelhetó el mint egy tablazat, amelynek sorai es
oszlopai vannak. Ugy a sorok mint az oszlopok indexelve vannak, hogy lehessen
hivatkozni raiuk.
deIinialas szintaxisa:
<elem_típus <név¯<sorok_száma`¯<oszlopok_száma`;
Pelda:
char tc¯20`¯20`;
int ti¯3`¯5`;
long double tld¯10`¯10`;
ti tömböt peldaul igy lehetne abrazolni:

ti 0 1 2 3 4
0

1

2



z alabbi abra a ti tömb memoriakepet szemlelteti (sorIolytonos abrazolas):
(Felteteleztük, hogy az int tipusu adatok 4 byte-on vannak tarolva.)



ketdimenzios tömbök szamara leIoglalt tarhely meretet a következó keplettel lehet
kiszamitani:
<sorok_száma · <oszlopok_száma · sizeof(<elem_típus
Peldaul a Ient deIinialt tömbök merete sorra:
400 byte, 15 · sizeof(int byte, 1000 byte.

ketdimenzios tömbök elemeire valo hivatkozas szintaxisa:
<név¯<sor_index`¯<oszlop_index`
ti tömb besatirozott elemeinek azonositoi:
ti¯0`¯0`, ti¯1`¯2`, ti¯2`¯4`















..................




ti¯0`¯0` cime
ti¯0`¯1` cime
ti¯0`¯2` cime
ti¯2`¯4` cime
ti¯0`¯0`
ti¯0`¯1|
ti¯0`¯2`
ti¯2`¯4`
96
Ketdimenzios tòmbòk inicializalasa definialasukkor.

Peldak:
int a¯2`¯3`=1, 3, -5, 0, 77, -13, 9·;
int b¯`¯3`=1, 3, -5, 0, 77, -13, 9, 1, 34, -1·; /* b 3x3-as
meretú lesz */
int c¯100`¯100`=0·; /* minden elem 0-val inicializalodik */

ketdimenzios tömbökbe leggyakrabban matrixok elemeit taroliuk.
Feladat. dott egy n soros, illetve m oszlopos egesz szamokat tartalmazo matrix. Iriunk
programot, amely beolvassa a matrix elemeit a billentyúzetról egy ketdimenzios tömbbe,
maid kiiria az elemeket a kepernyóre matrix alakban.


C nyelvben a ketdimenzios tömbök ugy tekinthetók, mint olyan egydimenzios
tömbök, amelyek elemei ugyancsak egydimenzios tömbök.
Peldaul az int a¯7`¯5`; tömbdeIinialas nyoman, a egy olyan 7 elemú egydimenzios
tömb, amelynek minden eleme 5 elemú egydimenzios tömb.
ilven tipusu egv ketdimenzios tòmb neve mint pointer?
Mivel ugy Ioghato Iel mint egy olyan egydimenzios tömbnek a neve, amelynek 0-dik
eleme a 0-dik sora, ezert, peldaul a Iennebb deIinialt a egy .5 elemú int-tömb-pointer
konstans¨.
Hogyan lehet .leirni¨ egy ilyen összetett tipust?
Altalanos szabalv.
Ha szeretnel .leirva latni¨ valamely tipust, deIiniali egy ilyen tipusu valtozot,
maid töröld a deIinialasbol a valtozo nevet.

Peldak:

int v; /* v int-változó,
tipusa: int */
int ·p; /* p int-pointer,
tipusa: int· */
int a¯50`¯50`, n, m, i, j;
scanf(°%d%d¨, &n, &m;
for(i = 0;i < n; i ++
for(j = 0;j < m; j ++
scanf(°%d¨, &a¯i`¯j`;
for(i = 0;i < n; i ++

for(j = 0;j < m; j ++
printf(°%d ¨, a¯i`¯j`;
printf(°\n¨;
·
97
int t¯10`; /* t 10 elemú int-tömb,
tipusa: int¯10` */
int ·pt¯10`; /* pt 10 elemú int-pointer-tömb,
tipusa: int·¯10` */
int (·tp¯10`; /* tp 10 elemú int -tömb-pointer,
tipusa: int(·¯10` */
int m¯5`¯3`; /* m 5x3-as kétdimenzios int-tömb,
tipusa: int¯5`¯3` */
int ·pm¯5`¯3`; /* pm 5x3-as ketdimenzios int-pointer-tömb,
tipusa: int·¯5`¯3` */
int (·pm¯5`¯3`; /* mp 5x3-as ketdimenzios int -tömb-pointer,
tipusa: int(·¯5`¯3` */

Tehat az int a¯7`¯5` ketdimenzios tömb neve, int (·¯5` tipusu pointer-konstans.

Legyen a következó tömbdeIinialas:
float b¯3`¯4`;

z alabbi abra bemutatia, hogyan lehet hivatkozni a nyillal megielölt egysegekre
(Ielsó sor) illetve cimeikre (also sor):

Szabalv.
a¯i`¯j` ·(a¯i` + j ·(·(a + i +j
!elda.
z alabbi egymasba agyazott for ciklusok beolvasnak egy n L m meretú matrixot az x
ketdimenzios tömbbe.
float x ¯10`¯10`, (·sp¯10`, ·ep;




**b, b|0||0|, (*b)|0|
*b, &b|0||0|
*(*b¹2), b|0||2|, (*b)|2|
*b¹2, &b|0||2|
**(b¹1), b|1||0|, (*(b¹1))|0|
*(b¹1), &b|1||0|
*(*(b¹1)¹1), b|1||1|, (*(b¹1))|1|
*(b¹1)¹1, &b|1||1|
**(b¹2), b|2||0|, (*(b¹2))|0|
*(b¹2), &b|2||0|
*(*(b¹2)¹3), b|2||3|, (*(b¹2))|3|
*(b¹2)¹3, &b|2||3|
b
&b
*b, b|0|
b, &b|0|
*(b¹1), b|1|
b¹1, &b|1|
*(b¹2), b|2|
b¹2, &b|2|
98
int n, m;
scanf(¨%d%d¨, &n, &m;
for(sp = x; sp - x < n; sp++
for(ep = ·sp; ep - ·sp < m; ep++
scanf(¨%f¨, ep;

egiegvzes.
O sp (sor-pointer) az x tömb egy sorara mutat (10 elemú float-tömb-
pointer), ezert növelve (sp++), sorrol-sorra lepeget.
O ep (elem-pointer) az x tömb egy elemere mutat (float-pointer), ezert
növelve (ep++), elemról-elemre lepeget.

Hogyan irhatok ki a besatirozott területek elemei a nyilakkal megielölt sorrendben?
Feltetelezzük, hogy az abrak n L n meretú területei egy a nevú ketdimenzios tömbnek,
es a bal-Ielsó sarok indexei (0,0.










for(i=0; i<n; i++
for(j=0; j<=i; j++
printf(°%d ¨, a¯i`¯j`;






for(j=n-1; j=0; j--
for(i=0; i<=j; i++
printf(°%d ¨, a¯i`¯j`;





for(i=n-1; i=0; i--
for(j=n-1; j=n-1-i; j--
printf(°%d ¨, a¯i`¯j`;






for(j=n-1; j0; j--
for(i=n-1; in-1-j; i--
printf(°%d ¨, a¯i`¯j`;






for(i=n/2; i<=n-1; i++
for( i%2.j=i:j=n-1-i;
j=n-1-i && j<=i;
i%2.j--:j++
printf(°%d ¨, a¯i`¯j`;
99
i-j=-(n-1

0 1 ... n-1
0


1


.
.
.






n-1



i=j
i-j=-1
i-j=1 i-j=n-1
egiegvzes. az utolso peldaban, paros n eseten a vizszintes nyilak iranyitasaval Iorditott
iranyitasu beiaras törtenik.

Szimmetriak es szabalvossagok egv n L n meretú matrixban.


Ióatloval parhuzamos atlok
menten a sorindex (i) es
oszlopindex (j) különbsege
allando:







mellekatloval parhuzamos atlok
menten a sorindex (i) es
oszlopindex (j) összege allando:



Szimmetriapontok.

0 1 ... n-1
0


1


.
.
.






n-1



i+j=0
i+j=n-1
i+j=2n-2
i,j

0 1 ...

n-1
0


1


.
.
.












n-1



a Iüggóleges
szimmetriatengelyre
szimmetrikus elem:
i,n-1-j
a mellekatlora
szimmetrikus elem:
n-1-j,n-1-i
a vizszintes
szimmetriatengelyre
szimmetrikus elem:
n-1-i,j
a szimmetria-
közeppontra
szimmetrikus elem:
n-1-i,n-1-j
a Ióatlora
szimmetrikus elem:
j,i
100
6. Többdi menziós tömbök

z egy- illetve ketdimenzios tömbökhöz hasonloan, deIinialhatok harom-, negy-,
altalanosan n-dimenzios tömböket is.
tömb-deIinialas altalanos szintaxisa:
<elem_típus <név¯<méret_1`¯<méret_2`...¯<méret_n`;
méret_i, az i-edik dimenzio iranyaba az elemszam
tömb valamely elemere valo hivatkozas szintaxisa:
<név¯<index_1`¯<index_2`...¯<index_n`

egoldott feladatok.
1.) dott egy n L m meretú matrix egy matrix.be nevú szöveges allomanyban. z elsó
sor tartalmazza az n es m ertekeit, a következók pedig a matrix egy-egy sorat (egy sor
elemei szoközzel vannak elvalasztva). Iriuk ki a kepernyóre a matrix nveregpontiainak
indexeit. Egy pont akkor tekinthetó nyeregpontnak, ha soranak minimuma, oszlopanak
pedig maximuma.
Ctlet. Összeallitunk egy min, illetve egy max nevú egydimenzios tömböt. min¯i`
elemben eltaroliuk a matrix i-edik sora minimumanak oszlopindexet, a max¯j`-ben
pedig a j-edik oszlop maximumanak sorindexet. z i-edik sor minimuma akkor
nyeregpont, ha i=max¯min¯i``.
FILE·f;
int a¯50`¯50`,min¯50`,max¯50`,n,m,i,j,volt;
f=fopen(°matrix.be¨, °r¨;
fscanf(f, °%d%d¨, &n, &m;
for(i = 0;i < n; i ++
for(j = 0;j < m; j ++
fscanf(f, °%d¨, &a¯i`¯j`;
fclose(f;
/· soronkénti bejárás ·/
for(i = 0;i < n; i ++

min¯i`=0;
for(j = 1;j < m; j ++
if(a¯i`¯j`<a¯i`¯min¯i``min¯i`=j;
·
/· oszloponkénti bejárás ·/
for(j = 0;j < m; j ++

max¯j`=0;
for(i = 1;i < n; i ++
if(a¯i`¯j`a¯max¯j``¯j`max¯j`=i;
·
volt=0;
for(i = 0;i < n; i ++
if(i==max¯min¯i``

printf(°(%d,%d=%d\n¨,i,min¯i`,a¯i`¯mim¯i``;
volt=1;
·
if(!voltprintf(°Nincs nyeregpont!¨;
101

2.) dott n mondat egy bementi allomanyban (mondat.be). z elsó sor tartalmazza az
n erteket, a következók pedig egy-egy mondatot. Iriuk ki a mondatokat a mondat.ki
kimeneti allomanyba, BC sorrendben.
Ctlet. mondatokat egy ketdimenzios karaktertömb egy-egy soraban taroliuk el.

3.) dott egy negyzetes matrix a szokasos modon a be.txt bemeneti allomanyban.
Iriuk ki a kepernyóre az elemeit az abra szerinti beiarasi sorrendnek megIelelóen.
FILE·f,·g;
char a¯50`¯50`,v¯50`;
int n,i,j;
f=fopen(°mondat.be¨, °r¨;
g=fopen(°mondat.ki¨, °w¨;
fscanf(f, °%d¨, &n;
fgetc(f;/·kiolvassa az n értéke utánni újsor karaktert·/
for(i = 0;i < n; i ++
fgets(a¯i`, sizeof(a¯i`, f;
fclose(f;
/· rendezés soronként ·/
for(i = 0;i < n-1; i ++

for(j = i+1;j < n; j ++
if(strcmp(a¯i`,a¯j`0

strcpy(v,a¯i`;
strcpy(a¯i`,a¯j`;
strcpy(a¯j`,v;
·
·
for(i = 0;i < n; i ++
fputs(a¯i`, g;
fclose(g;
FILE·f; int a¯50`¯50`,n,i,j,k;
f=fopen(°be.txt¨, °r¨;
fscanf(f, °%d¨, &n;
for(i = 0;i < n; i ++
for(j = 0;j < n; j ++
fscanf(f, °%d¨, &a¯i`¯j`;
fclose(f;
/· átlónkénti bejárás ·/
for(k = 0; k <= 2·n-2; k ++
if(k<=n-1 /·melékátló felett·/
for((k%2 . (i=0,j=k : (j=0,i=k;
i=0 && j=0;
(k%2 . (i++,j-- : (j++,i--
printf(°%d ¨,a¯i`¯j`;
else /·mellékátló alatt·/
for((k%2 . (j=n-1,i=k-j : (i=n-1,j=k-i;
i<n && j<n;
(k%2 . (i++,j-- : (j++,i--
printf(°%d ¨,a¯i`¯j`;


















102
Kitúzòtt feladatok.
( következó Ieladatok eseteben az adatokat allomanybol olvassuk be.)

1) Egy x M meretú matrixot a V¯0 .. N·M-1` tömbben tarolunk el sorIolytonosan.
Tegyük Iel, hogy a matrix i-edik soranak j-edik eleme a tömb k-adik pozicioiaba kerül
(a sorokat illetve oszlopokat 0-tol kezdódóen szamozzuk).
a. Feiezzük ki k-t, i es j Iüggvenyeben!
b. diuk meg i-t illetve j-t, k Iüggvenyeben!
c. Ha N=M, akkor milyen tömbpoziciokba kerülnek a Ióatlo elemei? (altalanosan
Iogalmazd meg)
d. Ha N=M, akkor a matrix mely elemei kerülnek a tömb azon pozicioiba, amelyek
indexeinek N-el valo osztasi maradeka maximalis? (altalanosan Iogalmazd meg)
2) Iriunk programot, amely beolvas egy 5 L 5-ös matrixot, es kiiria az ugynevezett
tükörmatrixat. tükörmatrix elemeit az eredeti matrixelemek Ióatlora tükrözesevel
kapiuk. tükörmatrix az eredeti helyen kepzódiön.
3) dott egy n L n meretú matrix, amely különbözó egesz szamokat tartalmaz.
Ellenórizzük, hogy búvös negyzet-e. búvös negyzet minden soranak es
oszlopanak, valamint atloinak összege azonos.
4) Töltsünk Iel egy n L n meretú tömböt a következó ielentesú szamharmasok alapian:
sorindex (egesz szam az |1, n| intervallumbol)
oszlopindex (egesz szam az |1, n| intervallumbol)
ertek (valos szam)
beolvasas 0 vegielig tart.
program a sorindex es oszlopindex ellenórzese utan az altaluk meghatarozott
helyre iria az erteket. Felüliras nem megengedett! tömb többi eleme 0 legyen.
5) Egy veletlenszerúen Ieltöltött nxn meretú karaktermatrix sorait alkoto karakterekból
epitsünk karakterlancokat, maid ezeket Iúzzük össze betúrendi sorrendbe, szoközzel
elvalasztva.
6) Egy allomanybul kiolvasott negyzetes karaktermatrix Ió- es mellekatloin talalhato
karakterekból epitsünk karakterlancokat. Vizsgaliuk meg, hogy ezek tükörszavak-e,
illetve, hogy anagrammak-e.
7) dott n, m es egy n L m-es matrix. Döntsük el, hogy tartalmaz-e egynel több nullat a
Ióatlo Ielett vagy a mellekatlo alatt.
8) Olvassunk be egy negyzetes matrixot, amely valos szamokat tartalmaz. Allitsuk eló
azt a matrixot amelyet ugy nyerünk, hogy minden elemet helyettesitiük a Iloat
tipusnak megIeleló belsó abrazolas 0-as es 1-es bitiei szamanak különbsegeivel.
9) dott egy matrix. Ellenórizzük mely sorai vannak növekvó sorrendben, es mely
oszlopai csökkenóben.
10)dott egy matrix. Rendezzük a sorait külön-külön növekvó sorrendbe.
11)dott egy matrix. Rendezzük az oszlopait külön-külön csökkenó sorrendbe.
12)dott egy matrix. Rendezzük at az elemeit ugy, hogy sorIolytonos beiaras szerint
csökkenó sorrendben legyenek.
103
dott egy matrix. Iriuk ki az elemeit csigabeiaras, illetve Iorditott csigabeiaras
szerint. Oldiuk meg a Ieladatot egyetlen ciklus-utasitast hasznalva a beiarashoz.
Iriunk programot, amely kiszamitia egy n-ed rendú determinans erteket.
Ctlet: a Ióatlo alatt kepezzük nullakat (Gauss modszer).
15)Iriunk programot, amely egy iterativ algoritmus reven -hasznalva egy megIeleló c
tömböt- kiszamitia,

a.) a c¯1`¯n` erteket az alabbi keplet alapian:
c¯i`¯i` = 0, bármely iZ1, 2, ..., n·

c¯i`¯j` = min c¯i`¯k`+c¯k+1`¯j`+d¯i-1`·d¯k`·d¯j`·
i<=k<j
bármely i,jZ1, 2, ..., n· és i<j; ahol ismert a
d¯0..n` tömb tartalama

b.) a c¯n`¯m` erteket az alabbi keplet alapian:
c¯i`¯0` = 0, bármely iZ1, 2, ..., n·
c¯0`¯j` = 0, bármely jZ1, 2, ..., m·

c¯i`¯j` = c¯i-1`¯j-1`+1 ha a¯i`=b¯j`
c¯i`¯j` = min c¯i-1`¯j`, c¯i`¯j-1`· ha a¯i`b¯j`
bármely iZ1, 2, ..., n· és jZ1, 2, ..., m·;
ahol az a¯1..n` és b¯1..m` tömbök tartalama
ismertnek tekintendó

c.) a max ¦c¯k`· erteket az alabbi keplet alapian:
1<=k<=n
c¯n` = 1
c¯i` = max 1+c¯j`|a¯i`<=a¯j`·
j=i+1,n
bármely iZ1, 2, ..., n-1·; ahol ismert az a¯1..n`
tömb tartalama

15) dott egy negyzetes matrix. Szamitsuk ki a determinansa erteket!
104
7 Dinami kus heI yfogIaIás

Feladataink bemenó adatai gyakran szamsorozatok vagy matrixok voltak,
amelyeket egy- illetve ketdimenzios tömbökbe kellett eltaroliunk. Hogyan hataroztuk
meg ezek mereteit? Mivel a szamsorozat elemszama (n), illetve a matrix merete (n L m)
csak programIutas közben, az n, illetve az n es m beolvasasa utan derült ki, ezert a
tömböknek olyan meretet irtunk eló, hogy a .legrosszabb esetben¨ is eleg nagyok
legyenek. Ha lehetóseg lenne programIutas közben letrehozni valtozokat, sokkal
gazdasagosabba ki lehetne hasznalni ilyen esetekben a memoriat. Eppen ezt a
szüksegletet elegitik ki a dinamikus valtozok. dinamikus helyIoglalasra a memoria
Heap-nek nevezett reszen kerül sor.
dinamikus helyIoglalast a malloc, calloc es a realloc Iüggvenyek vegzik, a
helyIelszabaditast pedig a free.
Szintaxisuk.
void· malloc(<méret bájtban;
LeIoglalia a megadott meretú memoriaterületet es visszateriti a cimet mint
void-pointert.

void· calloc(<elemszám, <elemméret bájtban;
LeIoglal es lenullaz <elemszám·<elemméret meretú memoriaterületet
es visszateriti a cimet mint void-pointert.

void· realloc((<átméretezendó blokk címe, <új méret bájtban;
Atmeretez egy malloc-al vagy calloc-al elózóleg leIoglalt
memoriaterületet. Terület növeles eseten elóször megprobalia kiterieszteni
a ielenlegi blokkot. Ha ez nem lehetseges, akkor ui területet Ioglal le (a
regit Ielszabaditia), ahova atmasolia a ielenlegi terület tartalmat.
Visszateriti az ui meretú blokk cimet, ami különbözhet az eredeti cimtól.

free(<cím;
Felszabaditia a megadott cimen levó memoriaterületet. Fontos, hogy egy
malloc vagy calloc Iüggveny altal megadott cimet kapion a free
Iüggveny.

egiegvzesek.
O malloc es calloc között az alapvetó különbseg az, hogy az elsó mint
egyetlen blokk, a masodik pedig mint adott szamu blokk kapia meg a
leIoglalando terület meretet.
O dinamikus helyIoglalast kezeló Iüggvenyek prototipusait a stdlib.h header
allomany tartalmazza, ezert hasznalatuk szüksegesse teszi az
#include<stdlib.h programsort.
105

Peldak:
Hozzunk letre dinamikusan egy n elemú int tipusu tömböt, maid szabaditsuk Iel
a leIoglalt területet.
Elsó megoldas:
int n, ·p;
scanf(¨%d¨, &n;
p=(int·malloc(n·sizeof(int;
...
free(p;
Masodik megoldas:
int n, ·p;
scanf(¨%d¨, &n;
p=(int·calloc(n, sizeof(int;
...
free(p;
egiegvzes. Emlekezzünk ra, hogy a p pointer hasznalhato a tömb nevekent,
tehat hivatkozhatunk a tömb elemeire a megszokott modon, indexelessel. Peldaul:
p¯0`, p¯1`, p¯i`, p¯n-1`

z alabbi peldak azt mutatiak be, hogyan törtenhet a dinamikus helyIoglalas bizonyos
esetekben, es hogyan hivatkozhatunk a letreiött dinamikus valtozora, illetve az elemeire
(tömbök eseten).

Dinamikus double valtozo:
double· p;
p=(double·malloc(sizeof(double;

Hivatkozas: ·p

Dinamikus helyIoglalas konstans elemszamu egydimenzios tömb szamara:
#define N 100
double· p;
p=(double·malloc(N·sizeof(double;

Hivatkozas a tömb elemere: p¯i`

Dinamikus helyIoglalas n elemú egydimenzios tömb szamara:
int n;
double· p;
scanf(¨%d¨, &n;
p=(double·malloc(n·sizeof(double;

Hivatkozas a tömb elemere: p¯i`

Dinamikus helyIoglalas konstans meretú ketdimenzios tömb szamara:
#define N 100
106
#define M 100
double(·p¯M`;
p=(double(·¯M`malloc(N·M·sizeof(double;

Hivatkozas a tömb elemere: p¯i`¯j`

Dinamikus helyIoglalas n soros de konstans oszlopszamu ketdimenzios tömb szamara:
#define M 100
int n;
double(·p¯M`;
scanf(¨%d¨, &n;
p=(double(·¯M`malloc(n·M·sizeof(double;

Hivatkozas a tömb elemere: p¯i`¯j`

Dinamikus helyIoglalas nLm meretú ketdimenzios tömb szamara:
Elsó megoldas (ugy Iogiuk Iel mint egy dimenzios tömböt):
int n,m;
double· p;
scanf(¨%d%d¨, &n, &m;
p=(double·malloc(n·m·sizeof(double;

Hivatkozas a ketdimenzios tömb (i,j elemere: p¯i · m + j`
Forditva, ha k egy elem indexe az egydimenzios tömbben, akkor ennek a
ketdimenzios tömbbeli indexei: i=k/m, j=k%m

Masodik megoldas (letrehozunk egy n elemú double-pointer tömböt, amelynek
minden eleme mutat egy m elemú double tömbre):
int n,m,i;
double ·· p;
scanf(¨%d%d¨, &n, &m;
p=(double··malloc(n·sizeof(double·;
for(i=0;i<n;i++
p¯i`=(double·malloc(m·sizeof(double;

Hivatkozas a ketdimenzios tömb (i,j elemere: p¯i`¯j`

z abrak szemleletesen mutatiak be az utolso pelda ketIele megoldasat:
. . . . . . . . . . . .
0 n-1 n 2 n-1 k n m-1

p
p¯i·m+j`
i=k/m
j=k%m
107


egiegvzesek.
O hhoz, hogy .igazi¨ ketdimenzios tömböt tudiunk letrehozni dinamikusan,
szükseges az oszlopszam rögzitese (konstansnak kell lennie). Ez azert van igy
mert egy .igazi¨ ketdimenzios tömb neve csakis egy olyan pointer lehet, amely a
tömb 0-dik sorara mutat, tehat a tipusa tartalmazza az oszlopszamot.
O z utolso peldaban különbözó trükkökhöz Iolyamodtunk, hogy nLm meretú
ketdimenzios tömböt hozzunk letre. z elsó megoldas elónye, hogy nem igenyel
plusz memoriaterületet, hatranya viszont, hogy nehezkesen lehet hivatkozni a
tömb elemeire. masodik megoldas eseten a klasszikus modon tudunk
hivatkozni az elemekre de n mutatonyi memoriaterületet pluszban Ioglaltunk le.
masodik megoldas egy masik elónye, hogy a sorok nem Iöltetlenül kell
egyIorma hosszuak legyenek.


Feladat.
dott n darab különbözó hosszusagu szamsorozat a sorozat.be szöveges allomanyban,
amelyeknek elemei egesz szamok. Haladiunk vegig a szamsorozatokon a következó
algoritmus szerint
O Indulunk az elsó szamsorozat elsó elemetól.
O Ha pozitiv elemen allunk, akkor iobbra lepünk, ha negativon akkor balra.
O Ha nullas elemhez iutottunk, vagy kiertünk a szamsorozat valamelyik vegere,
akkor atlepünk a következó szamsorozat ugyanazon indexú elemere (amennyiben
ez letezik), ahol hasonlo modon iarunk el.
Iriunk programot, amely eldönti, hogy ki lehet-e iutni a Ienti algoritmus szerint a
szamsorozatokbol, es ha igen, hany lepest igenyel a kiiutas.

Pelda:
p|0|
p|1|

p|i|

p|n-1|








p
p¯i`¯j`
p¯n-1`¯m-1`
-3 4 0 2
2 4 7 0 8 3 -7
1 -9 5 0 4 4
-9 -1 -1 -1 1 1 1

108





Magyarazat:
O n a szamsorozatok szama
O z N dinamikus tömbben taroltam a szamsorozatok hosszait.
O p egy n elemú dinamikusan letrehozott pointertömb, amelynek elemei azokra a
dinamikus tömbökre mutatnak, ahol a szamsorozatok eltarolasra kerültek.
p¯i` cimú (nevú) tömb N¯i`elemszamu.
O k-ban szamoliuk a lepeseket
O kem valtozo Iigyeli, nem kerültünk-e olyan helyzetbe, amelyet vegtelen ide-
oda lepegetes követne.
O i az aktualis szamsorozat sorszama
O j az aktualis sorban az aktualis elem oszlopszama
FILE·f;
int *N,**p,n,i,j,k,kem;
f=fopen(°sorozat.be¨, °r¨;
fscanf(f, °%d¨, &n; /· n-a sorozatok száma ·/
N=(int*)malloc(n*sizeof(int));
p=(int**)malloc(n*sizeof(int*));
for(i = 0;i n; i ++)

fscanf(f, °%d¨, &N¯i`;
p[i]=(int*)malloc(N[i]*sizeof(int));
for(j = 0;j < N¯i`; j ++
fscanf(f, °%d¨, &p¯i`¯j`;
·
fclose(f;
i=j=k=kem=0;
while(i<n

if(!j&&p¯i`¯j`<0||j==N¯i`-1&&p¯i`¯j`0||!p¯i`¯j`
i++; k++; if(j=N¯i`kem=1;break;··
if(j0&&p¯i`¯j`<0&&p¯i`¯j-1`0||
j<N¯i`-1&&p¯i`¯j`0&&p¯i`¯j+1`<0kem=1;break;·
else p¯i`¯j`0.j++:j--; k++;·
·
if(kem==1puts(°Nincs megoldás!¨;
else printf(°%d lépés¨, k;
for(i = 0;i n; i ++) free(p[i]);
free(p);free(N);
109
FeI hasznáI ó áI taI defini áIt tí pusok

. A typedef módosító jeI zõ
typedef nem hoz letre ui tipust, csupan atnevez vagy nevet ad egy tipusnak.
Ha egy valtozodeIinialas ele odairiuk a typedef-et akkor azt tipusdeIinialassa
valtoztatia.
Szintaxisa:
typedef <típus <azonosító;
Peldak:
int egesz; /* az egesz egy int tipusu valtozo */
typedef int egesz; /* az egesz egy tipus, az int tipus egy uiabb neve */
egesz x; int y; /* ugy x, mint y int tipusu valtozo */
typedef float · FLJATPTR;
FLJATPTR fp; /* fp, float-pointer-valtozo */
typedef int IVEKTJR¯10`;
IVEKTJR a; /* a, 10 elemú int egydimenzios tömb-valtozo */
typedef double DMATRIX¯10`¯20`;
DMATRIX b; /* b, 10 L 20-as double tömb-valtozo */

mint a Ienti peldakbol is kiderül, a typedef igazi haszna abban all, hogy nevet
adhatunk altala az összetett tipusoknak. Eddig egyetlen összetett tipussal ismerkedtünk
meg, a tömbtipussal. Következzenek a C nyelv mas összetett tipusai.

.2 A struct típus

Tegyük Iel, hogy egy szemely adatait (peldaul, nev: agy Peter, eletkor: 35,
magassag: 1.82) szeretnenk eltarolni. Termeszetesen deIinialhatnank ebból a celbol
harom valtozot. Mivel egy szemely neve karakterlanc, eletkora termeszetes szam es
magassaga meterben kiIeiezve valos szam, ezek a valtozok lehetnenek, peldaul:
char nev¯30`;
unsigned eletkor;
float magassag;

Ienti megoldasnak az a hatranya, hogy nem tükrözódik benne az, hogy a harom adat
összetartozik, ugyanannak a szemelynek az adatai.
Harom elemú tömb szoba sem iöhet, hiszen egy tömb elemeibe csakis azonos tipusu
adatok tarolhatok el.

Mi a megoldas? struct tipus!
struct tipus egy összetett tipus, amelynek elemeit mezóknek nevezzük, es
ezekbe különbözó tipusu adatok is eltarolhatok.
110
Egy struct tipusu valtozo deIinialasanak szintaxisa:
struct

<típus_1 <mezó_1;
<típus_2 <mezó_2;
. . .
<típus_n <mezó_n;
· <változó_lista;

Egy struct valtozo valamely mezóiere valo hivatkozas szintaxisa:
<struct_változó.<mezó

Egy struct valtozo tarhely igenye a mezói tarhely igenyeinek összege.

Egy szemely adatainak beolvasasa egy struct valtozoba:
struct

char nev¯30`;
unsigned eletkor;
float magassag;
· sz;
printf(°A neve: ¨; gets(sz.nev;
printf(°Az életkora: ¨; scanf(°%d¨, &sz.eletkor;
printf(°A magassága: ¨; scanf(°%f¨, &sz.magassag;

Celszerú elnevezni a letrehozott struct tipusokat, hogy hivatkozni lehessen raiuk.
struct tipus kapcsos zaroielek köze irt mezóleirasa cimkevel lathato el az alabbi
modon:
struct <címke

<típus_1 <mezó_1;
<típus_2 <mezó_2;
. . .
<típus_n <mezó_n;
· ¯<változó_lista`;

telies struct tipus nevet kaphat a typedef alkalmazasa altal:
typedef struct

<típus_1 <mezó_1;
<típus_2 <mezó_2;
. . .
<típus_n <mezó_n;
· <típus_azonosító;

Peldak a cimkezes, es typedef alkalmazasara:
struct aru

unsigned kod, ar;
char nev¯25`;
· v1 ,v2, v3;
struct aru v4, v5¯100`;
111
typedef struct

char nev¯30`, tel¯15`;
· szemely;
szemely ·v, temp;
int n, i, j, cseresz, vege;
FILE· f = fopen(°szemely.dat¨, °r¨;
FILE· g = fopen(°nevsor.dat¨, °w¨;
/· helyfoglalás és beolvasás ·/
fscanf(f, °%d¨, &n; fgetc(f;
v = (szemely·malloc(n · sizeof(szemely;
for(i = 0; i < n; i++

fgets(v¯i`.nev, sizeof(v¯i`.nev, f;
fgets(v¯i`.tel, sizeof(v¯i`.tel, f;
·
fclose(f;
/· buborékos rendezés ·/
vege=n;
do

vege--;
cseresz=0;
for(i=0;i<vege;i++

if (strcmp(v¯i`.nev, v¯i+1`.nev 0

cseresz=1;
temp=v¯i`;
v¯i`=v¯i+1`;
v¯i+1`=temp;
·
·
· while (cseresz;
/· kiíratás ·/
for(i = 0; i < n; i++

fprintf(g, °%d. %s: %s\n¨,
i+1, v¯i`.nev, v¯i`.tel;
·
fclose(g;

typedef struct

char marka¯20`;
char tipus¯15`;
char szin¯10`;
unsigned long ar;
· auto;
auto a, b¯50`;

egiegvzes.
O Mivel aru csupan a mezóleirast cimkezi ezert az elsó struct tipus azonositoia
struct aru. masodik esetben auto a telies tipus azonositoia.


Feladat.
dottak n szemely
adatai (nev, teleIonszam)
egy szemely.dat
bemeneti allomanyban.
Hozzunk letre egy
nevsor.dat kimeneti
allomanyt, amely nevsor
szerint, sorszamozva
tartalmazza a szemelyek
adatait.

szemely.dat
strukturaia:
<n
<név_1
<telefonszám_1
<név_2
<telefonszám_2
. . .
<név_n
<telefonszám_n


nevsor.dat strukturaia:

1. <név: <telefon
2. <név: <telefon
. . .
n. <név: <telefon

112
struct-ok egymasba is agyazhatok. Ezt mutatia be az alabbi Ieladat.
Feladat.
dott n szemely neve es cime egy bemeneti allomanyban, amelynek nevet a
billentyúzetról olvassuk be. Iriuk ki a kepernyóre a marosvasarhelyiek szamat.
bemeneti allomany strukturaia:
<n
<név_1
<város_1 <utca_1 <házszám_1
<név_2
<város_2 <utca_2 <házszám_2
. . .
<név_n
<város_n <utca_n <házszám_n



z alabbi abra szemleletesen mutatia be mikent hivatkozhatunk a v struct-
tömbben eltarolt adatokra:



struct cim

char varos¯30`, utca¯25`;
int hszam;
·;
typedef struct

struct cim c;
char nev¯30`;
· szemely;
szemely ·v;
int n, i, k;
FILE· f;
char all_nev¯30`;
puts(°Ird be a bemeneti álomány nevét:¨;
gets(all_nev;
f = fopen(all_nev, °r¨;
fscanf(f, °%d\n¨, &n; fgetc(f;
v = (szemely·malloc(n · sizeof(szemely;
for(i = 0; i < n; i++

fgets(v¯i`.nev, sizeof(v¯i`.nev, f;
fscanf(f, °%s%s%d¨, v¯i`.c.varos, v¯i`.c.utca, v¯i`.c.hszam;
fgetc(f;
·
fclose(f;
k = 0;
for(i = 0; i < n; i++
if (!strcmp(v¯i`.c.varos, °Marosvásárhely¨ k++;
printf(°A marosvásárhelyiek száma: %d¨, k;
113
. . . . . .
. . .
. . .
. . . . . . . . .

. . . . . . . . .
v|0| v|1| v|n-1|



. 2. A struct - poi nterek

következó pelda összeIoglalia mikent lehet hivatkozni egy struct valtozo
cimere, hogyan deIinialunk struct-pointereket, es milyen modokon hivatkozhatunk
struct-pointer segitsegevel a strukturak mezóire.
z alabbi peldaban beolvassuk egy osztaly tanuloinak szamat, valamint az oszi nevet
egy struct valtozoba (v1), keszitünk erról egy masolatot egy masik struct valtozoba
(v2), maid kiiriuk az adatokat a kepernyóre.
struct osztaly

int letszam;
char oszi¯30`;
· v1, ·p1; /* p1, struct osztaly pointer */
struct osztaly v2, ·p2 =&v2; /*p2, struct osztaly pointer,
amely v2-re mutat*/
p1 = &v1; /* p1, v1-re Iog mutatni */
puts(¨Ird be a létszámot:¨;
scanf(¨%d¨, &v1.letszam;
puts(¨Ird be az oszi nevét:¨;
gets((·p1.oszi;
(·p2 = v1; /*masolatot keszitünk v1-ról
a p2 cimú strukturaba, azaz v2-be*/
printf(¨A létszám: %d\nAz oszi: %s¨, p2-letszam, p2-oszi;

Tehat, egy struktura mezóire, a ra mutato pointer segitsegevel, az alabbi modokon
hivatkozhatunk:
<pointer - <mezó vagy (·<pointer . <mezó

Feladat.
Legyenek az alabbi deIinialasok:
typedef struct int a,b;· tipus1;
typedef struct tipus1 c¯50`;· tipus2;
tipus2 x, ·p = &x;
Hogyan hivatkozhatunk az x struktura c mezóienek, 25-dik elemenek a b mezóiere?


v|0|.c v|1|.nev
v|n-1|.c.varos
v|n-1|.c.utca|1| v|n-1|.c.hszam
v|n-1|.nev|29|
114
egoldasok.
1. x.c¯25`.b
2. (·p.c¯25`.b
3. p-c¯25`.b
4. (·((·p.c+25.b
5. (p-c+25-b

. 2. 2 i tmezõk
C nyelv egy különleges lehetósege, hogy megadhato, hany biten legyenek
tarolva egy struct valtozo egyes mezói.
bitmezóket szüksegszerúen int, unsigned vagy signed tipusuaknak kell
deIinialnunk (egyes Iorditok csak az unsigned tipust engedik meg). z 1 bit hosszu
bitmezóknek termeszetesen unsigned tipusuaknak kell lenniük hiszen egy biten nincs
lehetóseg külön elóielbitet is tarolni.

Legyen az alabbi pelda:
struct cimke

unsigned a:5; /· 5 biten tárolt elójelnélkuli egész ·/
signed b:4; /· 4 biten tárolt elójeles egész ·/
unsigned c:1; /· 1 biten tárolt elójelnélkuli egész ·/
int d:10; /· 10 biten tárolt elójeles egész ·/
· x;

Ient deIinialt x valtozo tarhely igenye 3 byte (sizeof(x=3, amelyból a mezói
eIIektiv 20 bitet hasznalnak ki. Ezt szemlelteti az alabbi abra, amennyiben a bitmezók
sorrendie iobbrol-balra:

z x.a = 0; x.b = -1; x.c = 0; x.d = -1; ertekadasok utan, x belsó
abrazolasa:


memoria
. . .



. . .

x.a
x.b
x.c
x.d
kihasznalatlan

23 . . . 2 1 0

1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0
23 . . . 2 1 0

115
Altalanos szintaxis:
struct

<típus_1 <mezó_1:<hossz_1;
<típus_2 <mezó_2:<hossz_2;
. . .
<típus_n <mezó_n:<hossz_n;
· <változó_lista;

bitmezók hasznalatanak elónyeit a következókeppen lehetne összeIoglalni:
O memoria takarekossag
O bit szinten kodolt inIormaciok Ieldolgozasa
O a memoriahoz bit szinten valo hozzaIeres
Bar mindez megvalosithato bitmúveletekkel is, a bitmezók alkalmazasa növeli a
program attekinthetóseget es hatekonysagat.

egiegvzesek.
O Egy struct valtozonak vegyesen lehetnek bitmezói es nem bitmezói.
O em lehet hivatkozni egy bitmezó cimere.
O bitmezók nem rendezhetók tömbökbe.
O Geptól Iügg, hogy a bitmezók iobbrol-balra vagy balrol-iobbra sorrendúek.

most következó, unionokkal Ioglalkozo resz vegen talalhato Ieladat bemutatia, mikent
elhetünk a bitmezók nyuitotta lehetósegekkel.
116

union

unsigned long x;
float y;
· a;
puts(°Ird be a természetes számot¨;
scanf(°%lu¨, &a.x;
printf(°A megfeleló valós szám: %f¨, a.y;
. A union típus
struct tipus esten a mezók egymasutan kerülnek eltarolasra. union tipust
pontosan ugy deIinialiuk mint a struct-ot, csakhogy mezói egymasra tevódnek. Ugy is
mondhatnank, hogy a mezók együtt hasznaliak ugyanazt a memoria területet. z alabbi
abrak iol erzekeltetik a különbseget:


Egy union valtozo tarhely igenyet nyilvan a legnagyobb meretú mezóie
hatarozza meg. Peldaul az u valtozo merete 4 byte lesz (sizeof(float. z elsó 2
byte-ra, mint short tipusu mezóre, u.a-val hivatkozhatunk. z u.b hivatkozas mind a
4 byte-ra, mint float tipusu adatra utal.
union tipus segitsegevel erdekes tipuskonverziok valosithatok meg.

z alabbi Ieladatok a union tipus gyakorlati erteket emelik ki.

. feladat.
dott egy
termeszetes szam. Melyik
az a valos szam,
amelynek float
tipusukenti belsó
abrazolasa azonos az
illetó termeszetes szam
unsigned long-kenti
belsó abrazolasaval?


struct

short a;
float b;
· st;


&st, &st.a
st.a

&st.b
st.b






union

short a;
float b;
· u;


&u, &u.a, &u.b
u.a
u.b






}
}
117
typedef union

unsigned char x¯10`;
long double y;
· u_type;
u_type a; int i;
puts(°Ird be a valós számot:¨;
scanf(°%Lf¨, &a.y;
puts(°A belsó ábrázolás hexában:¨;
for(i = 9; i = 0; i--
printf(°%02X¨, (inta.x¯i`;
/· két karakterpozición ír ki, 0-val pótolva
balról ha az érték egy hexa-számjegyu ·/
/· feltételezzuk, hogy a bitmezók sorrendje és
az év, hó, nap kódbeli sorrendje talál ·/
typedef struct

unsigned ev:7;
unsigned ho:4;
unsigned nap:5;
· datum;
typedef union

unsigned short kod;
datum d;
· szemely;
struct

unsigned m:1; /· van-e majusi ·/
unsigned h:6; /· hanyan hetvenesek ·/
unsigned j1:1; /· van-e januar elsei ·/
· v;
szemely p¯50`;
int n,i;
v.m = v.h = v.j1 = 0;
scanf(°%d¨, &n;
for(i = 0; i < n; i++

scanf(°%hu¨, &p¯i`.kod;
if(p¯i`.d.ho == 5 v.m = 1;
if(p¯i`.d.ev = 70 && p¯i`.d.ev < 80 v.h++;
if(p¯i`.d.ho == 1 && p¯i`.d.nap == 1 v.j1 = 1;
·
if(v.m puts(°Van majusi!¨;
else puts(°Nincs majusi!¨;
printf(°%hu szemely hetvenes\n¨, v.h;
if(v.j1 puts(°Van januar elsei!¨;
else puts(°Nincs januar elsei!¨;


2. feladat.
dott egy valos
szam, amit long
double-kent tarolunk
el. Iriuk ki a belsó
abrazolasa 10 byte-iat
hexadecimalisan.

z alabbi Ieladat celia, hogy összeIoglalia a strukturak, bitmezók, illetve unionok
hasznalatanak egyes elónyeit.
3. feladat.
Olvassunk be a billentyúzetról n (n<=50 termeszetes szamot az unsigned
short tartomanybol, amelyek unsigned short tipusukenti belsó abrazolasuk
szemelyek születesi datumainak kodiai, a következókeppen:

7 bit az ev utolso
ket szamiegye
4 bit a honap
5 bit a nap


Ellenórizzük van-e a
szemelyek között
maiusi születesú,
hanyan születtek a
hetvenes evekben, es
született-e valaki
ianuar elseien.
118
Kitúzòtt feladatok.

1) dott n szemely neve, cime (varos, utca, hazszam) es teleIonszama egy bemeneti
allomanyban. Iriuk at egy kimeneti allomanyba nevsor szerint a budapestiek nevet es
teleIonszamat (a rendezest egy pointertömb segitsegevel valositsuk meg anelkül,
hogy eIIektiv rendeznenk a struct tömböt, ahova a szemelyek adatait beolvastuk).
2) dott n szemely neve, k tantargy es mindeniknek minden tantargybol az atlaga. Iriuk
ki nevsor szerint a szemelyek nevet es mindeniknek az atlagat csökkenó sorrendben.
3) Milyen erteket ir ki az alabbi programreszlet? Feltetelezzük, hogy a char 1 baiton, a
long pedig 4 baiton van tarolva.
union elemchar b¯4`; long c;·x;
x.c = 0;
x.b¯0`^=1;
x.b¯1`|=1;
x.b¯2`^=1;
x.b¯3`|=1;
printf(°%ld¨,x.c;
4) Milyen erteket ir ki az alabbi programreszlet? Feltetelezzük, hogy a unsigned char 1
baiton, a unsigned long pedig 4 baiton van tarolva.
union elemunsigned char b¯4`; unsigned long c;·x;
x.c = 0;
x.b¯0`^=1;
x.b¯1`&=1;
x.b¯2`&=2;
x.b¯3`|=1;
printf(°%ld¨,x.c;
5) Legyen az alabbi C programreszlet.
typedef struct float b¯77`; int a;· elemke;
elemke w¯77`, ·q = w+1;
a) Hivatkozz w utolso elemenek, elsó mezóienek, utolso elemere.
b) Allitsd a q cimen levó stuctura, masodik mezóienek, legkisebb helyertekú bitiet 1-
re.
c) Hany bait memoria terület kerül leIoglalasra a Ienti deIiniciok nyoman?
6) Legyen az alabbi C programreszlet.
typedef struct int a; double b¯100`;· elem1;
typedef struct int c; elem1 d¯100`;·elem2;
elem2 v¯100`, ·p = v;
a) Hivatkozz v utolso elemenek, masodik mezóienek, utolso elemenek, elsó mezóiere.
b) Hivatkozz a p cimen levó stuctura, masodik mezóienek, utolso elemenek, masodik
mezóienek utolso elemere.
7) dott n szemely neve, teleIonszama, születesi datuma es helye, valamint lakcime.
a) Iriuk ki a neveket es születesi datumokat születesi datum szerint csökkenó
sorrendben (azonos ev eseten vegyük Iigyelembe a honapot, ...).
b) Hanyan laknak a szülóvarosukban?
c) Kiknek ielenik meg a teleIonszamukban a hazszamuk?
8) dott n szemely neve es neme.
119
a) Lehetseges-e óket parositani egy tanchoz, es ha igen adiunk meg egy ilyen
parositast.
b) diuk meg azt a parositast, amelyben a lehetó legtöbb Jancsi es Juliska, illetve
Csongor es Tünde paros van.
9) dott ket bemeneti allomany. z egyik tartalmazza n orszag nevet es Ióvarosat, a
masik m Ióvarost es lakosainak szamat. Keszitsünk kimutatast egy kimenet i
allomanyba azon orszagokrol es Ióvarosaik lakossagarol, amelyek eseteben
rendelkezünk ezekkel az adatokkal.
10)dott egybemeneti allomanyban m tanulo neve es ezek osztalyIónökei. Keszitsünk
kimutatast egy kimeneti allomanyban arrol, hogy az egyes osztalyIónököknek hany
diakiuk van.
11)dott harom bemeneti allomany. z elsó tartalmazza n tanIolyam nevet es arat, a
masodik m szemely nevet es születesi evet, a harmadik a beiratkozasi nyilvantartast,
minden sorban egy tanulot es egy tanIolyamot (egy tanulo maximum 5 tanIolyamra
iratkozhat be, minden tanIolyamhoz legalabb 4, legIennebb 15 diak szükseges).
a) Ellenórizzük hogy a megkötesek Iigyelembe lettek-e veve.
b) Mely tanIolyamok a leglatogatottabbak es melyek a legkevesbe?
c) Kik latogatiak a legtöbb tanIolyamot es kik a legkevesebbet?
d) Melyik tanIolyamokat latogatiak a legIiatalabb diakok es melyikeket a
legidósebbek?
e) Melyik tanIolyam hozza a legtöbb penzt, es mennyi penz iön összesen be?
I) Keszitsünk kimutatast egy kimeneti allomanyba a tanIolyamokrol, es az egyes
tanIolyamokat latogato hallgatokrol
g) Keszitsünk kimutatast egy kimeneti allomanyba a hallgatokrol, es a hallgatok
valasztotta tanIolyamokrol.
12)dott harom bemeneti allomany. z elsó tartalmazza az osztalyIónököket es
osztalyuk megnevezeset, a masodik a tanulokat es, hogy melyik osztalyba iarnak, a
harmadik pedig az osztalyIelelósök listaiat. Iriuk ki az osztalyIelelósöket es
osztalyIónökeiket.
13)dott n egesz szam a long tartomanybol. Titkositsuk a szamsorozatot ugy, hogy a
szamok belsó abrazolasainak baitiait annyiszor Iorgatiuk körkörösen ahanyadik a
szam a sorozatban. paratlan pozicioiuakat balra, a paros pozicioiuakat pedig
iobbra Iorgassuk.
14)dott egy szöveges allomanyban n valos szam. Titkositsuk a szamsorozatot ugy,
hogy a float-kenti belsó abrazolasuk közepsó ket bitiet (a 15-dik es 16-ik
helyertekú biteket) Ielcsereliük maguk között.
a) a titkositast union-ok es bitmezók altal valositsuk meg
b) a titkositashoz hasznaliuk a bitmüveleteket
120
. A feI soroIás típus (enum)
Mi hatarozza meg, milyen ertekeket vehet Iel egy valtozo? tipusa. z eddig
megismert egyszerú tipusok eseteben implicit adva volt az ertektartomany. Peldaul egy
char valtozo, -128 es 127 közötti egeszeket kaphat ertekkent. z enum tipus
segitsegevel en magam sorolhatom Iel, milyen ertekeket vehet Iel egy ilyen tipusu
valtozo. Ielsorolt azonositok, amint latni Iogiuk, valoiaban egesz konstans nevek.
Tehat a #define direktiva es a const modosito ielzó mellett, az enum tipus is lehetóve
teszi, szimbolikus egesz konstansok deIinialasat. Mivel az enum tipus
ertektartomanyanak minden erteke nevet kap, ezert alkalmazasa attekinthetóbb kodot
eredmenyez.
z alabbi peldakbol sok minden kiderül a Ielsorolas tipusrol:
enum napok

hetfo,kedd,szerda,csutortok,pentek,szombat=10,vasarnap
· nap;
typedef enum

tavasz=3,nyar=6,osz=9,tel=12
· evszak;
enum

jan=1,feb,mar,apr,maj,jun,jul,aug,szept,okt,nov,dec
·;
enum napok szuletesnap;
evszak vakacio;
int ho = jul; /· 1 ·/
if (ho = nyar && ho <= osz
puts(¨Nyari honap!¨; /· 2 ·/
nap = pentek; /· 3 ·/
vakacio = 6; /· 4 ·/
vakacio = aug; /· 5 ·/
nap++; /· HIBAS: az enum azonositoknak nincs balertekük ·/
puts(hetfo; /· HIBAS: hetfo egesz azonosito, nem karakterlanc ·/

egiegvzesek.
1. nap illetve szuletesnap valtozok enum napok tipusuak.
2. vakacio valtozo evszak tipusu, ahol evszak egy enum tipus neve.
3. Ielsorolt azonositok, hetfo..vasarnap, tavasz..tel, jan..dec, a
valosagban egesz ertekeket kepviselnek. z elsó azonosito a Ielsorolasban
implicite a 0 erteket kapia, a többi pedig eggyel nagyobbat mint az elótte levó.
z implicit ertekeket Ielül lehet biralni explicit ertekadassal. Peldaul hetfo
erteke 0, kedd-e 1, pentek-e 5, vasarnap-e pedig 11 lesz.
4. Mivel a Ielsorolasban azonositok szerepelnek ezert ervenyes raiuk az a megkötes,
hogy csakis az angol abece kis es nagy betúit, a szamiegyeket es az alahuzas ielt
tartalmazhatiak, es nem kezdódhetnek szamieggyel.
121
5. Mivel a Ielsorolt azonositok alapiaban veve egesz ertekek, hasznalhatok barhol
ahol egesz ertekre van szükseg. Ebból adodoan a harmadik enum deIinicionak is
van ertelme bar nem deIinialtunk ilyen tipusu valtozot, es nevet se adtunk neki,
hogy kesóbb hivatkozhassunk ra hiszen a Ielsorolt azonositok hasznalhatok
mint egeszek (lasd az 1-es es 2-es programsorokat).
6. Egy enum valtozo alapvetóen a saiat Ielsorolasa azonositoit veheti Iel (3-as
programsor). Bar múködnek a 4-es es 5-ös programsorok is (warning
kisereteben), ellentetben allnak az enum tipus celiaval.
. z enum tipust hasonloan deIinialiuk mint a struct-ot, azzal a különbseggel,
hogy opcionalis, mind a cimke, mind a valtozo lista:
enum ¯<címke` <felsorolás· ¯<változó lista`;
8. z enum valtozok tarhely igenye sizeof(int. Ugy Ioghatok Iel mint az int
tartomany reszhalmazai. Ebból adodik az a megkötes, hogy az enum
Ielsorolasokban csakis int tartomanyba esó ertekek szerepelhetnek.

Feladat.
Keszitsünk egy kimutatast arrol, hogy a het melyik napian a legnagyobb egy
adott üzlet bevetele. billentyúzetról n nap sorszamat (hetIó: 1, ..., vasarnap: 7) es az
aznapi bevetelt olvassuk be.



enum

hetfo=1, kedd, szerda, csutortok, pentek, szombat,
vasarnap
·;
char · napok¯8` = ¨¨, ¨hétfó¨, ¨kedd¨, ¨szerda¨,
¨csutörtök¨, ¨péntek¨, ¨szombat¨, ¨vasárnap¨·;
unsigned long bevetel¯8` = 0·, penz, maxpenz;
int nap, n, maxnap, i;
puts(¨Add meg a napok számát:¨;
scanf(¨%d¨, &n;
puts(¨Ird be a napokat és a pénzösszegeket:¨;
for(i = 1; i <= n; i++

scanf(¨%d%lu¨, &nap, &penz;
bevetel¯nap`+=penz;
·
maxpenz = bevetel¯hetfo`; maxnap = hetfo;
for(i = kedd; i <= vasarnap; i++
if(bevetel¯i` maxpenz
maxpenz = bevetel¯i`; maxnap = i;·
printf(¨A legnagyobb forgalmú nap: %s¨, napok¯maxnap`;

122
9 Függvények



Egy Ieladaton keresztül Iogiuk erzekeltetni a Iüggvenyek hasznalatanak elónyeit.

Feladat.
Olvassuk be a billentyúzetról, az n es k (k A n termeszetes szamokat, es iriuk
ki a kepernyóre, az n elemú halmaz, k-ad rendú kombinacioinak szamat, az alabbi keplet
segitsegevel:
c(n,k = n! / (k! · (n-k!.

Megoldas, Iüggvenyek alkalmazasa nelkül:



Vegyük eszre, hogy a Ienti megoldasban, haromszor irtuk le a Iaktorialis szamitas
kodiat, n-re, k-ra es (n-k-ra. Hasznos lenne egy olyan lehetóseg, hogy csak egyszer
kellien megirni, de akarhanyszor vegre lehessen haitatni, mas-mas ertekekre. Erre
biztositanak lehetóseget a Iüggvenyek. Egy Iüggvenyt ugy lehet elkepzelni, mint egy
szindarab Iorgatokönyvet, amit egyszer irnak ugyan meg, de akarhanyszor el lehet
iatszani, különbözó szintereken, mas-mas szineszekkel.


Ime a Ieladat megoldasa Iüggveny segitsegevel:


int n, k, i;
unsigned long fn, fk, fn_k, cnk;
puts(°Ird be az n, és a k értékét:¨;
scanf(°%d%d¨, &n, &k;
/· az n! kiszámítása ·/
if (!n fn = 1;
else for(fn = 1, i = 1; i <= n; i++ fn ·= i;
/· a k! kiszámítása ·/
if (!k fk = 1;
else for(fk = 1, i = 1; i <= k; i++ fk ·= i;
/· az (n-k! kiszámítása ·/
if (!(n - k fn_k = 1;
else for(fn_k = 1, i = 1; i <= n - k; i++ fn_k ·= i;
/· a c(n,k kiszámítása ·/
cnk = fn / (fk · fn_k;
printf(°A c(n,k értéke: %lu°, cnk;

123

Hogyan haitodik vegre a Ienti program?

Minden program a main Iüggveny vegrehaitasaval kezdódik. main Iüggveny,
ielen esetben, 3-szor Iogia meghivni a faktorialis Iüggvenyt. z 1-es programsornal
IelIüggesztódik a main vegrehaitasa, es a faktorialis(n Iüggvenyhivas hatasara
elkezdódik a faktorialis Iüggveny vegrehaitasa. Letreiön

az n Iormalis parameter es
megkapia a main-beli n-nek mint aktualis parameternek az erteket (Rvalue).
Letreiönnek az i es f lokalis valtozok, es a Iüggveny utasitasainak vegrehaitasa
nyoman, f-ben kepzódik az n! erteke. return utasitas visszateriti a main
Iüggvenynek az f erteket (Rvalue), es Ielszamolodnak

a lokalis valtozok (i, f) es a
Iormalis parameterek (n). Ezennel veget ert a faktorialis Iüggveny elsó vegrehaitasa,
es Iolytatodhat a main. main Iüggveny, a faktorialis(k, illetve faktorialis(n-
k hivasok hatasara, masodszor es harmadszor is meghivia a faktorialis Iüggvenyt.
Ezek a Iüggvenyhivasok hasonlo modon bonyolodnak le mint az elsó. masodik
hivasban az n Iormalis parameter a main-beli k, a harmadikban pedig az n-k erteket

HelyIoglalas törtenik szamara. Lasd a .Parameteratadas a STCK-en keresztül¨ cimú alIeiezetet.

Felszabadul a szamara leIoglalt memoria terület.
#include <stdio.h

/* Iüggveny a Iaktorialis szamitasra */
/* unsigned int a Iüggveny tipusa, faktorialis pedig a neve */

unsigned long faktorialis (int n) /* n, Iormalis parameter */
{
int i; unsigned long f; /* i es f, lokalis valtozok */
if (n) f = 1;
else for(f = 1, i = 1; i = n; i++) f *= i;
return f; /* a hivo Iüggvenynek eredmenykent visszateritett ertek */
}

main(

int n,k; unsigned long cnk; /* n, k es cnk, a main lokalis valtozoi
*/
puts(°Ird be az n, és a k értékét:¨;
scanf(°%d%d¨, &n, &k;

/· a c(n,k kiszámítása ·/
/· n, k, (n-k, aktuális vagy efektiv paraméterek ·/

cnk=faktorialis(n)/(faktorialis(k)·faktorialis(n-k);/·1·/

printf(°A c(n,k értéke: %lu°, cnk;
return 0;
·
124
kapia meg. Igy valosul meg, hogy rendre az n!, k!, (n-k! ertekek kerülnek
kiszamitasra a faktorialis Iüggveny altal.

egiegvzesek.
1. Folytatva a szemleltetest a szindarabbal, a Iormalis parameterek a szereplóknek,
az aktualis parameterek pedig a szineszeknek Ielelnek meg. Egy Iontos reszlet,
hogy a Iüggvenyek vegrehaitasanak ideiere nem az aktualis parameterek
.öltöznek be¨ es .iatsszak el¨ a Iormalis parametereknek elóirt szerepet, hanem
maguk a Iormalis parameterek .elevenednek¨ meg mint az aktualis parameterek
valamiIele .dublóriei¨

(masolatai). Ezert nevezik ezt a mechanizmust
ertekszerinti parameteratadasnak.
2. Iormalis parameterek es a lokalis valtozok között az a közös vonas, hogy a
Iüggveny vegrehaitasanak pillanataban .születnek meg¨, a memoria Stack-nek
nevezett reszen, es a Iüggveny beIeieztevel .megszúnnek letezni¨. Tehat csak a
Iüggvenyvegrehaitas ideien leteznek. Csak abban különböznek, hogy a Iormalis
parameterek inicializalodnak a megIeleló aktualis parameter ertekevel, a lokalis
valtozok viszont nem kapnak implicit modon kezdóerteket.
3. Termeszetesen a Iormalis (.szereplók¨) es aktualis (.szineszek¨) parameterek
szama meg kell egyezzen, sót, mivel a Iormalis parameterek megkapiak a
megIeleló aktualis parameter erteket, ezert tipusaik az ertekadasra nezve
kompatibilisek kell legyenek.
4. z elóbbi peldaban a main Iüggvenyt ivo-, a faktorialis Iüggvenyt pedig
megivott fùggvenvnek nevezzük. Termeszetesen egy meghivott Iüggveny maga
is meghivhat mas Iüggvenyeket. Sót, amint latni Iogiuk, egy Iüggveny
meghivhatia önmagat is (rekurzio). rra is van lehetóseg, hogy Iüggvenyek
egymast hiviak (indirekt rekurzio).
5. Egy Iüggveny tipusa, a hivo Iüggvenynek eredmenykent visszateritendó ertek
tipusa. Ezert a return utasitasban szerepló kiIeiezes tipusa, az ertekadas
szempontiabol kompatibilis kell legyen a Iüggveny tipusaval.
6. return utasitas az eredmeny erteket (Rvalue) teriti vissza. Ezert elmondhato,
hogy az inIormacio atadasa a hivo es a meghivott Iüggveny között, mindket
iranyban ertek szerint törtenik. Ebból adodik az is, hogy sem az aktualis
parameterek, sem a return altal visszateritett kiIeiezes nem kell szüksegszerúen
valtozo legyen. Barmilyen megIeleló tipusu kifeiezes lehet, amelynek van
balerteke (Rvalue).
7. Egy Iüggvenyben több helyen is szerepelhet return. Ilyenkor azt mondiuk, hogy
több visszateresi pontia van.
Peldaul:
unsigned long faktorialis (int n

int i; unsigned long f;

szineszt egyes helyzetekben helyetesitó szerepló
125
if (n == 0 return 1;
for (f = 1, i = 1; i <= n; i++ f ·= i;
return f;
·
8. Altalaban a Iüggvenyek kiszamitanak valamit, es ezt eredmenykent visszateritik a
hivo Iüggvenynek. Vannak esetek azonban, amikor a Iüggveny nem kell
visszateritsen semmit a hivo Iüggvenynek, csak el kell vegezzen valamit. Ezek a
void Iüggvenyek (eliarasok). void szonak mint Iüggvenytipusnak a ielentese,
hogy nincs visszateró ertek.
9. void Iüggvenyekben is szerepelhet a return utasitas (.üres¨ return-kent,
visszateritendó kiIeiezes nelkül), ha több visszateresi pontot szeretnenk a
Iüggvenyból.
10.Lehetóseg van arra is, hogy Iüggvenyünk több eredmenyt teritsen vissza, de ez
csakis a parameter listan keresztül valosithato meg (lasd cimszerinti parameter
atadas).
11. Iüggvenyek alkalmazasanak nem csak az az elónye, hogy nem kell ugyanazt
többször leiriuk. lkalmazasukkal sokkal attekinthetóbb kodok irhatok.
Iüggvenyek a modularis programozas alapeszközei (12.2 alIeiezet).

Egy Iüggveny deIinialasanak altalanos szintaxisa:
<típus <fuggvény_név(<formális_paraméter_lista

<lokális_definiálások
<utasítások
¯return ¯<kifejezés`;`
·

Iüggvenyhivas szintaxisa:
<fuggvény_név(<aktuális_paraméter_lista;

C nyelv különbseget tesz egy Iüggveny definicioia es deklaracioia között. Egy
Iüggveny deklaralasa, a Iüggveny Ieilece ;-vel lezarva. Ezt a Iüggveny prototipusanak is
szokas nevezni. deklaracionak nem Iontos, tartalmaznia a Iormalis parameterek
neveit, csupan a tipusaikat.

Iüggveny deklaralas szintaxisa:
<típus <fuggvény_név (<formális_paraméterek_típusai;

faktorialis Iüggveny prototipusa:
unsigned long faktorialis (int;

hhoz, hogy a Iordito ellenórizni tudia egy Iüggvenyhivas szintaktikai helyesseget,
szükseges, hogy ezt megelózze a Iüggveny deIinicioia, vagy legalabb deklaracioia,
amely az eppen ehhez szükseges inIormaciot tartalmazza. Emlekezzünk, hogy a
126
könyvtari Iüggvenyek deklaracioit a eader allomanyok tartalmazzak, es eppen az
elóbbi okbol kiIolyolag szükseges ezeknek az #include direktivaval valo beszurasuk.

bevezetó Ieladatot megoldo program szerkezete a következó is lehetett volna:
#include <stdio.h
unsigned long faktorialis (int;
main(

...
return 0;
·
unsigned long faktorialis (int n

...
·

9. Cí mszerinti paraméterátadás

Feladat.
Iriunk egy Iüggvenyt, amely Ielcsereli ket valtozo tartalmat.

Vaion helyes-e az alabbi megvalositas?
#include <stdio.h
void csere (int, int;
main(

int a = 1, b = 2;
csere (a,b;
printf(°a=%d, b=%d¨, a, b;
return 0;
·
void csere (int x, int y

int v;
v = x; x = y; y = v;
·
Mi Iog megielenni a kepernyón?
Bar arra szamitanank, hogy a=2, b=1, a valosagban a=1, b=2 ielenik meg.
Mi a magyarazata?
Mivel x es y csupan masolatai a-nak es b-nek, ezert attol, hogy ezek tartalmat
Ielcsereliük, a es b meg valtozatlan marad (ertekszerinti parameter atadas).
Mi a megoldas?
cimszerinti parameteratadas!

Ime a helyes megoldas:
#include <stdio.h
void csere (·int, ·int;
main(

1 2
&a &b x
*x
y
a *y b
1 2
1 2 x y
a b
127
int a = 1, b = 2;
csere (&a,&b;
printf(°a=%d, b=%d¨, a, b;
return 0;
·
void csere (int ·x, int ·y

int v;
v = ·x; ·x = ·y; ·y = v;
·

Hogyan múködik a Ienti program?
z x es y int-pointerek, mint Iormalis parameterek, az a es b valtozok cimet
kapiak mint erteket, ezert a-ra, illetve b-re Iognak mutatni. Igy Ielcserelódik ·x
es ·y, vagyis az a es b valtozok.
Ugy is szoktak mondani, hogy ha szeretned, hogy a Iüggveny megvaltoztathassa az
aktualis parametereket, akkor cim szerint kell atadnod óket, azaz a cimüket kell atadnod.
hivo Iüggveny azzal, hogy atadia egyes valtozoinak a cimet a meghivott Iüggvenynek,
elerhetóve teszi az illetó valtozokat az illetó Iüggveny szamara, es igy az
megvaltoztathatia óket. Ez nem egy ui mechanizmus, ugyanis ugy valositottuk meg a es
b cimszerinti atadasat, hogy cimeiket &a-t es &b-t ertek szerint atadtuk az x es y
pointereknek.

egiegvzesek.
1. Cim szerint atadott parameterlistaban csakis valtozok szerepelhetnek, hiszen
ezeknek van bal ertekük, azaz cimük (Lvalue).
2. Emlitettük, hogy megtörtenhet, hogy egy Iüggvenynek több eredmenyt is vissza
kell teritenie a hivo Iüggvenynek. Ez cim szerint atadott parametereken keresztül
valosithato meg. Peldakent tekintsük az alabbi .beszedes¨ programot:

void szamol(int a,int b,int·ps,int·pk,int·psz,int·ph
·ps=a+b;·pk=a-b;·psz=a·b;·ph=a/b;·
main(

int a,b,summa,kulonbseg,szorzat,hanyados;
scanf(°%d%d¨, &a, &b;
szamol(a,b,&summa,&kulonbseg,&szorzat,&hanyados;
printf(°%d %d %d %d¨,summa,kulonbseg,szorzat,hanyados;
return 0;
·
3. Valtozok eseteben ugy a cimszerinti mint az ertekszerinti parameteratadasnak van
egy elónye es egy hatranya. cimszerinti parameteratadas altalaban memoria-
takarekosabb, ezert nagymeretú valtozok eseteben celszerú lehet elónyben
reszesiteni, amennyiben lehetseges. z ertekszerinti parameteratadas viszont
biztonsagosabb, abban az ertelemben, hogy a meghivott Iüggveny meg veletlenül
128
sem tudia .elrontani¨ a hivo Iüggveny valtozoit, hiszen csak az erteküket kapia
meg. mikor a megoldas logikaia nem követeli meg kiIeiezetten valamelyik
parameteratadast, akkor a programozonak kell eldöntenie melyik szempontot
reszesiti elónyben.
4. C-nyelvben a tömbök mindig cim szerint adodnak at, hiszen a tömb neve adodik
at, ami a valosagban a tömb cime, egy pointer, amely a tömb nulladik elemere
mutat.
5. z alabbi peldak több lehetóseget is bemutatnak arra vonatkozoan, mikent
adhatunk at egy- es ketdimenzios tömböket Iüggvenyeknek. Mivel egydimenzios
tömbben rendszerint sorozatot, ketdimenziosban pedig matrixot tarolunk,
celszerú atadni a Iüggvenynek az elemek, illetve a sorok es oszlopok szamat is:
a. typedef int vektor¯20`;
typedef float matrix¯20`¯30`;
void f(vector v, int n, matrix m, int p, int q
. . . ·
main(

int n, p, q;
vektor a, matrix b;
. . . f(a, n, b, p, q; . . .
return 0;
·
b. void f(int v¯`, int n, float m¯`¯30`, int p, int q
. . . ·
main(

int n, p, q;
int a¯20`, float b¯20`¯30`;
. . . f(a, n, b, p, q; . . .
return 0;
·
c. void f(int · v, int n, float (·m¯30`, int p, int q
. . . ·
main(

int n, p, q;
int a¯20`, float b¯20`¯30`;
. . . f(a, n, b, p ,q; . . .
return 0;
·
6. struct illetve union tipusu valtozok ertek szerint es cim szerint is atadhatok
Iüggvenyeknek.
7. Bizonyos esetekben szüksegesse valhat pointerek cimszerinti atadasa. Ezt mutatia
be az alabbi pelda. beolvas Iüggveny szerepe, hogy letrehozzon
dinamikusan egy egydimenzios tömböt, es olvasson bele egy egesz szamsorozatot
egy adott allomanybol. Iüggveny parameterkent kapia meg azon int-valtozo
valamint int-pointer cimet, ahova el kell tarolnia a szamsorozat elemszamat
illetve a dinamikusa leIoglalt tömbterület cimet. Ugyancsak parameterkent van
atadva a Iüggvenynek az allomany nevet mint char-pointert.
void beolvas(int·pn, int··pa, char·allnev
129

int i;FILE·f;
f=fopen(allnev,°r¨;
fscanf(f,¨%d¨,pn;
·pa=(int·malloc((·pn·sizeof(int;
for(i=0; i<·pn; i++
fscanf(f,¨%d¨,(·pa+i;
fclose(f;
·
main(

int n, ·a;
beolvas(&n, &a, °be.txt¨;
. . .
·
8. cimszerinti parameteratadas megertese megmagyarazza, miert kell a scanf
Iüggvenynek valtozo-cimet atadni, es karakterlanc olvasaskor miert egyszerúen a
karaktertömb nevet kapia meg.

9.2 Paraméterátadás a STACK-en keresztüI

hivo Iüggveny a Stack-re teszi Iel azokat az adatokat, amelyeket a meghivott
Iüggveny rendelkezesere szeretne bocsatani. klasszikus ertekszerinti
parameteratadaskor az aktualis parameterek erteket, a cimszerintinel pedig az aktualis
parameterek cimeinek az erteket, teszi Iel a Stack-re. Tehat alapvetóen a
parameteratadas ertek szerint törtenik. Igy a cimszerinti is ertekszerinti, abban az
ertelemben, hogy a cimek ertek szerint adodnak at. Peldaul a csere Iüggveny eseteben,
ugy adtuk at cim szerint a-t es b-t, hogy atadtuk ertek szerint a cimeiket, &a-t es &b-t.
cimszerinti parameteratadas azert .erósebb¨, mert ha megkapiuk egy valtozo
erteket, ez meg nem teszi lehetóve, hogy magahoz a valtozohoz hozzaIeriünk, de ha a
cime erteket kapiuk meg, ezen keresztül elerhetiük azt. Szemleltetesül: ha rendelkezünk
egy Iestmeny masolataval, ez nem ielenti azt, hogy elerhetó szamunkra az eredeti is. Ha
viszont megkapiuk a masolatat annak a cimnek, amelyen a Iestmenyt órzik, akkor ez
eppen ugy elvezet a Iestmenyhez, mintha az eredeti cimmel rendelkeznenk.
Tehat az ertekszerinti parameteratadaskor a Iormalis parameterek, maguknak az
atadando adatoknak a masolatai, a cimszerintinel pedig, a cimeik masolatai.
Egy masik szempont, amelyet Iontos Iigyelembe venni, hogy a legtöbb Iordito
eseteben Iüggvenyhivaskor az aktualis parameterek iobbrol balra ertekelódnek ki, es
ertekeik ebben a sorrendben kerülnek Iel a Stack-re. Ezt szemleltetik az alabbi peldak
(vegyük Iigyelembe, hogy a Stack kicsi cimek Iele nó):
int f(int ·p
return ++(·p;·
main(

130
STCK

6 y
5 x
. . .

1 a
2 b
3 c



növekvó
cimek

a Stack
növekedese
int a = 1;
printf(°%d,%d,%d¨,f(&a, f(&a, f(&a;
return 0;
·

Ienti program a következóket iria ki a kepernyóre: 4,3,2

void g(int a, int b, int c

int x = 5, y = 6;
printf(°%p, %p, %p\n¨, &a, &b, &c;
printf(°%p, %p¨, &x, &y;
·
main(
g(1, 2, 3; return 0;·


main Iüggveny Ielteszi a Stack-re a
Iüggvenyhivas aktualis parametereit (elóször a 3-ast, azutan a 2-est es vegül az 1-
est). g Iüggveny ugyancsak a Stack-en hozza maid letre a lokalis valtozoit.
Iüggvenybeli kiirasok celia bemutatni milyen összeIüggesek allnak Ienn a
Iormalis parameterek cimei, illetve a lokalis valtozok cimei között:
&b = &c - sizeof(int
&a = &b - sizeof(int
&x < &a
&y = &x - sizeof(int


9. GIobáIis és IokáIi s váItozók

z eddigi programiainkban kizarolag lokalis valtozokat hasznaltunk. Ezeket a
Iüggveny kereten belül deIinialiuk, es csakis az illetó Iüggveny vegrehaitasanak ideiere
iönnek letre a Stack-en. hogy a lokalis nev is utal ra, egy adott Iüggveny lokalis
valtozoi egy masik Iüggvenyból nem erhetók el. Ebból adodik, hogy a lokalis
valtozoikon keresztül a Iüggvenyek nem tudnak egymassal kommunikalni. Ezt a
kommunikaciot mindezidaig a parameteratadas, illetve az eredmeny visszaterites altal
valositottuk meg. Peldaul, igy kommunikalt minden programunk main Iüggvenye a
scanf könyvtari Iüggvennyel, vagy az iment a main Iüggveny az altalunk irt
faktorialis Iüggvennyel. Bar tovabbra is ez marad a Iüggvenyek közti kommunikalas
Ió modia, letezik egy masik is a globalis valtozok altal.
globalis valtozokat minden Iüggvenyen kivül deIinialiuk. Ezek a program
vegrehaitasanak megkezdese elótt .születnek meg¨ (meg a Iorditas idószakaban), az
adatszegmensen, es leteznek a telies programvegrehaitas ideie alatt. globalis nev arra
utal, hogy minden Iüggvenyból elerhetók. Mivel a Iüggvenyek közösen hasznaliak a
globalis valtozokat, ezert Ielhasznalhatok a Iüggvenyek közti kommunikacioban.
131
yilvan különbözó Iüggvenyeknek lehetnek azonos nevú lokalis valtozoi. De mi
a helyzet akkor, ha egy Iüggvenyben olyan lokalis valtozot deIinialunk, amilyen nevú
globalis valtozo mar letezik. Ilyen esetben a lokalis valtozo mintegy eltakaria a
globalist, es igy, az illetó Iüggvenyból nem lesz elerhetó a szoban Iorgo globalis
valtozo.

z alabbi pelda iobban megvilagitia mindezt:
int a, b, c; /* a, b es c globalis valtozok */

void f1(int x, int y /* x, y az f1 Iormalis parameterei(lokalisak f1-ben) */

float t; int a; /* t, a az f1 lokalis valtozoi */
. . .
·

int f2(float x /* x az f2 Iormalis parametere (lokalis f2-ben) */

int t, b; float a; /* t, b es a, az f2 lokalis valtozoi */
. . .
f1(t, b; /* lokalis t es b */
. . .
f1(b, c; /* lokalis b es globalis c */
. . .
·

main(

float t, c; int t1; /* t, c es t1, a main lokalis valtozoi */
. . .
f1(a, t1; /* globalis a es lokalis t1 */
. . .
t1 = f2(t; /* lokalis t es t1 */
. . .
return 0;
·

egiegvzesek a peldaoz.
O main meghivia f1-t es f2-t. f1 maga is meghivia ketszer f2-t.
O f1-ben elerhetó a lokalis t es a, az x es y Iormalis parameterek, valamint a
globalis b es c. globalis a-t eltakaria a lokalis a.
O f2-ben elerhetó a lokalis t, b es a, az x Iormalis parameter, valamint a globalis
c. globalis a-t es b-t eltakaria a lokalis a es b.
O main-ben elerhetó a lokalis t, c es t1, valamint a globalis a es b. globalis c-t
eltakaria a lokalis c.

ogvan aitodik vegre a peldabeli program?
132

Iorditas Iazisaban letreiönnek az adatszegmensen az a, b, c globalis valtozok.
Elkezdõdik a main függvény végrehajtása.
Letreiönnek a STCK-en a main lokalis valtozoi: t, c, t1
. . .
Elkezdõdik az f1 függvény végrehajtása (IelIüggesztódik a main Iüggveny).
Letreiönnek a STCK-en az f1 Iormalis parameterei az x, y es megkapiak a
globalis a valamint a main lokalis t1-ienek ertekeit.
Letreiönnek a STCK-en az f1 lokalis valtozoi: t, a
. . .
Felszamolodnak a STCK-ról az f1 lokalis valtozoi es Iormalis parameterei.
Befejezõdik az f1 végrehajtása, Iolytatodik a main Iüggveny.
. . .
Elkezdõdik az f2 függvény végrehajtása (uira IelIüggesztódik a main Iüggveny).
Letreiönnek a STCK-en az f2 Iormalis parametere az x es megkapia a main
lokalis t-ienek erteket.
Letreiönnek a STCK-en az f2 lokalis valtozoi: t, b, a
. . .
Elkezdõdik az f1 függvény végrehajtása (IelIüggesztódik az f2 Iüggveny).
Letreiönnek a STCK-en az f1 Iormalis parameterei az x, y es megkapiak
az f2 lokalis t-ienek es b-ienek ertekeit.
Letreiönnek a STCK-en az f1 lokalis valtozoi: t, a
. . .
Felszamolodnak a STCK-ról az f1 lokalis valtozoi es Iormalis parameterei.
Befejezõdik az f1 végrehajtása, Iolytatodik az f2 Iüggveny.
. . .
Elkezdõdik az f1 függvény végrehajtása (uira IelIüggesztódik az f2 Iüggveny).
Letreiönnek a STCK-en az f1 Iormalis parameterei az x, y es megkapiak
az f2 lokalis b-ienek es a globalis c-nek ertekeit.
Letreiönnek a STCK-en az f1 lokalis valtozoi: t, a
. . .
Felszamolodnak a STCK-ról az f1 lokalis valtozoi es Iormalis parameterei.
Befejezõdik az f1 végrehajtása, Iolytatodik az f2 Iüggveny.
. . .
Felszamolodnak a STCK-ról az f2 lokalis valtozoi es Iormalis parameterei.
Befejezõdik az f2 végrehajtása, Iolytatodik a main Iüggveny.
. . .
Felszamolodnak a STCK-ról a main Iüggveny lokalis valtozoi.
Befejezõdik a main végrehajtása.
Felszamolodnak az adat szegmensról a globalis valtozok.
133

9. Programtervezés kicsi ben

Programtervezeskor többek között a következó kerdesek merülnek Iel:
1. Mit oldiunk meg a main Iüggvenyben, es mit osszunk le mas Iüggvenyeknek?
Eddig mindent a main Iüggvenyben oldottunk meg.
2. Iüggvenyek közti kommunikacioban mit valositsunk meg parameteratadas
altal, es mit globalis valtozokon keresztül?
3. Mely valtozok legyenek globalisak es melyek lokalisak?
4. Mely parametereket adiuk at ertek szerint, es melyeket cim szerint?

következó Ieladat megoldasanal megprobalunk egy lehetseges valaszt adni ezekre a
kerdesekre.
Feladat.
matrix.be szöveges allomanyban adott a sorok szama(n), az oszlopok
szama(m), valamint egy n L m-es matrix elemei. Rendezzük külön-külön a sorait, maid
az igy kapott matrixot iriuk ki a matrix.ki szöveges allomanyba.

!rogramtervezes.
1. bemenó adatok beolvasasat az n es m valtozokba, valamint az a ketdimenzios
tömbbe, egy beolvasas nevú Iüggvenyre bizzuk.
2. matrix kiirasara a kimeneti allomanyba ugyancsak egy Iüggvenyt irunk.
Legyen a neve kiiras.
3. matrix sorain a main Iüggvenyben Iogunk vegigmenni, de egy adott sor
rendezeset leosztiuk egy sor_rendezes Iüggvenynek.
4. rendezeshez szükseges csere múvelethez a sor_rendezes Iüggveny meg Iog
hivni egy csere Iüggvenyt.
5. Mivel az n, m es a valtozokat ugy a main mint a beolvasas, kiiras es
sor_rendezes Iüggvenyek kell hogy hasznaliak, ezert ezeket globalisnak
deIinialiuk.
6. beolvasashoz szükseges i es j ciklusvaltozok lokalisak lesznek a beolvasas
Iüggvenyben. Hasonlo modon a kiirashoz szükseges i es j, valamint a matrix egy
adott soranak rendezesehez szükseges i es j, illetve a matrixon sorrol-sorra valo
vegigszaladashoz szükseges i valtozok, ugyancsak lokalisak lesznek a kiirás,
sor_rendezes illetve main Iüggvenyekben.
7. main Iüggveny ertek szerint atadott parameter altal Iogia közölni a
sor_rendezes Iüggvennyel, hogy melyik sort rendezze.
8. sor_rendezes Iüggveny szüksegszerúen cim szerint kell hogy atadia a csere
Iüggvenynek a Ielcserelendó elemeket.
#include <stdio.h
int n, m, a¯50`¯50`;
134
void beolvasas(;
void kiiras(;
void sor_rendezes(int;
void csere(int ·, int ·;
main(
int i;
beolvasas(;
for(i = 0; i < n; i++
sor_rendezes(i;
kiiras(;
return 0;
·
void beolvasas(
int i, j; FILE · f;
f = fopen(°matrix.be¨, °r¨;
fscanf(f, °%d%d¨, &n, &m;
for(i = 0; i < n; i++
for(j = 0; j < m; j++
fscanf(f, °%d¨, &a¯i`¯j`;
fclose(f;
·
void kiiras(
int i, j; FILE · f;
f = fopen(°matrix.ki¨, °w¨;
for(i = 0; i < n; i++

for(j = 0; j < m; j++
fprintf(f, °%5d¨, a¯i`¯j`;
fprintf(f, °\n¨;
·
fclose(f;
·
void sor_rendezes(int k
int i, j;
for(i = 0; i < m - 1; i++
for(j = i + 1; j < m; j++
if (a¯k`¯i` a¯k`¯j` csere(&a¯k`¯i`, &a¯k`¯j`;
·
void csere(int · p1, int · p2
int v;
v = ·p1; ·p1 = ·p2; ·p2 = v;
·

A fenti programtervezes indoklasa.
1. Mivel a Iüggvenyek globalis valtozokon keresztül iutnak hozza n-hez, m-hez es a-
hoz, ezert kevesbe altalanosak. Peldaul a beolvasas Iüggveny nem lenne
alkalmas egy matrix adatainak p (sor), q (oszlop) es b (elemek) valtozokba valo
beolvasasara. De ebben a Ieladatban erre nincs is szükseg.
2. Ientiekkel ellentetben, mivel a sor_rendezes parameteren keresztül kapia
meg a rendezendó sor indexet, ezert az a tömb barmelyik soranak rendezesere
alkalmas, es erre szükseg is van.
135
3. Szüksegtelen lett volna a sorindexet cim szerint atadni a sor_rendezes
Iüggvenynek, hiszen csak az ertekere van szüksege. Ezzel ellentetben a csere
Iüggvenynek magukra az elemekre van szüksege a Ielcserelesükhöz.
4. Ha kenyelemból (hibasan) globalisnak deIinialtunk volna az i es j valtozokat,
hogy ne kellien minden Iüggvenyben külön deklaraliuk, akkor a main Iüggveny i
ciklusvaltozoiat .elrontotta¨ volna a sor_rendezes Iüggveny.
5. Következésképpen bár a globális változók használata kényelmesnek tunik
általában kerülendõk. Célszeru elõnybe helyezni a paraméterátadást és a
lokális változókat. Sõt egyes pedagógusok azt ajánlják a programozni
tanulóknak hogy teljességgel kerüljék a globális változók használatát. Ez
egy egészséges programozói stílus kialakításához vezet amely többek között
azt is magába foglalja hogy olyan függvényeket írunk amelyek bármely
alkalmazásban értékesíthetõk. Továbbá felkészít nagy projektek
.csapatmunkával¨ való megvalósítására. A programozói csapatmunka egyik
alapelve hogy a projekt függvényei kizárólag paraméterlistán keresztül
kommunikálnak és csak lokális változókat használnak.

Következzen hat a Ieladat megoldasa globalis valtozok nelkül:


#include <stdio.h
void beolvasas(int ·, int ·, int (·¯50`, char ·;
void kiiras(int, int, int (·¯50`, char ·;
void sor_rendezes(int, int, int ¯`¯50`;
void csere(int ·, int ·;
main(
int n, m, a¯50`¯50`, i;
beolvasas(&n, &m, a, °matrix.be¨;
for(i = 0; i < n; i++
sor_rendezes(i, m, a;
kiiras(n, m, a, °matrix.ki¨;
return 0;
·
void beolvasas(int· pn,int· pm,int(·a¯50`,char·allomany
int i, j; FILE · f;
f = fopen(allomany, °r¨;
fscanf(f, °%d%d¨, pn, pm;
for(i = 0; i < ·pn; i++
for(j = 0; j < ·pm; j++
fscanf(f, °%d¨, &a¯i`¯j`;
fclose(f;
·
void kiiras(int n, int m, int (·a¯50`, char · allomany
int i, j; FILE · f;
f = fopen(allomany, °w¨;
for(i = 0; i < n; i++

for(j = 0; j < m; j++
fprintf(f, °%5d¨, a¯i`¯j`;
fprintf(f, °\n¨;
136
·
fclose(f;
·
void sor_rendezes(int k, int m, int a¯`¯50`
int i, j;
for(i = 0; i < m - 1; i++
for(j = i + 1; j < m; j++
if (a¯k`¯i` a¯k`¯j` csere(&a¯k`¯i`, &a¯k`¯j`;
·
void csere(int · p1, int · p2
int v;
v = ·p1; ·p1 = ·p2; ·p2 = v;
·

egiegvzesek ezen masodik megoldasoz.
1. beolvasas Iüggveny most mar alkalmas lenne egy matrix adatainak a
beolvasasara, barmilyen nevú allomanybol, barmilyen nevú memoriavaltozokba.
Ugyanez igaz a kiiras es sor_rendezés Iüggvenyekre is.
2. beolvasas Iüggvenynek nyilvan cim szerint kellett atadnunk az n, m es a
valtozokat, hiszen a beolvasas ezekbe kellett megtörtenien es nem a masolatukba.
zert nem kellett külön ielezni az a tömb cim szerint valo atadasat, mert, amint
emlitettük, a C nyelvben, a tömbök kivetelesen, implicite cim szerint adodnak at.
kiiras es sor_rendezes Iüggvenyek eseteben elegseges volt n es m
ertekszerinti atadasa.
3. Ugy is mondhatnank, hogy a main Iüggveny a saiat n-iet, m-iet es a-iat bocsatia a
cimszerinti parameteratadas altal a beolvasas Iüggveny rendelkezesere, mig a
masik kettónek csupan n es m erteket adia oda.

Ha dinamikusan szeretnenk helyet Ioglalni egy tömbnek, ezt a Ieladatot is kioszthatiuk
egy Iüggvenynek.

letrehoz_1, egy n elemú egydimenzios int tipusu tömböt hoz letre.
int · letrehoz_1(int n

int · tp;
tp = (int·malloc(n · sizeof(int;
return tp;
·
Hogyan hasznalhato a Ienti Iüggveny?
int · a;
a = letrehoz_1(n; /* a tömb i-dik elemere valo hivatkozas: a¯i` */

letrehoz_2, egy n x m-es float tipusu tömböknek Ioglal helyet. Pontosabban egy
n elemú float-pointer tömböt hoz letre, amelynek minden eleme egy m elemú float-
tömbre mutat.
float ·· letrehoz_2(int n, int m

float ·· tpp; int i;
137
tpp = (float··malloc(n · sizeof(float·;
for(i = 0; i < n; i++
tpp¯i` = (float·malloc(m · sizeof(float
return tpp;
·
Ketdimenzios tömb letrehozasa a letrehoz_2 segitsegevel:
float ·· b;
b = letrhoz_2(n, m; /* b¯i`¯j`, a tömb i-dik soranak, j-dik eleme */

mig az a tömb törölhetó a free(a; utasitassal, addig b törleset az alabbi Iüggveny
valosiia meg:
void torol_2(float ·· b, int n

int i;
for(i = 0; i < n; i++ free(b¯i`
free(b;
·

9.5 Függvény poi nterek

Egy Iüggveny tipusa alatt eddig a visszateresi ertekenek tipusat ertettük.
zonban, ha egeszen pontosak akarunk lenni, akkor ez magaba Ioglalia meg a
parameterek szamat es tipusat is.

Legyen a következó Iüggvenydeklaracio:
int f(char, float;

f, char es float parameterú int-Iüggveny.
f tipusa leirva: int (char, float.

Hogyan deIinialunk egy Iüggvenypointert?
Peldaul igy:
int (·fp(char, float;

fp, char es float parameterú int-Iüggveny-pointer.
fp tipusa leirva: int(·(char,float.

typedef-et hasznalva nevet adhatunk egy Iüggvenytipusnak vagy Iüggveny-pointer-
tipusnak.
Pelda:
typedef float FV_TIP (double, int··, char¯`;
typedef int (·FV_PTR_TIP (int, int;
FV_TIP fuggv; /· fuggvény deklaráció, prototipus ·/
FV_PTR_TIP f_ptr; /· fuggvény pointer definiálás ·/

138
Egy Iüggveny neve, az illetó Iüggveny-tipusu pointer-konstanskent is IelIoghato, amely
magara a Iüggvenyre mutat. Tehat f egy int(·(char,float tipusu Iüggveny-
pointer-konstansnak is tekinthetó. Ezert az f illetve ·f hivatkozasok egyenertekúek.
z fp pointer megkaphatia barmely char es int parameterú int-Iüggveny
cimet.
Peldaul:
fp = &f; ezzel ekvivalens: fp = f;

z erem masik oldala az, hogy barmely Iüggveny-pointer IelIoghato annak a
Iüggvenynek a nevekent, amelyre mutat. Igy az fp es ·fp hivatkozasok is
egyenertekúek.

z f Iüggvenyt a következó modokon lehet meghivni:
int x; char a; float b;
. . . x = f(a, b; . . . /· klasszikus Iorma ·/
. . . x = (·fp(a, b; . . . /· pointeren keresztül ·/
. . . x = (·f(a, b; . . . /· a neven, mint pointeren keresztül ·/
. . . x = fp(a, b; . . . /· pointeren, mint neven keresztül ·/
egiegvzes.
O Mivel egy Iüggveny tipusa az adattipusokkal ellentetben nem hatarozza meg
kodianak memoriameretet, ezert a Iüggvenypointerekre nem ervenyesek a
cimaritmetika múveletei. Peldaul egy Iüggvenypointerhez nem adhato hozza egy
egesz szam, vagy az azonos tipusu Iüggvenypointerek nem vonhatok ki
egymasbol.

9.6 Függvény paraméterként vaIó átadása függvénynek

Iüggvenyatadas mindig cim szerint törtenik.

Feladat.
Iriunk egy olyan rendezó Iüggvenyt, amely rendezi egy tömb elemeit Iüggetlenül
ezek tipusatol.
egoldas.
139
Mivel a rendezeshez szükseges összehasonlitas tipusIüggó, ezert minden tipusra
irunk egy összehasonlito Iüggvenyt, amelyet maid atadunk a rendezó Iüggvenynek.
rendezó Iüggveny parameterkent a tömb cimet, elemeinek szamat es meretet, valamint
az összehasonlito Iüggvenyt Iogia megkapni. zert, hogy a különbözó összehasonlito
Iüggvenyek azonos tipusuak legyenek, az összehasonlitando elemek cimeit mint void
pointereket Iogiak megkapni.

egiegvzes.
O C-nyelv Iüggveny-könyvtaraban letezik qsort nevú hatekony tömbrendezó
Iüggveny. Prototipusa hasonlo az altalunk irt sort prototipusahoz:

void qsort(void · tomb_cim,
int elem_szam,
int elem_meret,
int(·cmp( const void·, const void·;
#include<sdtlib.h
#include<string.h
int int_cmp(const void · p1, const void · p2
return · (int · p1 - · (int · p2; ·

int float_cmp(const void · p1, const void · p2
if (· (float · p1 == · (float · p2 return 0;
else if (· (float · p1 < · (float · p2 return -1;
else return 1;·

void sort(void·v,int nr,int size,int(·p_cmp(const void·,const void·

int i, j; void ·pv, ·pi, ·pj;
pv = malloc(size; /· a veder szerepet Iogia betölteni ·/
for(i = 0, pi=v; i < nr - 1; i++, (char·pi+=size

for(j = i + 1,pj=(char·pi+size; j < nr; j++,(char·pj+=size

if (p_cmp(pi, pj 0

memcpy(pv, pi, size;
memcpy(pi, pj, size;
memcpy(pj, pv, size;
·
·
·
free(pv;
·
main(
/· Ha az a tömb egy n elemú int sorozatot tartalmaz, b pedig egy m elemú float
sorozatot, akkor ezek a következókeppen rendezhetók a sort Iüggvennyel ·/
sort(a, n, sizeof(int, int_cmp;
sort(b, m, sizeof(float, float_cmp;
return 0;
·
140
9.7 VáItozó paraméterszámú függvények

z eddig irt Iüggvenyeinknek volt egy iellemvonasuk: mindig ugyanannyi
parameterrel hivtuk meg. Ez termeszetesnek túnik is, hisz azt mondtuk, hogy a Iormalis
es az aktualis parameterek szama meg kell egyezzen. szemleltetesünkben is ez
tükrözódött: ahany szereplóie van egy darabnak, annyi szineszre van szükseg az
eliatszasahoz.
De hat mi a helyzet akkor az olyan könyvtari Iüggvenyekkel mint a printf es a
scanf, amelyek .barmilyen¨ parameterszammal meghivhatok? valasz a valtozo
parameterszamu Iüggvenyekben reilik.

Egy konkret peldan Iogiuk bemutatni ezt a különleges Iüggvenyosztalyt.
. Feladat.
Iriunk egy osszeg nevú Iüggvenyt, amely parameterkent megkapia az
összeadandok szamat valamint magukat az összeadandokat (valos szamok), es kiiria az
összeget a kepernyóre.
z osszeg Iüggvenyt peldaul, az alabbi modokon szeretnenk meghivni:
main(

osszeg(5, 3.1, 5.2, -2.1, 4.02, 1.0;
/· a kepernyón megielenik 11.22 ·/
osszeg(2, 3.14, 1.1; /· a kepernyón megielenik 4.24 ·/
return 0;
·

Hogyan törtenik egy ilyen Iüggveny deklaralasa, illetve deIinialasa?
void osszeg (int n, . . .; /· deklaráció ·/
void osszeg (int n, . . . /· definíció ·/

double · p, s = 0;
p = (double ·(&n + 1;
for( ; n; n - -
s += · p; p ++; ·
printf(¨%5.2lf\n¨, s;
·
egiegvzesek.
1. Legalabb egy Iix parameterrel kell rendelkezzenek a valtozo parameterszamu
Iüggvenyek is. Peldaul a printf es a scanf eseteben a Iix parameter egy const
char · tipusu pointer, amely a Iormazosorra mutat.
2. zok a parameterek, amelyek vagy megielennek vagy nem, a Iix parameterek
utan kell következzenek. Mivel szamuk es tipusuk ismeretlen a Iüggveny
deklaralasakor, ezert ,. . .¨ -al ertesitiük roluk a Iorditot.
3. kulcsszerep a Iix parametereknek iut, ugyanis ezek elegendó inIormaciot kell
tartalmazzanak a többi parameterról. z osszeg Iüggveny n parametere peldaul
megmondia, hany double parameter követi meg (osszeg, egy kiIeiezetten
141
double összeado). scanf es a printf Iormazosorabol nemcsak a tovabbi
parameterek szama olvashato ki, hanem a tipusaik is.
4. Hogyan eriük el ezeket a tovabbi parametereket a Iüggvenyben? Emlekezzünk,
hogy parameter atadaskor a parameterek ertekei a STCK-en keresztül adodnak
at a Iüggvenynek. STCK-en ezek az ertekek egymas utani memoria
rekeszekben lesznek eltarolva. hol beIeiezódik az egyik parameter, közvetlen
azutan kezdódik a masik. Mivel a Iix parameterek elerhetók, ezert könnyen
meghatarozhato, hol kezdódnek a többiek: az utolso Iix parameter utan. Erre a
memoriacimre allitottuk a p double pointert.
5. Tehat a Iix parameterek segitenek annak meghatarozasaban, hogy hol vannak a
memoriaban a Iüggveny vegrehaitasa ideien a tovabbi parameterek, es hogy
hanyan vannak. Sót tovabbi inIormaciot is hordozhatnak roluk.
6. z osszeg Iüggveny for ciklusaban összeadiuk azt az n darab double erteket,
amelyek követik n-et a STCK-en.

Kenyelmesebbe tehetik a valtozo parameterszamu Iüggvenyek irasat az alabbi könyvtari
Iüggvenyek: va_start, va_arg, va_end. Ezen Iüggvenyek deklaracioi az stdarg.h
header-allomanyban talalhatok.
Ime a Ienti Iüggveny a segitsegükkel:
void osszeg (int n, . . . /· definíció ·/

double d, s = 0;
va_list argptr;
va_start(argptr, n;
for( ; n; n - -

d = va_arg(argptr, double;
s += d;
·
va_end(argptr;
printf(¨%5.2lf\n¨, s;
·



egiegvzesek.
1. a va_list egy mutatotipus, amely az stdarg.h allomanyban van deIinialva.
Egy ilyen tipusu pointert deIinialtunk, az argptr-t.
2. a va_start raallitia argptr-t az utolso Iix parametert (ielen esetben az n)
követó elsó parameterre.
3. a va_arg .kiolvas¨ egy adott tipusu erteket (ielen esetben double-t), az argptr
cimról, es lepteti .tipusnyit¨ a pointert.
4. a va_end meghivasa biztositia a STCK rekonstrualasat.


142
2. feladat.
Iriunk egy myprintf nevú valtozo parameterszamu Iüggvenyt, amely kepes
kiirni char, int, long, float, double es karakterlanc tipusu ertekeket (az egyszerúseg
kedveert megengediük, hogy hasznalia a printf-et).

#include<stdarg.h
#include<stdio.h
void myprintf(const char ·fs, ...

va_list arg_ptr;
va_start(arg_ptr, fs;
while(·fs

if (·fs==%

fs++;
switch(·fs

case c:printf(°%c¨, va_arg(arg_ptr, int;break;
case d:printf(°%d¨, va_arg(arg_ptr, int;break;
case f:printf(°%f¨, va_arg(arg_ptr, double;break;
case s:printf(°%s¨, va_arg(arg_ptr, char·;break;
case l:fs++;
if(·fs==d
printf(°%ld¨, va_arg(arg_ptr, long;
else
printf(°%lf¨, va_arg(arg_ptr, double;
·
fs++;
·
else putchar(·fs;fs++;·
·
va_end(arg_ptr;
·
main(

char c=A; long b=12; float d=3.14;
myprintf(°%c\n%d\n%ld\n%f\n%lf\n%s¨,
c, 256, b, d, 1.41, °alma¨;
return 0;
·

Figvelem'
regebbi verziokkal valo kompatibilitas erdekeben, a karakterek, Iüggetlenül attol,
hogy konstansok vagy valtozok, int-kent adodnak at. Hasonlokeppen a float-ok
double-kent adodnak at.




143
9. Parancssor argumentumok (a main függvény paraméterei)

Felmerül a kerdes: ki hivia meg a main Iüggvenyt? z operacios rendszer, hiszen
a main Iüggveny meghivasa ielenti a program elinditasat. Ugyancsak az operacios
rendszer az, amely megkapia a main altal esetleg visszateritett erteket. dhat-e at
parametereket az operacios rendszer a main Iüggvenynek? valasz igen, es ezeket
nevezzük parancssor argumentumoknak.
mikor parancssorbol inditiuk el a programunkat, akkor altalaban begepeliük a
nevet es enter-t ütünk. program nevet azonban, követhetik parameterek
(argumentumok). Sót maganak a programnak a neve is ugy van tekintve, mint a 0-dik
argumentum. z argumentumokat legalabb egy space-el, vagy tab-al valasztiuk el
egymastol.

programinditas szintaxisa parancssorbol:
<program_nev <arg_1 <arg_2 . . . <arg_n

Ha a C környezetból inditiuk a programunkat, akkor a parameters vagy
arguments parbeszedablakban adhatok meg az argumentumok (a program nevet ide
nem kell beirni).

Hogyan erhetiük el a main Iüggvenyben a parancssor argumentumokat?
main Iüggveny ket parametere segitsegevel. z elsó parameter int tipusu es a
parancssor argumentumok szamat tartalmazza, a masodik pedig egy char pointer-tömb,
amely pointereket tartalmaz Ieleiük, mint karakterlanc-konstansok Iele.

z alabbi program kiiria a kepernyóre a parancssor argumentumokat es szamukat:
main(int argc, char · argv¯`

int i;
printf(°Az argumentumok száma: %d\n¨, argc;
for(i = 0; i < argc; i ++
printf(°Az %d-ik argumentum: %s\n¨, i, argv¯i`;
return 0;
·

egiegvzesek.
1. Feltetelezve, hogy programunknak a teszt.c nevet adiuk, a teszt alma
korte dio programinditas nyoman, a kepernyón a következó ielenik meg:
Az argumentumok száma: 4
Az 0-ik argumentum: teszt
Az 1-ik argumentum: alma
Az 2-ik argumentum: korte
Az 3-ik argumentum: dio
144
2. Termeszetesen nem kötelezó az argc (argument counter) es az argv (argument
vector) parameterneveket hasznalni, bar ezek a megszokott elnevezesek.
3. Mivel argv egy char pointer-tömb neve, ezert alapvetóen egy char ·· tipusu,
es igy is deIinialhato: char ·· argv.
4. Gyakran allomanyneveket adunk at a main Iüggvenynek parancssor
argumentumon keresztül. Ha ezek eleresi utakat is tartalmaznak, nem kell a
backslash-eket megduplazni a parancssorban, hiszen ez automatikusan
megtörtenik a parameteratadaskor.

Feladat.
dott ket bemeneti allomany: egyik egy n elemú szamsorozatot, a masik pedig egy
n L n meretú matrixot tartalmaz. Ellenórizzük, hogy a szamsorozat azonos-e a matrix
Ióatloianak Ientról leIele valo beiarasaval. A bemeneti allomanvok neveit parancssorbol
vesszùk at.

9.9 Rekurzív függvények

#ekurzivitasrol akkor beszelünk amikor egy Iüggveny önmagat hivia meg
(önrekurzio vagy direkt rekurzio). Ha ezt közvetve teszi meg, azaz meghiv egy
Iüggvenyt, amely aztan meghivia ót, akkor kòlcsònòs, vagy indirekt rekurziorol van szo.
main(int argc, char ··argv

FILE · f, · g;
int i, j, n, m, a¯50`, b¯50`¯50`;
if (!(f = fopen (argv[1], °r¨)
puts(°Hiba1¨; return 0;·
if (!(g = fopen (argv[2], °r¨)
puts(°Hiba2¨; return 0;·
fscanf(f, °%d¨, &n;
for(i=0;i<n;i++
fscanf(f, °%d¨, &a¯i`;
fclose(f;
fscanf(g, °%d¨, &m;
for(i=0;i<m;i++
for(j=0;j<m;j++
fscanf(g, °%d¨, &b¯i`¯j`;
fclose(g;
if(n!=m
puts(°Nem találnak a méretek¨;return 0;·
for(i=0;i<n;i++
if(a¯i`!=b¯i`¯i`
puts(°Nem FJÁTLJ¨;return 0;·
puts(°FJÁTLJ¨;
return 0;
·
145
Iüggelekben közlöm egy cikkem kivonatat, amely egy diaklapban ielent meg, es
a következó cimet viselte: #ekurzio egvszerúen es erdekesen. Mivel a cikk reszletesen
bemutatia a rekurzio mechanizmusat, itt csupan ket peldan keresztül mutatom be.

int fibonacci(int n

if(n==0 || n==1 return n;
else return fibonacci(n-1+fibonacci(n-2;
·

typedef void fv(int; /· a fuggvények típusa ·/
fv fv_a, fv_b; /· a fuggvények prototípusa ·/
void fv_a(int i

. . .
if(i0 fv_b(i/2;
. . .
·
void fv_b(int j

. . .
if(j0 fv_a(j-1;
. . .
·

Kitúzòtt feladatok.
(Egyes Ieladatok eseteben szükseges lehet a Iüggvenyek megtervezese. Peldaul mik
legyenek a parameterei, hogyan törtenien a parameteratadas stb. Mindenik Ieladatban,
amennyiben erre szükseg van, az allomanyneveket parancssorbol vegyük at.)

1) Helyetesitsd ki a kerdóieleket, ugy hogy szintaktikailag helyes, müködókepes program
legyen, amelyben nem kerül sor egyetlen implicit tipus-konverziora sem.
#include <stdio.h
.
jonatan alma;
main(

printf(¨%lf¨, alma(1,1.0,A;
return 0;
·
. alma (. a, . b, . c
return . a + . b + . c;·
2) Iriunk Iüggvenyt, amely a parameterkent kapott
a) termeszetes szamrol eldönti, hogy prim-e
b) termeszetes szamnak visszateriti a Iorditottiat
c) ket termeszetes szamnak meghatarozza a legnagyobb közös osztoiat
d) ket termeszetes szamnak meghatarozza a legkisebb közös többszöröset
e) termeszetes szambol törli a nulla szamiegyeket, es visszateriti a kitörölt
szamiegyek szamat
I) termeszetes szamot ugy alakitia at, hogy rendezve legyenek a szamiegyei
146
3) Iriunk Iüggvenyt, amely parameterkent megkapia egy tömb cimet es a benne tarolt
szamsorozat elemeinek szamat, es
a) ellenórzi, hogy a szamsorozat elemei növekvó sorrendben vannak-e
b) kepezi a szamsorozat szimmetrikusat
c) rendezi a szamsorozator az elemek utolso szamiegyei szerint.
d) töröl egy harmadik parameterkent kapott erteket a rendezett szamsorozatbol
e) beszur egy harmadik parameterkent kapott erteket a rendezett szamsorozatba
I) szamokat olvas be 0 vegielig es ezeket beszuria a rendezett szamsorozatba
4) Iriunk Iüggvenyt, amely parameterkent megkap egy polinomot es egy erteket, es
visszateriti a polinom eretket az adott helyen.
5) Iriunk Iüggvenyeket, amelyek parameterkent megkapnak ket polinomot, es
meghatarozzak az összeg, különbseg, szorzat, hanyados es maradek polinomokat.
6) Iriunk Iüggvenyt, amely parameterkent megkap
a) egy karakterlancot es eldönti palindrom-e
b) ket karakterlancot es eldönti, hogy egymas anagrammai-e
7) Iriunk saiat Iüggvenyeket, amelyek az alabbi könyvtari Iüggvenyeket valositiak meg:
strlen, strcmp, strcpy, strcat, strchr, strstr
8) Iriunk Iüggvenyt, amely megvalositia egy karakterlanc beszurasat egy masik
karakterlancba egy adott helyre.
9) Iriunk Iüggvenyt, amely kitöröl egy karakterlancbol egy adott helyról, adott szamu
karaktert
10)Iriunk Iüggvenyt, amely egy matrix sorait, illetve oszlopait, ugy rendezi at, hogy a
Ióatlon levó elemek növekvó sorrendben legyenek. Ket sor, illetve oszlop,
Ielcserelesehez hasznaliunk segedIüggvenyt.
11)Iriunk Iüggvenyeket, amelyek ket matrixnak meghatarozzak az összeget,
különbseget, szorzatat
12)Iriunk Iüggvenyt, amely dinamikusan letrehoz parameterkent megadott meretú
egydimenzios tömböt, Ieltölti veletlen egeszekkel egy parameterkent megadott
intervallumbol, maid visszateriti a tömb cimet.
13)Iriunk Iüggvenyt, amely dinamikusan letrehoz parameterkent megadott meretú
ketdimenzios tömböt, Ieltölti veletlen egeszekkel egy parameterkent megadott
intervallumbol, maid visszateriti a tömb cimet.
14)Iriunk Iüggvenyt, amely dinamikusan letrehoz egy olyan karakterlancot, amely az
angol abece nagybetúit tartalmazza abece sorrendben
15)dott n szemely neve es cime (varos, utca, szam) egy szöveges allomanyban. Van-e
olyan szemely, amelynek varosneve az utcaneve Iorditottia (Iüggvennyel ellenórizd a ket
karakterlanc palindromsagat)? Hany szemely lakik prim szam alatt (Iüggvennyel
ellenórizd egy szamrol, hogy prim-e)?
16)Iriunk olyan keresó Iüggvenyt, amely barmilyen tipusu tömbben megkeres egy
elemet (parameterkent kapion egy összehasonlito Iüggvenyt).
17)Iriunk olyan keresó Iüggvenyt, amely visszateriti barmilyen tipusu tömb legkisebb
elemenek cimet (parameterkent kapion egy összehasonlito Iüggvenyt).
147
18)Rendezzük qsort-al egy ketdimenzios tömb sorait ugy, hogy az elsó oszlop elemei
csökkenó sorrendben legyenek
19)dottak n szemely adatai (nev, cim, születesi datum). Rendezzük az adatokat
qsort-al az következó kriteriumok szerint: nev, varos, születesi ev, születesi datum.
20)dottak n szemely adatai (nev, cim, születesi datum), amelyeket egy struct tipusu
tömbben tarolunk. Egy struct-pointer tipusu tömb elemeit allitsuk ra a struct
tömb elemeire. Rendezzük a pointereket qsort-al az altaluk megcimzett struct-ok
következó mezói szerint: nev, varos, születesi ev, születesi datum. Iriuk ki a
rendezett adatsorokat (a beolvasashoz es kiirashoz is hasznaliunk Iüggvenyt).
21)Iriunk Iüggvenyt, amely barmilyen tipusu matrix elemeit rendezi sorIolytonos
beiaras szerint (parameterkent kapion egy összehasonlito Iüggvenyt).
22)Iriuk meg a myscanf Iüggvenyt nehany tipusra.
23)Iriunk rekurziv Iüggvenyt, amely meghatarozza egy parameterkent kapott
termeszetes szam
a) szamiegyeinek összeget
b) szamiegyeinek szorzatat
c) eldönti, hogy tartalmaz-e 5-ös szamiegyet
d) meghatarozza az 1-es szamiegyek szamat
e) a legkisebb szamiegyet
I) a legnagyobb szamiegyet
g) a Iorditottiat
24)Iriunk rekurziv Iüggvenyt, meghatarozza egy parameterkent kapott szamsorozat
a) elemeinek összeget
b) legkisebb eleme erteket
c) legnagyobb eleme pozicioiat
d) pozitiv elemeinek szamat
e) tartalmaz-e paros elemet
25)Iriunk rekurziv Iüggvenyt, amely egy binaris szamsorozatnak meghatarozza a
paritasat. paritas 1 ha az egyesek szama paratlan, ellenkezó esetben 0.
26)Iriunk rekurziv Iüggvenyt, amely beszuro rendezessel rendez egy szamsorozatot.
27)Iriunk rekurziv Iüggvenyt, amely kiiria egy szamsorozat elemeit Iorditott
sorrendben.
28)Iriunk rekurziv Iüggvenyt, amely egesz szamokat olvas be nulla vegielig, maid kiiria
az utolso n szamot Iorditott sorrendben.
29)Iriunk rekurziv Iüggvenyt, amely kiiria egy szamsorozat pozitiv elemeit a beolvasas
sorrendieben, a negativakat pedig a beolvasas Iorditott sorrendieben.
30)Iriunk rekurziv Iüggvenyt, amely egesz szamokat olvas be vakon (iriunk egy ilyen
beolvaso Iüggvenyt) nulla vegielig, maid kiiria a paratlan sorszamuakat a beolvasas
sorrendieben, es alaiuk a paros sorszamuakat Iorditott sorrendben.
31)Iriunk rekurziv Iüggvenyt, amely kiiria egy karakterlanc paratlan sorszamu szavait a
beolvasas sorrendieben, es alaiuk a paros sorszamuakat Iorditott sorrendben.
148
32)Iriunk rekurziv Iüggvenyt, amely ugyanazt valositia meg mint az strcmp könyvtari
Iüggveny.
33)Iriunk rekurziv Iüggvenyt, amely visszateriti az n-edik Iibonacci szamot.
34)Iriunk rekurziv Iüggvenyt, amely visszateriti a C(n,k erteket.
35)Iriunk rekurziv Iüggvenyt, amely egy n meter hosszu rudat Ieldarabol egy es ket
meteres rudakra az összes lehetseges modon.
36)Iriunk rekurziv rendezó Iüggvenyt (quick sort) a szetvalogatas algoritmusra (lasd a
6.1 alIeiezetet).
37)Iriunk rekurziv rendezó Iüggvenyt (quick sort) az összeIesüló algoritmusra (lasd a 6.1
alIeiezetet).
38)dottak n szemely adatai (vezeteknev, keresztnev, születesi datum (ev, honap, nap), cim
(varos, utca, hazszam)). Iri programot, amely menúból valaszthatoan, rendezi az adatokat
valamely mezó szerint. Hasznaliuk a qsort könyvtari Iüggvenyt, es keszitsünk egy
Iüggveny-pointer tömböt, amely elemei a mezók szerinti összehasonlito Iüggvenyekre
mutassanak.
39 Mit ir ki az alabbi programreszlet (anelkül valaszoliunk, hogy leIuttatnank a
programot)?
int f(int areturn ++a;·
int ff(int ·areturn ++(·a;·
int g(int areturn f(++a++;·
int g1(int ·areturn f(++(·a++;·
main(

int a=1;
printf(°%d\n%d\n%d\n%d¨,f(a, ff(a, g(++a, g1(&a;
return 0;
·
40)Egy szöveges allomanybol kiolvasunk egy n elemú egesz szamsorozatot egy dinamikusan
leIoglalt tömbbe.
a) Hatarozzuk meg a szamok legkisebb szamiegyeinek az összeget.
b) Rendezzük (qsort) a szamokat ugy, hogy legkisebb szamiegyeik szerint csökkenó
sorrendben legyenek! rendezett szamsorozatot iriuk egy kimeneti allomanyba!
41)dott n, illetve n·n tanulo neve es teleIonszama egy szöveges allomanyban. tanulok
adatait egy nxn meretú ketdimenzios struct-tömbben taroliuk el. Iri egy olyan
Iüggvenyt, amely különbözó szamolasi müveleteket tud vegezni a ketdimenzios tömbben
eltarolt struct-matrix Ióatlo alatti haromszögeben, attol Iüggóen milyen Iüggvenyt kap
parameterkent.
a) Szamoliuk meg azokat a szemelyeket a Ióatlo alatt, akik neve negyszavas!
b) Szamoliuk meg azokat a szemelyeket a Ióatlo alatt, akiknek a teleIonszama
palindrom?
42)Egy szöveges allomanybol kiolvasunk egy n elemú egesz szamsorozatot egy dinamikusan
leIoglalt tömbbe.
a) Hatarozzuk meg a szamok szamiegyei szorzatanak az összeget.
b) Rendezzük (qsort) a szamokat ugy, hogy szamiegyeik szorzata szerint növekvó
sorrendben legyenek! rendezett szamsorozatot iriuk egy kimeneti allomanyba!
149
43)dott n, illetve n tanulo neve es teleIonszama egy szöveges allomanyban. tanulok
adatait egy n elemú egydimenzios struct-tömbben taroliuk el. Iri egy olyan Iüggvenyt,
amely különbözó ellenörzesi müveleteket tud vegezni az egydimenzios tömbben eltarolt
adatokon, attol Iüggóen milyen Iüggvenyt kap parameterkent.
a) Ellenórizzük, hogy van-e olyan szemely a Ióatlo Ielett, akiknek a keresztneve es
vezetekneve azonos!
b) Ellenórizzük, hogy van-e olyan szemely a Ióatlo Ielett, akiknek a teleIonszama
szamiegyei növekvó sorrendben követik egymast!
44)Iri egy Iüggvenyt, amely barmely elemtipusu es elemszamu tömb elemeit szetvallogatia az
elsó elem szerint, anelkül, hogy rendezne a tömböt.
45)dott egy szöveges allomanyban n apa keresztneve, gyerekei szama es ezek
keresztneveik.
a) Iriuk ki egy masik allomanyba az apak adatait gyerekszam szerint csökkenó sorrendbe
rendezve. (qsort)
b) Hany Barni (Barnika, Barna) gyerek van?
c) Keszits statisztikat, hogy az egyes nevú apaknak összesen hany Barni Iiuk van?


150
0 Makrók


mikor Iorditunk egy programot, a szoszerinti Iorditast (kompilalast) rendszerint
megelózi, egy elóIeldolgozasnak (prekompilalasnak) is nevezett múvelet. z
elóIeldolgozonak (preprocesszor), amely ezt vegzi, szolnak, az, altalaban a programok
eleien megielenó, ugynevezett direktivak. Ezek a # karakterrel kezdódnek. Ilyen
direktivak, peldaul, amelyeket mar hasznaltuk, az #include es a #define.
következókben a #define direktivaval Iogunk alaposabban megismerkedni.

Hasznalatanak szintaxisa:
#define <szimbolum <helyettesítendó_szöveg

zert, hogy különvalianak a programban hasznalt azonositoktol, a
szimbolumokat csupa nagybetúvel szokas irni.
z elóIeldolgozas többek között abbol all, hogy az elóIeldolgozo atvizsgalia a
program Iorraskodianak minden sorat, hogy tartalmaz-e a #define direktivaval
korabban deIinialt szimbolumot. Ha talal, kicsereli a helyettesitendó karaktersorozattal.
Ez addig ismetlódik, amig vagy nincs mar az adott sorban szimbolum, vagy csak olyan
van, amely mar egyszer helyettesitve lett (a vegtelen rekurzio elkerülese vegett).

alabbi peldakbol kiderül, hogy a szimbolum deIiniciot leggyakrabban arra hasznaliuk,
hogy nevet adiunk konstansoknak vagy atnevezzùnk tipusokat.

#define EJ$ \0
#define TRUE 1
#define FAL$E 0
#define YE$ TRUE
#define bool int
#define MENUCJL 20
#define MENULINE 5
#define BJRDER 2
#define MENURJW (MENULINE + BJRDER
#define MENU$IZE (MENURJW · MENUCJL

egiegvzesek.
1. z elsó harom peldaban szerepló szimbolikus konstansokra szinte minden C
programban szükseg van, ha iol attekinthetó programot szeretnenk irni.
2. YE$-t a TRUE segitsegevel deIinialtuk, ezert kettós helyettesitessel valik maid
1-gye: minden YE$ elóször lecserelódik TRUE-ra, maid minden TRUE lecserelódik
1-re.
3. Bar a C nyelvben nincs explicit logikai tipus, mi letrehozhatunk egy ui
.alapszot¨, a bool-t, amit ezutan termeszetesen eppugy hasznalhatunk, mint az
151
eredeti int-et (hiszen ugyis arra cserelódik le), de hasznalataval az egyes
valtozok szerepet iobban kidomborithatiuk. z alapszo ielleg hangsulyozasa
erdekeben hasznaltunk ennel a szimbolumnal kisbetút.
4. tovabbi deIiniciok a szimbolumok leggyakrabban hasznalt területet mutatiak
be: a különbözó .búvkonstansokat¨ nevvel ellatva egy helyre gyúitiük össze,
vilagosabba teve hasznalatukat es megkönnyitve modositasukat.
5. z utolso ket peldabol az is kiderül, milyen Iontos szem elótt tartani, hogy
szöveghelyettesitesról van szo. Ha a MENURJW deIinicioiabol a latszolag
Iölösleges zaroieleket elhagynank, akkor MENU$IZE elsó lepesben,
nem((MENULINE + BJRDER · MENUCJL-ra, hanem (MENULINE + BJRDER ·
MENUCJL-ra cserelódne le, ami vegeredmenykent a kivant 140 helyett 45-öt
eredmenyezne mindenütt, ahol MENU$IZE-t hasznaltunk.
6. Mivel a Ielesleges zaroielek bait nem okozhatnak, szokiuk meg, hogy a #define
deIiniciokban szerepló kiIeiezeseket allig Ielzaroielezzük.

makrok lehetóve teszik, hogy a szöveghelyettesites parameterezhetó legyen:
Peldak:
#define abs(x ((x < 0 . ( - (x : (x
#define min(a, b ((a < (b . (a : (b
#define negyzet(x ((x · (x

makrohivasok ket lepesben haitodnak vegre:
1. lecserelódik a deIinicioiabeli Iormalis alakra.
2. a Iormalis parameterek lecserelódnek a hivasbeli aktualis parameterekre.

Peldaul az
alfa = abs(y + 2;
utasitasban, a makrohivas a következókeppen Iog vegrehaitodni:
1. lepes utan:
alfa = ((x < 0 . ( - (x : (x;
2. lepes utan:
alfa = ((y + 2 < 0 . ( - (y + 2 : (y + 2;

Ienti peldak azt is kiemelik, hogy nemcsak a helyettesitó kiIeiezest Iontos
zaroielekkel vedeni, hanem a helyettesitendó parametereket is.

Ha y erteke -3, akkor alfa-ba 1 kerül, mint az varhato.
Ha azonban a deIinicio helyettesitó reszeben az x-et vedó zaroieleket elhagytuk
volna, akkor az alfa 5-öt kapna ertekül.


Meg valamire nagyon oda kell Iigyeliünk. Ha nem vagyunk eberek, makrohivasainknak
nem kivant mellekhatasaik lehetnek.
152
Ime egy pelda: a
beta = negyzet(++a;
utasitas, a makrohivas lecserelese utan, a következókeppen Iog kinezni:
beta = ((++a · (++a;
nem kivant mellekhatas az, hogy az a valtozo ketszer kerül növelesre. z ilyen
rendellenessegek a legegyszerúbben ugy kerülhetók el, hogy makrohivas parameterekent
csak valtozot hasznalunk. Peldaul növelhettük volna a-t a makrohivast megelózóen,
hogy a makrot a-ra kellien meghiviuk.
Ha negyzet-et Iüggvenykent irtuk volna meg, akkor az elóbbi problemaval nem
talaltuk volna szembe magunkat, de a makros megvalositasok mindig gyorsabb kodot
eredmenyeznek mint a Iüggvenyek hasznalata. Ennek az a magyarazata, hogy a
Iüggvenyhivasok a Iutasi idóból vesznek el, mig a makrohivasok mar az elóIorditas alatt
lecserelódnek. Ezert van az, hogy a C rendszerben sok könyvtari .Iüggveny¨, a
valosagban makro (peldaul a getchar().
Egy masik elónye a makroknak a Iüggvenyekkel szemben a .tipus Iüggetlenseg¨.
Peldaul, ha Iüggvenykent szeretnenk megoldani a negyzetreemelest, akkor kellene
irnunk külön int-negyzetreemelót, Iloat-negyzetreemelót, stb. Mivel a makrok eseteben
egyszerú szöveghelyetesitesról van szo, ezert .univerzalisak¨.

Vegkövetkezteteskent elmondhato, hogy a makrok hasznalata igen kivanatos, de
Iigyelmet igenyel.

Ha egy szimbolum vagy makro altal leIoglalt azonositot Iel szeretnenk szabaditani, azt
az:
#undef <szimbólum
utasitassal tehetiük meg.
Ezt követóen az elóIeldolgozo a szimbolum (makro) tovabbi elóIordulasi helyeit nem
kiseri Iigyelemmel. Termeszetesen egy uiabb #define utasitassal uiradeIinialhatiuk ezt
a szimbolumot is.

egiegvzesek.
1. Egy makro deIinicios reszeben, ket szintaktikai egyseg összeIorrasztasara
hasznalhato a ##.
Peldaul a #define VAR(I, J (I ## J makrodeIinicio eseten a VAR(x, 5
szövegból x5 lesz a kiIeites utan.
2. Ha barmely makroargumentum ele #-t irunk, az karakterlancca alakul.
Igy a makrokiIeiteskor a #arg alaku parameterhivatkozasok az ¨arg¨ alakkal
helyettesitódnek.
3. makrok deIinicios reszeben levó beagyazott makrok kiIeitese a külsó makro
kiIeitesekor törtenik meg, nem pedig a deIinialasakor.
4. makrok ket lepesben cserelódnek le, ahogy azt az alabbi pelda is mutatia:
delta = min(x + 1, y;
153
elsó lepes utan:
delta = ((a < (b . (a : (b;
masodik lepes utan:
delta = ((x + 1 < (y . (x + 1 : (y;


Feladat.
Iriunk egy Iüggvenyt, amely egy parameterkent kapott szamsorozatot rendez.
rendezeshez szükseges cseret valositsuk meg makro segitsegevel.


Kitúzòtt feladatok.
1) Hogyan müködik az alabbi program? (backslash karakterrel több sorba tördelhetók a
#define sorok)

#include <stdio.h

#define def_fn(name, operation\
int name(int a, int b\
\
int c = a operation b;\
printf("%d %s(%s %d = %d\n", a, #name, #operation, b, c;\
return c;\
·\

def_fn(plus,+;
def_fn(minus,-;

main(
Elsó változat

# define csere(a,b a=a+b;b=a-b;a=a-b;

void rendez(int n, int a¯`
int i,j;
for(i=0; i<n; i++
for(j=i+1; j<n; j++
if(a¯i`a¯j` csere(a¯i`, a¯j`·
·
Második változat

# define csere(T,a,b T v=a;a=b;b=v;·

void rendez(int n, int a¯`
int i,j;
for(i=0; i<n; i++
for(j=i+1; j<n; j++
if(a¯i`a¯j` csere(int, a¯i`, a¯j`
·
154

plus(1,1;
minus(1,1;
return 0;
·

2) Mit ir ki az alabbi program? z MPI konstans a pi erteket tartalamazza. Ieladatot
Ieiben oldiuk meg!

#include <stdio.h
#define kerulet(r 2 · M_PI · r
double terulet(double rreturn M_PI · r · r ;·
main(

printf(°%lf\n%lf¨, kerulet(1+2, terulet(1+2;
return 0;
·

155
ÁI I ománykezeIés (I nput / Output mûveIetek)

Egy C program, valamely Ieladat bemenó adatait, a billentyúzetról vagy egy
allomanybol olvassa be (Input). z eredmenyek a kepernyóre, a nyomtatora vagy egy
allomanyba kerülnek kiirasra (Output). billentyúzet, valamint a kepernyó es a
nyomtato is IelIoghato allomanykent. billentyúzet egy olyan .allomany¨, amelyból
csak olvasni lehet (input Iile), es a begepelt karaktereket tartalmazza. Ezzel szemben a
kepernyó-, illetve nyomtato-.allomanyba¨ csak irni lehet (output Iile), es a kiirt
karaktereket tartalmazza. hattertarakon (Iloppy, merev lemez, CD, magneses szalag
stb.) tarolt allomanyok eseteben ugy az olvasasi, mint az irasi múvelet lehetseges
(input/output Iile). hattertarak is ket csoportba sorolhatok: veletlen (Iloppy, merev
lemez, CD) illetve szekvencialis (magneses szalag) eleresúek. Iizikai egysegek tehat,
ahonnan a bemenó adatok .iönnek¨, illetve ahova az eredmenyek .mennek¨, nagyon
sokIelek lehetnek, mindeniknek megleven a speciIikus adattarolasi modia. Ennek a
kenyelmetlen sokIelesegnek az elreitese erdekeben vezettek be C-ben a stream-eket
(Iluxus).
stream-et ugy kell elkepzelni mint egy iranyitott adatIluxust.
C program mindig egy stream-en keresztül lep kapcsolatba egy adott
allomannyal. Ugy is mondhatnank, hogy a stream egy logikai egyseg, amely beekelódik
a C program es valamely Iizikai egysegen letezó allomany köze.
mig az allomanyok magukon viselik az illetó Iizikai egysegek iellegzetessegeit,
a stream-ek alapvetóen egyIormak. Mivel a program a valosagban a stream-be ir, illetve
innen olvas, ezert minden allomanyt egyIormanak lat. Termeszetesen ez nem ielenti azt,
hogy az allomanyoknak nem marad meg az input, output vagy input/output iellege.
Mi ennek a gyakorlati haszna? helyett, hogy a különbözó tipusu allomanyok
kezelesehez külön-külön Iüggvenysort hasznalnank (a. abra), barmilyen allomanyt
kezelhetünk ugyanazzal a Iüggvenysorral (b. abra). Peldaul ugyanazokkal a
Iüggvenyekkel irunk barmilyen allomanyba, Iüggetlenül attol, hogy azok hol, azaz
melyik periIerian vannak eltarolva.
C
program
allomany 1
allomany 2
allomany n
.
.
.
C
program
allomany 1
allomany 2
allomany n
.
.
.
STREAM
a.) b.)
C Iüggvenyek
Operacios
rendszer
156
Bar az iment azt mondtuk, hogy a stream-ek egyIormak, megis egy bizonyos
szempontbol ket csoportba sorolhatok. Vannak szöveges stream-ek es binaris stream-ek.
Ebból adodoan egy allomanyt ketIelekeppen lehet nezni. Szöveges stream-en keresztül
ugy latiuk mint egy karaktersort, a binarison keresztül pedig mint egy byte-sort. Ez a
ketIeleseg azonban nem valtoztat azon a tenyen, hogy a C nyelv egyetlen Iüggveny-
keszletet hasznal barmilyen tipusu allomany kezelesehez. Csupan arrol van szo, hogy
bizonyos Iüggvenyek egy kisse maskent múködnek, ha szöveges stream-en keresztül
kezeliük az allomanyt, mintha binaris altal tennenk ezt meg.
Gyakran ez annyit ielent, hogy iraskor, illetve olvasaskor amennyiben szöveges
stream-en keresztül törtenik az allomanykezeles bizonyos karakter-konverziokra
kerülhet sor. Peldaul, iraskor a .newline¨ (\n) karakter a carrige-return (·CR~) es
line-Ieed (·LF~) karakterparra alakulhat at. Ilyen esetben olvasaskor a Iorditott iranyu
konverziora kerül sor (·CR~ ¹ ·LF~ -~ \n). Igy magyarazhato, hogy szöveges
stream-ek hasznalata eseten az allomany nagyobb meretú lehet (több karaktert
tartalmazhat), mint a programunk altal beleirt karakterek szama.
Binaris stream-ek eseten semmilyen konverziora nem kerül sor, es ezert az
allomany merete mindig megegyezik a beleirt byte-ok szamaval.
Ezt a ketIeleseget a programozo munkaianak megkönnyitese celiabol vezettek be.
Ha olyan allomanyrol van szo, amely alapvetóen egy szöveget tartalmaz, különbözó
hosszu sorokba rendezett karaktersort, amelyet talan meg szeretnenk ieleniteni a
kepernyón vagy ki szeretnenk nyomtatni, akkor nyilvan szöveges stream-en keresztül
Iogiuk kezelni. Miert elónyös ez? kepernyóre valo iraskor, illetve a nyomtataskor, az
ui sorba valo ugras a ·CR~ es ·LF~ karakterek hatasara törtenik meg. Ha szöveges
stream-et hasznalunk, nem kell nekünk gondoskodnunk ezen karakterek beirasarol
minden sor vegere, hiszen a \n karakter automatikusan ezekke konvertalodik.
mennyiben egy allomany nem szöveget tartalmaz, es nem all szandekunkban
kepernyón vagy nyomtatasban megieleniteni, celszerú binaris allomanykent kezelni.
Ugyancsak az allomanyok e ket csoportba sorolhatosaganak köszönhetó az, hogy
egyes Iüggvenyek a szöveges allomanyok kezelesere alkalmasabbak, masok pedig a
binarisokera. Peldaul fprintf-Iel rendszerint szöveges stream-en keresztül irunk egy
olyan allomanyba, amely szöveget tartalmaz. Ellenben az fwrite-ot szokas hasznalni
amennyiben binaris stream-be törtenik az iras.
Hogyan törtenik milyen Iüggvenyek altal egy C programbol az allomanykezeles?

. ÁI IománykezeI õ függvények

Egy allomanyt egy C programban egy FILE · tipusu ugynevezett
allomanypointer kepvisel. FILE tipus egy struct tipus, amely az stdio.h header-
allomanyban van deIinialva.
Az allomanvpointer definialasanak szintaxisa.
FILE · <állomány_pointer;
157

z alabbiakban az allomanypointert fp-vel Iogiuk ielölni.

hhoz, hogy egy allomanyon múveleteket tudiunk vegezni, elóször meg kell
nyitnunk. Ekkor törtenik egy stream kiielölese az allomany reszere. z, hogy mikent
nyitiuk meg az allomanyt, meghatarozza, hogy milven I/O múveletek haithatok vegre
raita (iras, olvasas, iras a vegere, iras/olvasas). kiielölt stream tipusa, amint lathattuk
azt beIolyasolia, hogy mikent haitodnak vegre az emlitett múveletek. z alabbi
Iüggvenyek a legIontosabb Iile-múveletek elvegzeset biztositiak.

Allomanv megnvitasa.
fp = fopen(<állomány_név, <mód;
mód lehet:
rt,r szöveges mod, olvasas
wt,w szöveges mod, letrehozas es iras
at,a szöveges mod, iras a vegere
rb binaris mod, olvasas
wb binaris mod, letrehozas es iras
ab binaris mod, iras a vegere
r+t,r+ szöveges mod, olvasas/iras
w+t,w+ szöveges mod, letrehozas es iras/olvasas
a+t,a+ szöveges mod, iras a vegere vagy letrehozas es iras/olvasas
r+b binaris mod, olvasas/iras
w+b binaris mod, letrehozas es iras/olvasas
a+b binaris mod, iras a vegere vagy letrehozas es iras/olvasas

z r es a modok Ieltetelezik, hogy az allomany letezzen a megnyitaskor. Ha w
modban nyitunk meg egy allomanyt es mar letezett, tartalma elvesz. Ha sikerült a
megnyitas az fopen az allomanypointert teriti vissza. Sikertelenseg eseten NULL
pointert.

Allomanv bezarasa.
int fclose(FILE · fp;

ras/Olvasas allomanvba/bol.

Karakteriras allomanyba:
int fputc(int ch, FILE · fp;
Beiria (es vissza is teriti) a ch karaktert az allomanyba.
regebbi verziokkal valo kompatibilitas vegett a ch karakter int tipusu.

Karakterolvasas allomanybol:
158
int fgetc(FILE · fp;
Kiolvas egy karaktert az allomanybol es eredmenykent visszateriti.
regebbi verziokkal valo kompatibilitas miatt a karaktert int tipusukent teriti
vissza.

Karakterlanc-iras allomanyba:
int fputs(const char · s, FILE · fp;
Beiria az s cimen kezdódó karakterlancot az allomanyba.
Hiba eseten EJF-et terit vissza, aminel erteke rendszerint -1.

Karakterlanc-olvasas allomanybol:
char · fgets(char · s, int h, FILE · fp;
Kiolvas egy karakterlancot az s cimre, amig sorvegielt (a gets-el ellentetben ez
is bekerül a karakterlancba) talal vagy kiolvasott mar h-1 karaktert, maid lezaria
a karakterlancvegiellel.
Ha sikerült, a karakterlanc cimet teriti vissza, ha nem, NULL pointert.

Iras Iormatalva allomanyba:
int fprintf(fp, <formázósor, <kifejezés_lista;
Hasonloan múködik mint a printf, csakhogy az fp allomanyba (altalaban
szöveges) törtenik az iras. sikeresen kiirt kiIeiezesek szamat teriti vissza.

Olvasas Iormatalva allomanybol:
int fscanf(fp, <formázósor, <változócím_lista;
Hasonloan múködik mint a scanf, csakhogy az fp allomanybol (altalaban
szöveges) törtenik az olvasas. sikeresen beolvasott valtozok szamat teriti
vissza. z allomanyvegiel olvasasakor -1(EJF terit vissza.

z elóbbi Iüggvenyeket altalaban szöveges allomanyok eseteben hasznaliuk, az alabbi
kettót viszont kiIeiezetten binarisoknal. size_t tipus az stdio.h header-
allomanyban van deIinialva es rendszerint elóielnelküli egesz.

dott szamu adatblokk kiirasa allomanyba:
size_t fwrite(const void·<p,size_t<m,size_t<nr,FILE·fp;
p cimról nr darab, m byte meretú blokkot kiir az allomanyba.
Visszateriti a sikeresen kiirt blokkok szamat.

dott szamu adatblokk beolvasasa allomanybol:
size_t fread(void·<p,size_t <m, size_t <nr, FILE · fp;
Beolvas az allomanybol a p cimre nr darab, m byte meretú blokkot.
Visszateriti a sikeresen beolvasott blokkok szamat.

159
ibalekerdezes.
int ferror(FILE · fp;
.Igaz¨-at terit vissza, ha egy allomanymúvelet kapcsan hiba adodott. Ellenkezó
esetben erteke .hamis¨.

Minden olyan allomanyhoz, amelyhez lehetseges a veletlen hozzaIeres (Iloppy,
merevlemez stb.), kapcsolodik egy pozicio-mutato, amely az allomanyban az aktualis
poziciot (karaktert vagy byte-ot) ielöli. z iras- es olvasas-múveletek mindig ettól a
poziciotol kezdódóen törtennek. pozicio-mutato leptetese automatikusan törtenik a
beolvasott vagy kiirt adatokat követó poziciora. Ha letrehozasra es irasra nyitunk meg
egy allomanyt (w-mod), akkor kezdetben csak az allomanyvegielt tartalmazza, es a
pozicio-mutato ide mutat. Minden kiirast követóen a pozicio-mutato automatikusan
tovabblep az allomanyvegielre. Hasonloan múködik az allomany vegere törtenó iras is
(a-mod), csakhogy ez esetben az allomany megnyitaskor mar letezik, a pozicio-mutato
viszont ugyancsak az allomanyvegielre mutat. Olvasasra valo megnyitaskor (r-mod) a
pozicio-mutato kezdetben az allomany eleiere mutat.
Peldaul egy szöveges allomanyt -amely alapvetóen egy karaktersor- az alabbi
modon kepzelhetünk el (Ielteteleztük, hogy az allomany elsó soraban, egy szemely
vezetek es kereszt neve talalhato szoközzel elvalasztva, a masodik soraban pedig az
illetó szemely születesi eve). nyilak azt szemleltetik, mikent mozdul el az allomany-
mutato az egymast követó olvasasi múveletek altal (a fscanf Iüggveny múködeset
reszletesen targyaliuk a 11.2 alIeiezetben):

a g y I s t v a n ·CR~ ·LF~ 1 9 6 7 ·EOF~



FILE ·f;
char knev¯30`, vnev¯30`;
int ev;
f=fopen(°szemely.txt¨,¨r¨;
fscanf(f,¨%s¨,vnev;
fscanf(f,¨%s¨,knev;
fscanf(f,¨%d¨,&ev;

!ozicio-mutato lekerdezes es mozgatas.

Allomanyvegiel erzekelese:
int feof(FILE · fp;
ullatol különbözó erteket (logikai igaz) terit vissza, ha az allomanyvegielt
probaltuk kiolvasni.

160
pozicio-mutatonak az allomany eleiere allitasa:
void rewind(FILE · fp;

pozicio-mutato beallitas:
int fseek(FILE · fp, long <nr, int <viszonyítási_pont;
Elmozditia nr byte-al a pozicio-mutatot, a viszonyítási_pont -hoz kepest.
viszonyítási_pont parameter lehetseges ertekei:
$EEK_$ET (allomany eleie)
$EEK_CUR (pozicio-mutato aktualis pozicioia)
$EEK_END (allomany vege)
ullat terit vissza sikeres múvelet eseten.

pozicio-mutato lekerdezese:
long ftell(FILE · fp;
Visszateriti a pozicio-mutato aktualis pozicioiat. Hiba eseten -1-et terit vissza.

Hatter inIormacio az allomanykezelessel kapcsolatban:
belsó memoria es a hattertarak közötti adatcsere, köztudottan lassu. z adatsin
hatekonyabb kihasznalasa erdekebe, kidolgoztak egy puIIerelt rendszert az I/O
múveletek lebonyolitasara. Peldaul, allomanyba valo iraskor, rendkivül leIoglalna az
adatsint, ha minden byte-al egyenkent szaladnank valamely periIeriara. Ennek elkerülese
erdekebe az allomany megnyitasakor altalaban letreiön a memoriaban az allomany
reszere egy ugynevezett memoria puffer. Ez ugy múködik mint egy raktar. z
allomanyba iro Iüggvenyek az adatokat egyelóre csak ezen puIIerbe iriak be, es ha
Ieltelt a puIIer, akkor egyszerre, egyetlen hattertar-hozzaIeressel, a puIIer telies tartalma
kiirodik az allomanyba. Valami hasonlo törtenik olvasaskor is. hattertarrol a puIIerbe,
egyszerre egy egesz puIIernyi adat kerül beolvasasra, es innen olvasnak maid az
allomanyolvaso Iüggvenyek.
z iment Ielvazolt mechanizmusnak van egy mellekhatasa: amit kiirunk az
allomanyba, az csak kesóbb a puIIer üritese utan iut el eIIektiv a hattertarra
(automatikus puIIer üritesre kerül sor valahanyszor Ieltelik a puIIer, a program
beIeieztevel, illetve az fclose Iüggvenyhivas hatasara). Letezik azonban egy Iüggveny,
amelynek segitsegevel, programbol ellenórizhetiük, hogy mikor törtenien a puIIer ürites.

emoria-puffer ùritese.
int fflush(FILE · fp;
Ha fp bemeneti allomanyt (csak olvasni lehet belóle) kepvisel (peldaul a
billentyúzetet), akkor egyszerúen törlódik a puIIer tartalma. mennyiben fp
irasra lett megnyitva, a puIIer tartalma beirodik az allomanyba. Iüggveny nullat
terit vissza sikeres múvelet eseten, es EJF-t, azaz -1-et ha valamilyen hiba
törtent.
161
em puIIerelt I/O múveletek eseten (peldaul kepernyóre valo iras vagy
billentyúzetról valo nem puIIerelt olvasas (getch, getche)) az fflush
hatastalan.
Pelda:
Tegyük Iel, hogy egy egysoros szöveges allomany az angol abece nagybetúit
tartalmazza abece sorrendben. Minden maganhangzot iriunk at kisbetúre.
FILE · f; char c;
f = fopen(°abc.txt¨, °r+t¨;
while (!feof(f
c = fgetc(f;
if (!feof(f&&(c==A||c==E||c==I||c==J||c==U
fseek(f, -1, $ET_CUR; fputc(c + (a - A, f;
fflush(f; /* minden karakter atiras utan beiriuk (visszairiuk)
a puIIer tartalmat az allomanyba */
·
·
fclose(f;
Ha nem szerepelne az fflush a kodban, akkor megallitva a programot közvetlen
az fclose elótt, meg semmilyen valtozas nem lenne eszlelhetó az abc.txt
allomanyban. Ienti pelda azt is megmutatia, hogy az fseek hasznalatat is a
puIIerelt allomanykezeles teszi lehetóve.

egiegvzes.
O Binaris allomanyok eseten a -1 ertek (az EJF erteke), lehet az allomany valamely
elemenek erteke is. De egyes Iüggvenyek az EJF visszateritesevel ielzik a hibat
vagy azt, hogy allomanyvegielnel vagyunk. zert, hogy biztosak legyünk a
visszateritett -1-es ielenteseben, hasznaliuk a hibaellenórzesre az ferror, az
allomanyvegiel erzekelesere pedig az feof Iüggvenyeket.

Bezart allomanvok letòròletok. illetve atnevezetok egv C programbol.

Allomany törlese:
int remove(<állomány_név;
ullat terit vissza sikeres múvelet eseten.

Allomany atnevezese:
int rename(<régi_állomány_név, <új_állomány_név;
ullat terit vissza sikeres múvelet eseten.

Meg egy kerdes tisztazasra var: ha stream-eken keresztül minden allomany (a
billentyúzet es a kepernyó is) egyIormanak latszik, es ebból adodoan ugyanazon
Iüggvenykeszletet hasznaliuk barmilyen allomany kezelesere, akkor mi a helyzet a
printf es scanf, illetve egyeb olyan Iüggvenyekkel, amelyek kiIeiezetten a
billentyúzetról valo olvasasra es a kepernyóre valo irasra szolgalnak?
162
Letezik az SI C-ben harom elódeIinialt allomanypointer (stream), stdin,
stdout es stderr. stdin a billentyúzethez (standard bemenet) rendelt stream-re mutat,
stdout es stderr pedig, a kepernyóhöz (standard kimenet) rendeltre. billentyúzet-
allomany, illetve a kepernyó-allomany megnyitasa, illetve bezarasa (minden ehhez
kapcsolodo múvelettel), automatikusan törtenik a programIutas kezdetekor, illetve
beIeieztevel. Igy barmely allomanykezeló Iüggvenyben, ha allomanypointerkent stdin-
t, illetve stdout-ot hasznalunk, akkor az a billentyúzetre, illetve a kepernyóre Iog
vonatkozni. Következeskeppen az alabbi vazlatos Iüggvenyhivasok teliesen
egyenertekúek:
fscanf(stdin, ...; scanf(...;
fprintf(stdout, ...; printf(...;
fputs(..., stdout; puts(...;
fgets(..., stdin; gets(...;
fputc(..., stdout; putchar(...;
fgetc(stdin; getchar(;
Miert vezettek akkor be a masodik oszlopban levó Iüggvenyeket? programozo
kenyelmeert.

Egy masik erdekes tulaidonsag, amely kihasznalhato a standard stream-ek eseteben az,
hogy (stdin, stdout, stderr) atiranyithatok az freopen Iüggveny segitsegevel.


Stream- fluxus-) atiranvitas.
FILE · freopen(<állomány_név, <mód, FILE · <stream;
Egy letezó stream-hez (allomanypointerhez) ui allomanyt rendel.
Pelda:
char s¯80`;
freopen(°ki.txt¨, °w¨, stdout;
printf(°Ird be a karakterláncot:¨; /* ki.txt-be ir */
gets(s; /* billentyúzetról olvas */
printf(°%s¨, s; /* ki.txt-be ir */
Ienti peldaban atiranyitottuk az stdout stream-et a kepernyóról a ki.txt
allomanyra, aminek következteben a printf az illetó allomanyba ir.

.2 A scanf/fscanf iII etve printf/fprintf függvények
közeI ebbrõI

Csak a scanf es a printf Iüggvenyeket Iogiuk bemutatni hiszen az fscanf
es az fprintf hasonloan müködnek. z alabbi inIormaciok kiegeszitik azt ami a 2.
Ieiezet tartalamaz a szobanIorgo Iüggvenyekkel kapcsolatban

A scanf függvény

163
Szintaxisa: int scanf(<formázósor, <változócím_lista;

Lebonyolitia a megadott valtozok ertekeinek a beolvasasat a billentyüzetról a
megIeleló memoria cimekre, es eredmenykent visszateriti a beolvasott es eltarolt ertekek
szamat. Iormazosor % karakterrel bevezetett Iormazo karakterei ielzik, hogy milyen
konverziokra van szükseg, hiszen a billentyüzetról karakterlanc Iormaiaban erkeznek az
adatok, de a memoriaban az illetó valtozo tipusanak megIeleló belsó abrazolasban kell
eltarolni óket. scanf puIIerelt beolvasast vegez ami azt ielenti, hogy a begepelt
adatok a billetyúzet puIIerebe kerülnek elóször, maid az ENTER billentyú leütesekor a
scanf innen olvassa be óket a memoriaba. Tehat a scanf alapvetóen a puIIerból
olvas.

ogvan mùkòdik a scanf fùggvenv?
z eddigi peldainkban a scanf Iüggveny Iormazosora csak % karakterrel
bevezetett Iormazo karaktereket tartalmazott, minden valtozo reszere egy-egy Iormazo
karaktert. valosagban viszont egyeb (barmilyen) karakterek is szerepelhetnek a
Iormazosorban. Eppen ez indokolia a % karakter hasznalatanak szüksegesseget a
Iormatumleiro karakterek bevezetesere. Tehat a Iormazosor altalanos alakia a
következó:
|egyéb karakterek||formátumleíró||egyéb karakterek||formátumleíró| ...
Sót altalanos esetben a Iormatumleiro is több adatot tartalamazhat mint egyszerüen a %
karaktert es a Iormazo karaktert. Altalanos alakia:
%¯·`¯mezószélesség`¯h/l/L`formázó karakter

Ha szerepel a Iormatumleiroban a · karakter, akkor ugyan kiolvasodik a
billentyüzet puIIereból a megIeleló adat, de nem kerül eltarolasra a memoriaba. Ugy is
mondhatnank, hogy atugoriuk az illetó erteket. Termeszetesen az atugrott adatok nem
szamolodnak bele a scanf Iüggveny altal visszateritett ertekbe.
mezószelesseggel azt ielezhetiük a scanf-nek, hogy legIennebb ennyi
karaktert olvasson be az illetó valtozo ertekekent.
leggyakrabban hasznalt Iormazo karaktereket (c, d, i, u, o, x, I, s, p)
bemutattuk a 2. Ieiezetben, telies listat pedig megtalaliuk a Help-ben. Ket peldan
keresztül megemlitünk ket különleges esetet:

A n formázókarakter

int a, b, c;
scanf(°%d%d%n¨, &a, &b, &c;
printf(°%d %d n¨, a, b, c;
z n Iormazo karakter hatasara nem a puIIerból lesz ertek olvasva a megIeleló
valtozoba, hanem a scanf Iüggveny altal addig beolvasott karakterek szama tarolodik
164
el benne. Ienti peldaban az 12 789 bemenetre a kimenet 12 789 lesz. Mivel a
scanf, a %n megielenese pillanataig, 6 karaktert olvasott be (1, 2, SPCE, 7, 8, 9),
ezert a c valtozo erteke 6 lett.

A scanset használata

int i; char s1¯80, s2¯80`;
scanf(°%d[abcdefg]%s¨, &i, s1, s2;
printf(°%d %s %s¨, i, s1, s2;
szögletes zaroielek köze irt karakterhalmazt, scanset-nek nevezzük. Ha
karaktertömbbe valo olvasaskor scanset-et hasznalunk az s Iormazo karakter helyett,
akkor a karakter beolvasas addig tart mig ezek elemei az illetó halmaznak. Peldaul ha a
Ienti esetben a billentyüzet puIIerbe az 123abcdtye karaktersort gepeltük be, akkor a
kepernyón 123 abcd tye Iog megielenni. Mivel t nem eleme a scanset-nek, az s1
tömbbe valo olvasas beIeiezódik amikor a t karakterhez ertünk. Igy hat a Iennmaradt
karakterek s2-be lesznek beolvasva. Ha a scanset a ^ karakterrel kezdódik, akkor ez azt
ielzi a scanf Iüggvenynek, hogy csak olyan karaktereket Iogadion el, amelyek nem
elemei a scanset-nek. scanset ily modon valo hasznalata lehetóve teszi több szavas
mondatok beolvasasat scanf-el. Ezt a lehetóseget mutatiak be az alabbi peldak:
char mondat¯80`; scanf(°%s¨, mondat;
z alma a fa alatt bemenetre a mondat tömbbe csupan az alma szo olvasodik
be, mivel a scanf csak az elsó Ieher karakterig Iog olvasni.
char mondat¯80`; scanf(°[^\n]¨, mondat;
Ugyanarra a bemenetre ez esetben a mondat tömb tartalam alma a fa alatt lesz,
mivel a scanf minden karaktert olvasni Iog kiveve a new line karaktert (\n).

scanf Iüggveny müködesenek pontos megertese erdekebe tekintsük az alabbi
ket karakterlancot:
1. billentyüzet puIIerebe begepelt karakterlancot
2. scanf Iüggveny Iormazosorat
Mindket karakterlanchoz kepzeletben rendeliünk egy nyilat (pointert), amely az aktualis
karakterre mutat. Kezdetben mindket nyil a megIeleló karakterlanc eleiere mutat. z
ENTER billentyú leütesekor a scanf az alabbi algoritmus szerint bonyolitia le a
beolvasast. MegIigyelhetó, hogy alapvetóen harom .üzemmodban¨ dolgozik attol
Iüggóen, hogy a Iormazosorban az aktualis karakter
1. nem Ieher-karakter es nem % karakter
2. Ieher karakter
3. % karakter
a a Iormazosor aktualis karaktere nem Ieher-karakter es nem % karakter
akkor ellenörzi, hogy a puIIer aktualis karaktere ugyanaz a karakter-e,
ha igen akkor mindket nyil atlepi az illetó karaktert,
165
ha nem akkor megszakad a beolvasas es a scanf visszateriti az addig
sikeresen beolvasott ertekeket
a a Iormazosor aktualis karaktere Ieher-karakter
akkor mindket nyil atlepi az összes utiaban levó Ieher karaktert, es az
ezeket követó elsó nem Ieher karakteren allapodnak meg. (Ha a puIIerben
nem Ieher karakter következett, akkor puuIer nyilia nem mozdul)
a a Iormazosor aktualis karaktere a % karakter,
akkor ellenörzi, hogy az ezt követó karakterek megIelelnek-e a Iormatumleiro
szintaxisanak,
ha nem Ielenek meg, akkor a % karaktert ugy kezeli mint akarmelyik nem
Ieher karaktert,
ha megIelelnek akkor annak megIelelóen iar el, hogy milyen tipusu adatot
kell beolvasni
ha karaktert kell beolvasni (c a Iormazo kararkter), akkor
beolvassa a puIIer aktualis karakteret (Iüggetlenül attol, hogy Ieher
vagy sem), es ennek SCII kodiat eltarolia a megIeleló valtozoba.
puIIer nyilia a következó karakterre, a Iormazosor nyilia pedig a
Iormatumleirot követó karakterre Iog mutatni.
ha egyeb tipusu erteket kell beolvasni (egesz, valos, karakterlanc),
akkor a puIIer nyilia atugoria az utiaban allo estleges Ieher
karaktereket, maid beolvasasra kerülnek az ezeket követ ó
karakterek egeszen az elsó -a tipusra nezve- .illegalis¨ karakterig.
Ilyen .illegalis¨karakterek peldaul a Ieher karakterek (a scanf-el
beolvasott karakterlancok sem tartalmazhatnak Ieher karaktereket),
vagy numerikus tipus eseten a nem szamiegy karakterek, sót
nyolcas szamrendszer eseten a 8-as es 9-es szamiegyek is, stb. Ha a
Iormatumleiroban mezószelesseget is megadtunk, akkor legIennebb
ennyi karakter kerül beolvasasra. Masszoval, ha az elsó .illegalis¨
karakter kesóbb következne mint a mezószelessegben megadott
karakterszam, akkor csak mezószelessegnyi karakter lesz beolvasva
az illetó valtozo ertekekent. beolvasott karaktersort a scanf
atalakitia a soronkövetkezó valtozo tipusanak megIelelóen maid
eltarolia a megielólt memoria cimre (ez elmarad ha a
Iormatumleiroban szerepel a · karakter; lasd Iennebb). puIIer
nyilia az utolso kiolvasott karaktert követó karakterre Iog mutatni,
a Iormazosore pedig a Iormatumleirot követó karakterre. Ha
egyetlen karakter sem lett beolvasva, atalakitva es eltarolva, akkor
a beolvasas megintcsak megszakad es a scanf az addig sikeresen
beolvasott es eltarolt eretkek szamat teriti vissza.

166
egiegvzes. Megtörtenhet, hogy a billetntyúzetról puIIerelt beolvasast biztosito
Iüggvenyek (scanf, getchar, gets) nem talaliak üresen a billentyúzet-puIIert mert
egy elózó beolvasas .szemetet¨ hagyott maga utan, es ez megzavarhatia a müködesüket.
Ennek elkerülese erdekebe hasznaliuk puIIer üritesre a fflush(stdin;
Iüggvenyhivast minden beolvasas elött.

z alabbi peldak tanulmanyozasa segithet meg tisztabban latni a scanf
Iüggveny müködeset. puIIerben talalhato $PACE karaktereket Ielköver s karakterrel
ielöltük. Iormazosorban normalis szoközt hasznaltunk.

!uffer tartalama Jaltozok erteke
int a,b;
scanf(°%1d¨, &a; 123 a=1
scanf(°%1d %·1d %1d¨, &a, &b; 123 a=1, b=3

char a,b;
scanf(°%c %c¨, &a, &b; psssssq a=p, b=q
scanf(°%c%c¨, &a, &b; psssssq a=p, b=
scanf(°1%c¨, &a; 12 a=2
21 a nem kap erteket

float a;double b; long double c;
scanf(°%f %lf %Lf¨, &a, &b, &c; 2.5s2.7s4.3 a=2.5,b=2.7,c=4.3
scanf(°%f%lf¨, &a, &b; 2s3 a=2.0, b=3.0
scanf(°%3f¨, &a; 1.25 a=1.2
scanf(°%f 1 %lf¨, &a, &b; 1.2s1s-1.7 a=1.2, b=-1.7

char a,b; int c; float d;
scanf(° %c%3d%c 12 %f¨, &a, &c, &b, &d;
ssass123412-41.7
a=a, c=123
b=4, d=-41.7

A printf függvény

Szintaxisa:
int printf(<formázósor, <kifejezés_lista;

Iormazosor altalanos alakia:
|egyéb karakterek||formátumleíró||egyéb karakterek||formátumleíró| ...

Iormatumleiro altalanos alakia:
167
%¯igazítás,elójel`¯mezószélesség` ¯.pontosság` ¯h/l/L/#`formázókarakter

Csak azokat a szempontokat Iogiuk bemutani, amelyek nem lettek erintve a 2.
Ieiezetben.
kiiras mindig a kepernyó aktualis pozicioiatol kezdódóen törtenik.
mezószélesség egy minimalis szamu karakterpoziciot ielent, amelyen a kiiras
megvalosul. Ha a kiirando kiIeiezes erteke kevesebb karaktert tesz ki mint a
mezószelesseg, akkor ezen belül a kiiratas törtenhet iobbra vagy balra igazitottan
(leginkabb akkor elünk ezzel a lehetóseggel, ha tablazatos Iormaban szeretnenk adatokat
megieleniteni). Implicit $PACE-ekkel töltódnek Iel a Iennmaradt poziciok, de ha a
mezószelesseg erteket megelózi egy nulla, akkor szamok iobbra igazitasa eseten a
Ieltöltó karakter a nulla lesz. z is szabalyozhato, hogy pozitiv numerikus ertekek
eseten megielenien-e a + elóiel.
(a peldakban Ielköver s-el ielöltük a kepernyón megielenó $PACE karaktereket)

z igazítás,elójel mezó hatasa:
- balra igazitas törtenik es iobbrol $PACE-ekkel potolodik ki
mezószelessegig.
+ pozitiv numerikus ertek eseten is megielenik az elóiel.
$PACE pozitiv numerikus ertek eseten az elóiel helyet $PACE ielenik meg
Pelda:
printf(°%d,%-5d,%05d,%+d,% d¨, -13, 13, 13, 13;
kiiratus eredmenye:
-13,13sss,00013,+13,s13

z pontosság mezó hatasa valtozik a kiirando adat tipusatol Iüggóen:
O Valos tipusok eseten azt hatarozza meg, hogy hany tizedes pontosaggal törtenien
a megielenites (implicit 6 tizedes pontosaggal).
Pelda:
printf(°%lf,%5.2lf¨, 3.1415, 3.1415;
z alabbi karaktersor ielenik meg a kepernyón:
3.141500,s3.14
O Karakterlanc kiirataskor a maximalis mezószelesseget ielenti amelyen a
megielenites megtörtenhet. Hosszabb karakterlanc eseten a plusz karakterek
levagodnak. Ha a karakterlanc rövidebb Iigyelmen kivül marad a pontossag
eretke.
Pelda:
char ·szo=¨abc¨;
printf(°%s,%5s,%.2s,%5.2s¨,szo, szo, szo, szo;
kimenet az alabbi lesz:
abc,ssabc,ab,sssab
168
O Ha valamely egesz tipusra alkalmazzuk, akkor azt a minimalis szamiegyet ielenti,
amelyen a szam megielenitesre kerül. Kevesebb szamiegyú egeszek eseten a
szam eleiehez nullak lesznek ragasztva. Ha több szamiegyú a kiirando ertek mint
a megadott pontossag, akkor nem lesz Iigyelembe veve.
Pelda:
int a=12;
printf(°%d,%05d,%5d,%.4d,%5.4d¨,a, a, a, a, a;
kepernyón a következók ielennek meg:
12,00012,sss12,0012,s0012

mezószélesség es a pontosság helyett szerepelhet a * karakter. Ilyenkor a
kiIeiezeslista soronkövetkezó ertekeit Iogia a printf Iüggveny mezószelesseg es
pontossag ertekkent ertelmezni.
Pelda:
printf(°%·.·f¨,10, 4, 1234.55;
kimenet az következó lesz: s1234.5500

Kiegeszitesek a formázó karaktereket illetóen:
O Ha az x vagy X illetve o Iormazokarakterek elótt a # modositot hasznaliuk, akkor
a hexa ertekek 0x, az oktal ertekek pedig 0 preIixxel Iognak megielenni.
O double eretkek tudomanyos alakban valo kiiratasahoz hasznaliuk az e/E
Iormazo karaktereket.
O Valos ertekek eseten a g/G Iormazokarakterek hatasara a printf valaszt az f
illetve e/E hasznalata között az alapian, hogy melyik biztosit rövidebb alakot.
Pelda:
double f;
for(f=0.1; f<1.0e+10; f·=10 printf(¨%g ¨, f;
z alabbiak ielennek meg a kepernyón:
1 10 100 1000 10000 100000 1e+06 1e+07 1e+08 1e+09
O printf Iormazosoraban is szerepelhet a %n Iormazokarakter. Hasznalata azt
Ieltetelezi, hogy a kiirando kiIeiezesek között -a megIeleló helyen- ielenien meg
egy egesz valtozo cime, ahova a printf eltarolhatia azon karakterek szamat,
amelyeket a %n-t megelózóen irt ki.
Pelda:
int a=12345, b;
printf(¨Az %d%n szám ¨, a, &b;
printf(¨%d számjegyu ¨, b-3;
kepernyón a következó ielenik meg:
Az 12345 szám 5 számjegyu
169
Feladatok.
1. Iriunk programot, amely karaktereket olvas be a billentyúzetról allomanyvegielig
(<ctrlZ), es beiria óket egy szoveg.txt nevú szöveges allomanyba.
2. Iriunk programot, amely kiiria a szoveg.txt nevú szöveges allomany tartalmat
a kepernyóre.
3. Iriunk programot, amely a szoveg.txt nevú szöveges allomany sorait
sorszamozza.
Ctlet. Letrehozunk egy masik allomanyt, amely sorszamozva tartalmazza a
sorokat, maid az eredeti allomanyt letöröliük, es az uiat atnevezzük az eredeti
nevere. Igy, ugy Iog tünni minta az eredeti allomanyt modositottuk volna.
4. Iriunk programot, amely a szoveg1.txt nevú szöveges allomanyt, a
szoveg2.txt nevú szöveges allomany utan Iúzi.
5. Iriunk programot, amely a be.txt nevú szöveges allomanybol beolvassa egy
szamsorozat elemeinek szamat, illetve az elemeket (int tipusu ertekeket), es
letrehoz belólük egy adat.dat nevú binaris allomanyt. Ezutan kodolia a binaris
allomanyt ugy, hogy minden bitiet tagadia. Vegül kiiria a kodokat a ki.txt
szöveges allomanyba.


1. feladat

FILE · f; char c;
if (!(f = fopen (°szoveg.txt¨, °w¨
puts(°Hiba¨; return 0;·
while (!feof(stdin

c = getchar(;
if(!feof(stdinfputc(c, f;
·
fclose(f;

170




1eladat

FILE · f; char c;
if (!(f = fopen (°szoveg.txt¨, °r¨
puts(°Hiba¨; return 0;·
while (!feof(f
c = fgetc(f;
if (!feof(f putchar(c;·
fclose(f;

1eladat

FILE · f, · t; char s¯100`; int i = 0;
if (!(f = fopen (°szoveg.txt¨, °r¨
puts(°Hiba1¨; return 0;·
if (!(t = fopen (°temp.txt¨, °w¨
puts(°Hiba2¨; return 0;·
while (!feof(f
i ++;
fgets(s, sizeof(s, f;
if (!feof(f fprintf(t, °%d %s¨, i, s;
·
fclose(f; fclose(t;
remove(°szoveg.txt¨;
rename(°temp.txt¨, °szoveg.txt¨;
4 1eladat

FILE · f, · g; char c;
if (!(f = fopen (°szoveg1.txt¨, °r¨
puts(°Hiba1¨; return 0;·
if (!(g = fopen (°szoveg2.txt¨, °a¨
puts(°Hiba2¨; return 0;·
while (!feof(f
c = fgetc(f;
if (!feof(f fputc(c, g;·
fclose(f;
fclose(g;

171

1eladat
void be_txt(char ·, int ·, int · · ;
void ki_bin(char ·, int, int ·;
void titkosit(char ·;
void bin_to_txt(char ·,char ·;
main(

int n, · a;
be_txt(°be.txt¨, &n, &a;
ki_bin(°adat.bin¨, n, a;
titkosit(°adat.bin¨;
bin_to_txt(°adat.bin°, °ki.txt°;
free(a;
return 0;
·
void be_txt(char · s, int · pn, int ·· pa

FILE · f; int i;
f = fopen(s, °r¨;
fscanf(f, °%d¨, pn;
·pa = (int · malloc((·pn · sizeof(int;
for(i = 0;i < ·pn; i++
fscanf(f, °%d¨, (·pa + i;
fclose(f;
·
void ki_bin(char · s, int n, int · a

FILE · f;
f = fopen(s, °wb¨;
fwrite(a, n, sizeof(int, f;
fclose(f;
·
void titkosit(char · s

FILE · f; int x;
f = fopen(s, °r+b¨;
for(;;
if(!fread(&x, 1, sizeof(int, f break;
fseek(f, -sizeof(int, $EEK_CUR;
x =
~
x;
fwrite(&x, 1, sizeof(int, f;·
fclose(f;
·
void bin_to_txt(char · s1,char · s2

FILE · f, ·g; int x;
f = fopen(s1, °rb¨; g = fopen(s2, °w¨;
for(;;
if(!fread(&x, 1, sizeof(int, f break;
fprintf(g, °%d\n¨, x;·
fclose(f; fclose(g;
·
172
. AI acsony szintû áI IománykezeI és
Mivel a C nyelv eredetileg az UIX operacios rendszer ala lett kigondolva,
gyakorlatilag minden implementacioia a nyelvnek tartalmaz egy masodik
allomanykezeló rendszert is, amelyet Unix-like filekezelo rendszernek vagy alacsony
szintú filekezelesnek neveznek.
z alacsony szintú Iilekezeles nem puIIerelt, azaz a rendszer nem tartalmaz
beepitett puIIereket. Igy, peldaul a read es write Iüggvenyek (lasd lennebb)
közvetlenül a memoriabol olvasnak, illetve ide irnak, valahanyszor meghivodnak.
Bar a UIX-like rendszer nem SI standard, amint mar emlitettük,
gyakorlatilag minden C Iordito elIogadia. Viszont a C nyelv sok implementacioia nem
engedi meg az SI es UIX Iüggvenyek együttes hasznalatat ugyanabban a
programban.
magas szintú Iilekezelestól elteróen, az alacsonyszintú Iilekezeles nem FILE-
pointert, hanem int tipusu file-leirot (fd file descriptor) hasznal az allomanyok
azonositasara a C program kereten belül.
z alabbiakban összeIoglaliuk az alacsonyszintú Iilekezeles Ióbb Iüggvenyeit.
Prototipusaik az io.h header-allomanyban talalhatok meg. Egyesek közülük igenylik a
fcntl.h header-allomanyt is.

i allomanv letreozasa.
int create(const char · <állománynév, int <mód;

<mód, az alabbi makrok egyike lehet (a fcntl.h header-allomanyban
vannak deIinialva):
J_RDJNLY Olvasas
J_WRJNLY Iras
J_RDWR Olvasas/Iras
Ha a create Iüggvenynek sikerül letrehozni az allomanyt, akkor az
allomanyleirot (fd) teriti vissza. Sikertelen múvelet eseten -1-et.

Letezo allomanv megnvitasa.
int open(const char · <állománynév, int <mód;

Ugyanazok a megiegyzesek ervenyesek mint az elóbbi Iüggveny eseten.
Pelda olvasas/irasra valo allomanymegnyitasra:
int fd;
if(fd=open(¨be.dat¨, J_RDWR==-1
puts(¨Nem tudom megnyitni az állományt¨; return;·

Allomanv bezarasa.
int close(int fd;

173
ras allomanvba.
int write(int fd, const void ·<puffer, unsigned <szám;

Kiir az fd Iileleiroval azonositott allomanyba <szám darab baitot a <puffer
cimról.

Olvasas allomanvbol.
int read(int fd, const void ·<puffer, unsigned <szám;

Beolvas az fd Iileleiroval azonositott allomanybol <szám darab baitot, a
<puffer cimre.

Allomanv tòrlese.
int unlink(const char · <állománynév;

Jeletlen ozzaferes az allomanvoz.
long lseek(int fd, long <nr, int <kezdet;

Elmozditia <nr byte-al a pozicio-mutatot, <kezdet-hez kepest.
kezdet parameter lehetseges ertekei:
$EEK_$ET (allomany eleie)
$EEK_CUR (pozicio-mutato aktualis pozicioia)
$EEK_END (allomany vege)
pozicio-mutato aktualis erteket teriti vissza sikeres múvelet eseten. Ellenkezó
esetben -1-et.

174
2 Egy átfogó kép a C-nyeI vrõI

Ennek a Ieiezetnek a celia, hogy segitsen az olvasonak Iöle emelkedni mindannak
amit eddig tanult, es ezaltal iobb ralatast nyerni a C programozas bizonyos területeire.

2. StrukturáI t programozás

Az algoritmus
Valahanyszor szamitogeppel szeretnenk megoldani egy Ieladatot, a Ieladat
elemzese utan a Ieladatmegoldas egy hatekony algoritmus keresesevel kezdódik.
strukturalt programozas azt ielenti, hogy algoritmusunk az alabbi harom
alapstrukturabol epül Iel (ezek barhogy kombinalhatok, sót egymasba is agyazhatok):
1. szekvencia (ket vagy több múvelet szekvencialisan követi egymast)
2. elagazas (döntesi struktura)
3. ismetles (elól-teszteló ciklus)
Bòm es Jakopini hires tetele matematikailag igazolta, hogy barmely algoritmus,
amelynek egyetlen bemenete (start) es egyetlen vegpontia (stop) van, Ielepithetó a Ient
emlitett harom szerkezet segitsegevel.
mennyiben több algoritmus is rendelkezesre all, idó- es tarhely igeny alapian
lehet kivalasztani a legmegIelelóbbet.

ogvan iutunk el az algoritmustol a vegreaitato kodig?


Ezen lepesek közül elsódleges Iontossaggal bir a Iorraskod elkeszitese. Ennek
megvalositasa telies mertekben a programozo Ieladata. többi lepest (Iorditas,
összeszerkesztes, Iuttatas) a szamitogep vegzi .parancsra¨.
Programozaskor az algoritmus altal elóirt múveleteket, utasitasokkal
helyettesitiük. strukturalt programozas alapelvei

tükrözódnek a C nyelv alaputasitas-
keszleteben is:
O egymas utani kiIeiezes utasitasok szekvenciat alkotnak
O az if es a switch ket, illetve több elagazasu döntesek

Velemenyem szerint a break es continue ugro utasitasok hasznalata meg összhangban van a
strukturalt programozas alapelvevel, a goto-e viszont mar nem, ezert altalaban kerülendó.
Össze-
szerkesztes
Futtatas
ElóIorditas Forditas
Programozas
Iorras
kod
targy
kod
Iuttathato
kod
algoritmus
175
O a while, for, illetve do-while ciklus utasitasok


2.2 ModuI áris programozás

Egv C program leetseges szerkezete.
<preproceszor direktívák
#include direktívák
#define direktívák
<globális definiálások
típusdefiniálások (typedef
változó definiálások
sajátfuggvény deklarálások (prototípusok
<fuggvénydefiníciók
main fuggvény
sajátfuggvények

Egv C fùggvenv szerkezete.

<típus <név (<formális_paraméter_lista

<lokális_definiálások
<utasítások
·

odulok. blokkok

Eddig minden C programunk egyetlen allomanyban került implementalasra. Ugy
is mondhatnank egy modulbol allt. Lehetóseg van egy nagyobb meretú program több
modulra valo szetbontasara azaltal, hogy Iüggvenyeit bizonyos szempont szerint
csoportositva szetosztiuk több allomanyba. Ezen modulok (allomanyok) külön
Iordithatok, es ennek következteben külön tesztelhetók is. Ez különösen hasznos amikor
több programozo dolgozik együtt, egy nagyobb meretú proiekt megvalositasan.
A modularis programozas alapelve.
O a Ieladatot leosztiuk reszIeladatokra
O külön modulokban implementaliuk a reszIeladatokat megoldo Iüggvenyeket; a
Iómodul, Iogia tartalmazni a main Iüggvenyt
O összeszerkesztiük a modulokat egyetlen programma
Egy modulon belül letezik egy ugynevezett blokk-ierarcia. Blokknak nevezünk
egy kapcsos zaroielek köze zart programreszt. z elsó szinten a Iüggvenyek törzset
kepezó blokkok vannak. Mivel a C nyelv nem teszi lehetóve Iüggveny deIinialasat
Iüggvenyben, ezert a Iüggvenyblokkok mind ugyanazon a hierarchiaszinten vannak.
Ennek ellenere letezik egyIaita alarendeltseg a Iüggvenyek között annak alapian, hogy
melyik Iüggveny melyiket hivia meg.
176
Iüggveny-blokkokon belül lehetnek alblokkok, amelyeket összetett
utasitasoknak neveztünk. hogy erre a hierarchia kiIeiezes is utal, barmely blokknak
lehetnek tovabbi alblokkiai.
Egy modulra nezve globalis deIinialasok minden Iüggvenyen kivül törtennek, a
blokkokra nezve lokalis deIinialasok pedig az illetó blokk eleien.

Ienti elemzes a következó szemleltetesre ihlet: egy C program hasonlithato az
emberi szervezethez. testtagok a modulok, az ezeket alkoto seitek pedig a
Iüggvenyek. Egy iol megirt program iol attekinthetó es hatekony, akar egy egeszseges
ember. Egy gyenge program, meg ha múködókepes is olyan lehet mint egy beteg
(rokkant) ember.

2. Defi níció és dekI aráció
C nyelv különbseget tesz deIinicio es deklaracio között.
Legyen a következó ertelmezes: egy program vegrehaitasa szempontiabol obiektumnak
nevezünk egy nevvel azonositott memoriaterületet.
Iüggvenyek es valtozok ilyen obiektumok.
O Minden Iüggveny nevvel rendelkezik es biztositva van szamara egy
memoriaterület, amely a Iüggveny kodiat tartalmazza (ezert tudtunk beszelni egy
Iüggveny cimeról).
O Hasonlokeppen, a valtozok is nevvel rendelkezó memoriaterületek, amelyek
tartalma viszont a Iüggvenyekkel ellentetben valtozhat.
kkor beszelünk egy obiektum definialasarol, amikor tarhelyet Ioglalunk neki es
meghatarozzuk bizonyos iellemzóit. Deklaralaskor csak beielentiük az illetó obiektumot
a Iorditonak, hogy hivatkozni tudiunk ra. Termeszetesen minden deIinicio egyben
deklaracio is, de Iorditva nem igaz.
Iüggvenyek kapcsan eddig is különbseget tettünk deklaracio (prototipus) es
deIinicio (a Iüggveny megirasa) között, a valtozok eseteben azonban kizarolag deIiniciot
hasznaltunk.
hhoz, hogy hivatkozni tudiunk egy Iüggvenyre, nem volt szükseg arra, hogy
Iöltetlen deIinialva legyen azt megelózóen, a Iordito beerte azzal is, ha talalkozott mar a
deklaracioiaval.
Mivel a könyvtari Iüggvenyek deklaracioi a eader- (Iei) allomanyokba vannak
csoportositva, ezert szükseges volt bizonyos header allomanyok beekelese a
programunkba. z #include direktiva hatasara a preproceszor csak logikailag epiti be a
header allomanyokat a Iorraskodba (tehat a Iorraskod valtozatlan marad).
z #include direktivarol megemlitiük meg, hogy lehetóve teszi barmilyen
allomany logikai beekeleset a Iorraskodunkba. Ebben az esetben az allomany nevet
idezóielek köze tesszük, mint a karakterlanc konstansok eseteben szokas. Ha eleresi utat
is megadunk, nem kell a back-slash karaktereket megduplazni (a C programban ez
kötelezó volt).
177
saiatIüggvenyek deklaracioit celszerú a main Iüggveny elótt Ielsorakoztatni, es
a deIinicioiukat a main utan megirni. Sót különösen ha több modulbol all a
programunk , aianlatos egyes modulokhoz kesziteni saiat header allomanyt, amely
tartalmazza az illetó modulban megirt Iüggvenyek deklaracioit. Ha igy teszünk, akkor
ahhoz, hogy valamely modul Iüggvenyei meghivhassak egy masik modul Iüggvenyeit
csak arra van szükseg, hogy az elsó modul header allomanyat beekeliük a masodik
modulba. (lasd a megoldott Ieladatot a Ieiezet vegen.)
hhoz, hogy a valtozok eseteben atlassuk a különbseget a deIinicio es deklaracio
között, alaposabban meg kell ismerkednünk a valtozo Iogalmaval.

2. A váItozók osztáI yozása

valtozoknak negy iellemzóievel ismerkedtünk meg eddig: nev, cim, tipus (meret es
ertektartomany) es ertek. Tovabbi kerdesek merülnek azonban Iel, amelyek a valtozok
tovabbi iellemzóihez vezetnek el:
O Milyen memoriaterületen törtenik a helyIoglalas?
O Mely programsorokbol erhetó el?
O Mikor iönnek letre es mikor szamolodnak Iel?
1) emoria osztalva: (azt hatarozza meg, hogy hol kerül eltarolasra az adott valtozo a
memoriaban)
i) egy adatszegmensben
ii) a mikroprocesszor valamely regisztereben
iii)a heap-en
iv)a stack-en
2) Latatosagi tartomanva: (azaz a Iorraskod mely programsoraibol erhetó el az illetó
valtozo; az hatarozza meg, hogy hol kerül deIinialasra a program kereten belül)
i) blokk szintú
ii) modul (allomany) szintú
3) Elettartam: (az az idószak ameddig egy valtozo letezik -tarhely van leIoglalva
szamara- a memoriaban; egy valtozo elettartamat a tarolasi osztalya hatarozza meg)
i) statikus elettartam:
(a)az adatszegmensben törtenik tarhelyIoglalas szamukra
(b)leteznek a memoriaban a telies programIutas alatt
(c)automatikusan nullaval inicializalodnak
ii) lokalis elettartam:
(a)a stack-en vagy a mikroprocesszor valamely regisztereben törtenik a
helyIoglalas szamukra
(b)egy adott blokk (Iüggveny vagy összetett utasitas) vegrehaitasanak
ideie alatt leteznek
iii)dinamikus elettartam:
(a)heap-en iönnek letre
178
(b)a helyIoglalas es helyIelszabaditas a programIutas alatt törtenik
specialis Iüggvenyek altal (malloc, calloc, free)

Egy valtozo iment bemutatott iellemzói ketIelekeppen hatarozhatok meg:
O implicit modon: attol Iüggóen, hogy hol kerülnek deIinialasra
O explicit modon: az extern, static, register es auto modosito ielzók altal

Ienti iellemzók alapian a valtozok harom csoportba sorolhatok:
O globalis valtozok
O lokalis valtozok
O sztatikus valtozok

A globalis valtozok tulaidonsagai
(nevüket onnan kaptak, hogy lathatosagi tartomanyuk kiterieszthetó a telies programra
amennyiben több modulbol all)
O minden Iüggvenyen kivül törtenik a deIinialasuk
O letreiönnek mar a programIutas elótt az adatszegmensen es leteznek a telies
programIutas alatt
O implicit sztatikus elettartalmuak
O implicit inicializalva vannak nullaval
O lathatosagi tartomanyuk a modul (allomany), amelyben deIinialtuk óket, es
elerhetóek barhol, a deIinialasuk helyetól leIele az allomany vegeig.
O lathatosagi tartomanyuk kiterieszthetó mas modulokra is. Hogyan?
Egy globalis valtozora hivatkozhatunk olyan modulokban is, amelyek nem tartalmazzak
a deIinialasat, amennyiben beielentiük deklaralas altal.
Ezen deklaralas szintaxisa
extern <típus <változó;
z extern szo arra utal, hogy ·változó mas modulban lett deIinialva. Ez az egyetlen
helyzet amikor sor kerül egy valtozonak a definialasatol különvalasztott deklaralasara.
Pelda:

Felmerül egy kerdes: ha egy valtozo külsó (extern) egy modulban, mekkora a
lathatosagi tartomanya?
1. állomány

int a = 10; /· definició ·/
void nyomtat(; /·deklaráció
·/
main(

nyomtat(; return 0;
·
2. állomány

#include <stdio.h
extern int a; /·deklaráció ·/
void nyomtat(/· definició ·/

printf(°%d¨, a;
·
179
ttol Iügg, hogy hol van deklaralva! Ha minden Iüggveny blokkian kivül, akkor a
deklaracio helyetól leIele az allomany vegeig lathato, ha viszont valamely blokkon
belül, akkor a deklaracio helyetól leIele az illetó blokk vegeig.

A lokalis automatikus) valtozok tulaidonsagai
(nevüket onnan kaptak, hogy latatosagi tartomanvuk blokk szintú es nem terieszteto
ki; csak deIinialhatok)
O deIinialasuk valamely blokk eleien kell törtenien, es lathatosagi tartomanyuk az
illetó blokk területe anelkül, hogy kiterieszthetó lenne
O deIinialasukat megelózheti az auto kulcsszo, de ennek sok ertelme nincs, hiszen
implicit automatikus minden olyan valtozo, amelyet valamely blokkon belül
deIinialunk
O altalaban a stack-en iönnek letre, de ha deIinialasukat megelózi a register
kulcsszo akkor lehetóseg szerint a mikroprocesszor valamelyik regisztereben
törtenik helyIoglalas szamukra
O tarhelyIoglalas szamukra programIutas közben törtenik, amikor a programIutas a
deIinialasukhoz erkezik
O az illetó blokk beIeieztevel Ielszamolodnak (Ielszabadul a szamukra leIoglalt
memoriaterület)
Pelda:

Magyarazat: program ket 4-est Iog kiirni a kepernyóre. Miert? Hiaba volt ketszer
meghivva az f Iüggveny, hiszen minden Iüggvenyhivas vegen a lokalis valtozok
Ielszamolodnak, es uiabb hivas alkalmaval masok iönnek letre.

sztatikus valtozok tulaidonsagai:
(Ha egy valtozodeIinialas ele odairiuk a static szot legyen az globalis vagy lokalis
sztatikussa valtoztatiuk.)
O letreiönnek mar a programIutas elótt az adatszegmensen es leteznek a telies
programIutas alatt
O implicit inicializalva vannak nullaval
O lathatosagi tartomanyuk nem terieszthetó ki
#include <stdio.h
int f (
int b = 3, a = b;
return ++a;
·
main(

printf (°a = %d\n¨, f(;
printf (°a = %d¨, f(;
return 0;
·
180
O ha minden Iüggvenyen kivül lettek deIinialva, akkor lathatosagi tartomanyuk
modul szintú (külsó sztatikus valtozo)
O ha valamely blokk eleien deIinialtuk óket, akkor blokkszintú a lathatosagi
tartomanyuk (belsó sztatikus valtozo)
O tarolasi osztalyukat (adatszegmens) es elettartamukat (sztatikus) tekintve
megegyeznek a globalis valtozokkal, de lathatosagi tartomanyukat illetóen
különböznek ezektól, hiszen lathatosagi tartomanyuk -meg ha ez modulszintú is-
nem terieszthetó ki mas modulokra
O a blokkokon belül deIinialt sztatikus valtozok, lathatosagi tartomanyuk
tekinteteben megegyeznek a lokalis valtozokkal, de tarolasi osztalyukat
(adatszegmens) es elettartamukat (sztatikus) illetóen különböznek ezektól;
leteznek a telies programIutas alatt, de nem erhetók el, csak az illetó blokkon
belül

peldak:

Magyarazat:
O z elsó program 1-et Iog kiirni a kepernyóre, ellenórizve ezaltal, hogy a tenyleg
inicializalva lett nullaval. z a valtozo csak abban különbözik ez esetben a
globalis valtozoktol, hogy lathatosagi tartomanya nem terieszthetó ki mas
modulokra.
O masodik program szintaktikailag hibas, hiszen a lathatosagi tartomanya a
blokk, amelyben deIinialva lett.
O z utolso program demonstralia, hogy a statikus valtozok elettartama a
programIutas vegeig tart, bar lathatosagi tartomanyuk blokkszintú. program
a=1-et, maid a=2-t Iog kiirni a kepernyóre. Fontos eszrevenni, hogy a erteke
megmaradt, bar kileptünk a Iüggvenyból. zert nem zavaro, hogy ketszer is
atmentünk a deIinialasan, mert a sztatikus valtozok reszere a helyIoglalas, akar a
globalis valtozok eseteben, programIutas elótt törtenik.

Ienti tulaidonsagok magyarazattal szolgalnak arra is hogy, miert inicializalhatok a
lokalis valtozok valtozoertekekkel is (programIutas alatt iönnek letre), szemben a
globalis es sztatikus valtozokkal, amelyek csakis allandokat kaphatnak kezdóertekkent
(programIutas elótt iönnek letre).

#include <stdio.h
static double a;
main(

++a;
printf(°a=%.2lf¨,a;
return 0;
·

#include <stdio.h
main(

static double a;·
++a;
printf(°a=%2lf¨,a;
return 0;
·
#include <stdio.h
int f (
static int a;
return ++a;·
main(

printf(°a=%d\n¨,f(;
printf(°a=%d¨,f(;
return 0;
·
181
Meg egy kerdes: lehet-e ket valtozonak ugyanaz a neve?
Ha különbözik a lathatosagi tartomanyuk, akkor igen. Ezert tudtunk azonos nevú lokalis
valtozokat deIinialni mas-mas Iüggvenyekben, sót azonos nevú globalis es lokalis
valtozokat is. mikor ket azonos nevú valtozo lathatosagi tartomanya atIedódik
(globalis es lokalis valtozok), akkor a kisebb lathatosagi tartomanyu valtozo, ugymond
eltakaria a nagyobb lathatosagi tartomanyut.
Peldak:
Magyarazat: z elsó program 3-at, a masodik pedig 3, 2, 1-et ir ki a kepernyóre. z
masodik programban az elsó printf vegrehaitasa alkalmaval letezik a memoriaban
mind a harom a valtozo de a 3-as ertekú az aktiv. masodik printf-nel mar csak az 1,
illetve 2 ertekú valtozok leteznek, es a lokalis az aktiv. Vegül az utolso printf-nel
egyedül a globalis a letezik, igy nyilvan ennek az erteke kerül kiirasra.

2.5 A C nyeI v adat-típusai feI üI nézetbõI

z alabbi abra atIogo kepet nyuit a C nyelv adat-tipusairol:


#include <stdio.h
int a = 2;
main(

int a = 3;
printf (°a = %d¨, a;
return 0;
·
#include <stdio.h
int a = 1;
main(

int a = 2;
int a = 3;
printf (°a=%d\n¨,a;
·
printf (°a = %d\n¨, a;
·
printf (°a = %d¨, a;
return 0;
·
TIPUSOK
laptipusok
void Egesz tipusok Valos tipusok
char
int
float
double
Egyszerú
tipusok
Összetett
tipusok
tòmb
karakterlanc
struct
union
pointer
enum
182
%ipusmodositok az alaptipusokhoz: signed, unsigned, short, long
odosito ielzok: const, volatile, typedef
z elsó kettó a valtozokhoz valo hozzaIerest szabalyozza. const modosito
ielzó megakadalyozza az illetó valtozo megvaltoztatasat programbol.
Termeszetesen hasznalatanak csak akkor van ertelme, ha deIinialaskor
kezdóerteket adtunk a valtozonak. Ha hasznaliuk a volatile modosito ielzót,
akkor ezzel engedelyezzük, hogy a valtozo erteke megvaltoztathato legyen a
programon kivüli okokbol is. Peldaul ha szeretnenk egy globalis valtozoban
eltarolni a valos idót, ezt ugy valosithatiuk meg, hogy cimszerit atadiuk az
operacios rendszer megIeleló idórutinianak. Egy ilyen valtozot volatile-nek
kell deIinialni. Együtt is hasznalhato a const es volatile, ha azt szeretnenk,
hogy csak külsó hatasok tudianak megvaltoztatni egy valtozot.
typedef-et alaposan bemutattuk a megIeleló Ieiezetben.


2.6 Egy összetett feIadat


zert, hogy gyakorlatiasabb legyen mindaz ami eddig bemutatasra került ezen
Ieiezet kereten belül, alkalmazzuk a tanultakat egy konkret Ieladat kapcsan.
Gyakran talalkoztunk olyan Ieladatokkal, amelyek egy szam szamiegyein, illetve
egy szamsorozat elemein vegeztek különIele múveleteket. Keszitsünk az alabbiakban ket
modult: az elsó (szamjegy.c) tartalmazza azokat a Iüggvenyeket, amelyek
szamiegyenkent dolgozzak Iel a parameterkent kapott termeszetes szamot, a masodik
(szamsor.c) pedig azokat, amelyek elemenkent Ioglalkoznak a parameterkent kapott
szamsorozattal (a legtöbb Iüggveny rekurzivan van implementalva a rekurzio
begyakorlasa erdekeben). Mindket modul reszere keszitsünk egy-egy header allomanyt
(Ieiallomany) (szamjegy.h, szamsor.h), amely tartalmazza az illetó Iüggvenyek
deklaracioit (prototipusait). Egy harmadik modul (feladat.c) hasznalva az elózók
Iüggvenyeit, oldion meg egy konkret Ieladatot.
183

szamjegy.c szamsor.c
#include<stdio.h

int osszeg(long n

if(n<10return n;
return osszeg(n/10+n%10;
·
int szorzat(long n

if(n<10return n;
return szorzat(n/10·(n%10;
·
int szamjegyek(long n

if(n<10return 1;
return szamjegyek (n/10+1;
·
float atlag(long n

return

(floatosszeg(n/szamjegyek(n
;
·
int min_szamjegy(long n

int t;
if(n<10return n;
t=min_szamjegy(n/10;
return t<(n%10.t:(n%10;
·
int max_szamjegy(long n

int t;
if(n<10return n;
t=max_szamjegy(n/10;
return t(n%10.t:(n%10;
·
int van_adott_szamjegy(long
n,int x

if(!nreturn 0;
if(n%10==xreturn 1;
return
van_adott_szamjegy(n/10, x;
·
int adott_szamjegyek(long n,
int x

if(!nreturn 0;
return

adott_szamjegyek(n/10,x+(n%10
==x;
·
void forditva(long n

printf(°%d¨, n%10;
if(n0forditva(n/10;
·

#include<stdio.h

int beolvas(int·np,long··ap,char·all

FILE ·f;int i;
if(!(f=fopen(all, ¨r¨return 0;
fscanf(f,¨%d¨,np;
(·ap=(long·malloc((·np·sizeof(long
;
for(i=0;i<n;i++
fscanf(f,¨%ld¨,(·ap+i;
fclose(f; return 1;
·
int kiir(int n, long ·a, char ·all

FILE ·f;int i;
if(!(f=fopen(all, ¨w¨return 0;
fprintf(f,¨%d\n¨,n;
for(i=0;i<n;i++
fprintf(f,¨%ld ¨,a¯i`;
fclose(f; return 1;
·
void utolsok_forditva
(int n, long ·a, int m, int i

static k;
if(i<n

utolsok_forditva(n,a,m,i+1;
if(k<mprintf(¨%ld ¨, a¯i`;k++;·
·
·
void beszur(int n, long ·a, long x

while(n0 && a¯n-1`x

a¯n`=a¯n-1`;
n--;
·
a¯n`=x;
·
void rendez(int n, long ·a

if(n1

rendez(n-1,a;
beszur(n-1,a,a¯n-1`;
·
·
int szamol(int n,long·a,int(·c(long

int i, k=0;
for(i=0;i<n,i++
if(c(a¯i`k++;
return k;
·
184
szamjegy.h szamsor.h
int osszeg(long;
/·kiszámítja a paraméter
számjegyeinek összegét·/

int szorzat(long;
/·kiszámítja a paraméter
számjegyeinek szorzatát·/

int szamjegyek(long;
/·kiszámítja a paraméter
számjegyeinek számát·/

float atlag(long;
/·kiszámítja a paraméter
számjegyeinek átlagát·/

int min_szamjegy(long;
/·meghatározza a paraméter
legkisebb számjegyét·/

int max_szamjegy(long;
/·meghatározza a paraméter
legnagyobb számjegyét·/

int van_adott_szamjegy(long,
int;
/·ellemörzi, hogy megtalálható-e
a második paraméter mint
számjegy, az elsó paraméterben·/

int adott_szamjegyek(long, int;
/·megszámolja, hogy hányszor
fordul eló a második paraméter
mint számjegy, az elsó
paraméterben·/

void forditva(long;
/·kiírja a paramétert fordítva·/
int beolvas(int ·,int ··,char ·;
/·beolvassa az elemek számát (az
elsó paraméterként kapott
címre, helyet foglal a
számsorozatnak (a második
paraméterként kapott címre
eltárolja a tömb címét, majd
beolvassa az elemeket, (a harmadik
paraméterként megadott
állományból·/

int kiir(int, int ·, char ·;
/·kiírja az elemek számát (elsó
paraméter, majd az elemeket (a
második paraméterként kapott
tömbból, a megadott állományba
(harmadik paraméter·/

void utolsok_forditva
(int,int·,int,int;
/· kiírja a számsorozat adott számú
utolsó elemét:
elsó paraméter: elemek száma
második paraméter: a tömb
harmadik paraméter: hányat írjunk
ki.
negyedik paraméter: a számsorozat
elsó elemének indexe a tömbben·/

void beszur(int, int ·, int;
/·beszúrja az utolsó paraméter
értékét a számsorozatba:
elsó paraméter: elemek száma
második paraméter: a tömb·/

void rendez(int, int ·;
/·rendezi a számsorozatot:
elsó paraméter: elemek száma
második paraméter: a tömb·/

int szamol(int, int ·, int (·(int;
/·megszámolja az adott tulajdonságú
elemeket a számsorozatban:
elsó paraméter: elemek száma
második paraméter: a tömb
harmadik paraméter: egy fuggvény,
amely ellenórzi az illetó
tulajdonságot·/



185


Feladat.
dott egy szamsorozat a be.txt allomanyban. Iriuk ki a ki.txt allomanyba a
rendezett szamsorozatot, maid a kepernyóre a következóket:
O a rendezett szamsorozat utolso m elemet
O a rendezett szamsorozat minden elemenek tükrözeset
O hany eleme van, amelyekre teliesül, hogy:
1. szamiegyeinek összege paros
2. szamiegyeinek szorzata paratlan
3. szamiegyeinek atlaga egesz
4. legkisebb szamiegye nulla
5. tartalmaz nulla szamiegyet
6. 9-es es 0 szamiegyeinek szama azonos


feladat.c
#include <stdio.h
#include ¨szamjegy.h¨
#include ¨szamsor.h¨

int c1(long n
return !(osszeg(n%2;·

int c2(long n
return szorzat(n%2;·

int c3(long n

int t;
t=atlag(n;
return (intt==t;
·

int c4(long n
return min_szamjegy(n==0;·

int c5(long n
return van_adott_szamjegy(n,0;·

int c6(long n

return
adott_szamjegyek(n,0==adott_szamjegyek(n,9;
·


186
main(

int n, ·a, m, i; long ·a;
beolvas(&n,&a,¨be.txt¨;
rendez(n,a;
kiir(n,a,¨ki.txt¨;
scanf(°%d¨, &m;
utolsok_forditva(n,a,m,0;
printf(°\n¨;
for(i=0;i<n;i++
printf(°%ld ¨, forditva(a¯i`;
printf(°\n¨;
printf(°%d\n¨, szamol(n,a,c1;
printf(°%d\n¨, szamol(n,a,c2;
printf(°%d\n¨, szamol(n,a,c3;
printf(°%d\n¨, szamol(n,a,c4;
printf(°%d\n¨, szamol(n,a,c5;
printf(°%d\n¨, szamol(n,a,c6;
return 0;
·

Hogyan lehet a Ienti modulokat egyetlen vegrehaithato programma szerkeszteni?
Leteznek parancssor orientalt Iorditok (ez a klasszikus valtozat), es programozasi
környezetbe agyazott Iorditok. Ha egy programozasi környezetben programozunk, akkor
programunk moduliait összeIoghatiuk egy project-be. Ha parancssor Iorditoval
dolgozunk, akkor egy külön szövegszerkesztóvel kell megszerkesszük a moduliainkat,
ezutan egyenkent le kell Iorditsuk, maid össze kell szerkesszük óket. Peldaul a Linux
alatti cc (C-Compiler) C-Iordito segitsegevel a következó parancsokkal allithato eló a
Iuttathato kod (ha a modul-allomanyok mar elkeszültek):

cc -c szamjegy.c /* Iorditas: eredmenye a szamjegy.o targykod */
cc -c szamsor.c /* Iorditas: eredmenye a szamsor.o targykod */
cc -c feladat.c /* Iorditas: eredmenye a feladat.o targykod */
cc szamjegy.o szamsor.o feladat.o -o feladat.x
/* szerkesztes: a Iuttathato kod neve legyen feladat.x */
/feladat.x /* a Iuttathato kod vegrehaitasa */

187
Qggelék {A·



REK&RZI Ó egyszerûen és érdekesen

Tegyük Iel, hogy egy bizonyos engedelyt szeretnel kivaltani a polgarmesteri
hivataltol. z elsó irodaban közlik veled, hogy az engedely megszerzese Ieltetelezi egy
masik engedely birtoklasat, amelyet egy masik irodaban allitanak ki. mikor belepsz
oda ugyanazt a valaszt kapod, mint az elózó irodaban. Es ez igy Iolytatodik addig, mig
egy olyan engedelyhez nem iutsz, amelyik megszerzese mar nem Ieltetelezi egy tovabbi
engedely birtoklasat. Minekutana ezt kivaltottad, Iolytathatod a Ielbehagyott
kiserleteidet Iorditott sorrendben mig minden szükseges engedelyt meg nem szerzel.
Vegül az elsó irodaban Iogiak a kezedbe adni azt az engedelyt, amiert beleptel a hivatal
aitaian.

Rekurzió a matematikában
Bar a Ienti kalvariahoz hasonlot tapasztalhattal mar, megis a rekurzio Iogalmaval
valoszinú matek oran talalkoztal elóször, a rekurziv kepletek kapcsan. Klasszikus pelda
erre a Iaktorialis rekurziv keplete. matematikusok az elsó n (n0 termeszetes szam
szorzatat n faktorialisnak nevezik es n!-el ielölik. 0! erteke megegyezes szerint 1.

1 ha n = 0
n!= (1
1.2. ... .(n-1.n ha n 0

Ha a Ienti kepletben az 1.2. ... .(n-1 szorzatot (n-1!-al helyettesitiük,
akkor eliutunk a Iaktorialis rekurziv kepletehez.

1 ha n = 0
n!= (2
(n-1!n ha n 0

Ezt a kepletet azert nevezik rekurzivnak mert az n! kiszamitasat (n0 esten)
visszavezeti (n-1! kiszamitasara, egy asonlo. de egvszerúbb (eggyel kevesebb
szorzast Ieltetelezó) Ieladatra. Termeszetesen (n-1! is hasonlo modon
visszavezethetó (n-2!ra es igy tovabb, mig eliutunk 0!-ig.
n! ÷ (n 1)! c n ÷ (n 2)! c (n 1) c n ÷ ... ÷ 0! c 1 c 2 c ... c (n 1) c n ÷ 1 c 1 c 2 c ... c (n 1) c n
¦
¦
' / ìvnv[ v. [ cv,cn ìc[ ] c .cn v,vìo· [ vìi v.,
ìc[ ] c.c n .:ó· vìo:ìvìó, . . . , o[ ,vn, nov,
v[ ì v[ v v: i . ìo[ v .v[ óìvn v ] vì cì nc[ , c.c,
.vv,i . v: cvc. : c[ cì c[ ö] vì cìv.v .v[ ] on. "
( (oncni v.)
188
Rekurzió az informatikában
Tegyük Iel, hogy ket Iüggveny, f
1
es f
2
celul túzik ki, hogy kiszamitiak a
parameterkent kapott n Iaktorialisanak erteket. f
1
az (1) keplet alapian lat hozza a
Ieladathoz es a következókeppen oldia meg:
int f1 (int n

if (n = = 0 return 1;
else

int p=1;
for(int i=1;i<=n;i++
p·= i;
return p;
·
·

MegIigyelhetó, hogy f
1
Ielvallalia az egesz Ieladatot, ami azt ielenti, hogy elvegzi
az n! kiszamitasahoz szükseges valamennyi n szorzast. z n0 estben ezt egy for
ciklussal oldia meg. Ezt a megközelitest amikor bizonyos utasitasok ismetleset ciklus
segitsegevel valositiuk meg iterativ modszernek nevezzük.
f
2
viszont ennel sokkal kenyelmesebb. Iaktorialis rekurziv kepleteból veve az
ötletet, a következókeppen gondolkodik:
1. Ha n == 0, akkor en is keszsegesen megoldom a Ieladatot elvegre ez csak
annyit ielent, hogy bemondom a 0! erteket, az 1-et.
2. Ha viszont n 0, nem vallalom Iel a telies Ieladatot, tul Iaraszto lenne nekem
n szorzast elvegezni. következókeppen Iogok eliarni:
2.1. Atruhazom .valaki¨-re az elsó n-1 szorzas elvegzesenek Ieladatat
ami valoiaban az (n-1! erteket ielenti es nyuitok neki egy .talcat¨
amire rategye az eredmenyt.
2.2. talcan kapott eredmenyt meg megszorzom n-nel, es maris
büszkelkedhetek az n! ertekevel.
Ez mind io es szep, de ki lesz ez a .valaki¨, es mi lesz a .talca¨?
Es most iön a hideg zuhany f
2
urIinak. Mivel ez a .valaki¨ az (n-1! kiszamitasanal
hasonlokeppen Iog eliarni mint ó, ezert a .valaki¨ ó maga lesz.
Hogy-hogy? zt ielentse ez, hogy a Ieladatom oroszlanreszet atruhazom magamra,
es annak oroszlanreszet megint csak magamra, es igy tovabb mig eliutok a 0!-ig?
Igen, pontosan erról van szo!
De hat ez lehetetlen, hiszen ez azt Ieltetelezne, hogy klonozzak meg n peldanyt
magambol.
Pedig amint latni Iogod valami hasonlorol van szo.
Es a talca?
Mivel .mindenik f
2
¨ a saiat talcaiat kell nyuitsa a következónek, ezert a talca
szerepet egy a Iüggveny tipusaval azonos tipusu lokalis saiat) valtozo Iogia
betölteni.
189
Ime az f
2
Iüggveny:
int f2 (int n

int talca;
if (n = = 0 return 1;
else

talca=f2(n-1;
return talca·n;
·
·

Ez tenyleg elegans de hogyan múködik?

Tegyük Iel, hogy a 3! erteket szeretnenk kiiratni a kepernyóre az f
2
Iüggveny
segitsegevel. Hogyan bonyolodik le az f
2
(3) Iüggvenyhivas? z alabbi abra az
ugynevezett lepcsó-modszert alkalmazva graIikusan abrazolia mindazt, ami egy
rekurziv Iüggveny hivasakor a hatterben törtenik. .rekurzio lepesról-lepesre¨ resz
pedig, mintegy kezen Iogva vezet vegig a .rekurzio utian¨, es egyben magyarazattal is
szolgal az abra megertesehez.

main() 6
f
2
(3) F n 3 2 * 3 ÷ 6 6
f
2
(2) F n 2 1 * 2 ÷ 2 2
f
2
(1) F n 1 1 * 1 ÷ 1 1
f
2
(0) F n 0 1

z f
2
Iüggveny .utia¨ az abran:
O Indul a .tetóról¨ (main Iüggveny).
O Lemegy a .lepcsókön¨ a .Iöldszintre¨ (banalis eset), hogy megtalalia a 0!
erteket.
O VisszaIele iövet minden szinten kiszamitia az .emeletnek¨ megIeleló Iaktorialis
erteket (az alatta levó szintról hozott erteket megszorozza az .emelet szamaval¨).
O Visszaerkezve a tetóre a kezeben van az n! erteke.
Következtetesek az abra segitsegevel:
1. z n! kiszamitasahoz f
2
. n+1-szer lesz meghivva es vegrehaitva.
2. Iüggvenyhivasok Iorditott sorrendben Ieiezódnek be mint ahogy
elkezdódtek.
3. Ha t-vel ielöliük a Iüggveny utasitasainak vegrehaitasahoz szükseges idót n
0 eseten, es t0-val n==0 esten, akkor az f
2
(i) Iüggvenyhivas (0 A i A n
vegrehaitasa i·t + t0 ideig tart, amiból i 0 eseten (i-1·t + t0 idóre
Iel van Iüggesztve.
4. Mivel mindenik Iüggvenyhivasnak meg kell legyen a saiat n-ie es talca-ia,
ezert n Iöltetlenül ertek szerint atadott parameter, talca pedig lokalis valtozo
kell legyen.
190

em nehez atlatni, hogy a talca valtozo hasznalata nem Iöltetlenül szükseges,
hiszen az if utasitas else aga egyszerúen igy nezhetne ki:
else return f2(n-1·n;

Megis, azert vezettük be a talca valtozot, hogy az altalanos eset (n0 kezelesenel
az else agon vilagosan különvalasszuk az atruazott oroszlanresz megoldasat, amely
a rekurziv hivas altal törtenik, a saiat resztol, amikor is a talcan kapott ertekból
Ielepitiük az eredeti Ieladat megoldasat.
BeIeiezesül allitsuk szembe a ket Iüggveny strategiaiat. f
1
ugy epitette Iel a
megoldast, hogy az egvszerútol aladt a bonvolult fele. Vett egy p valtozot, amelybe
kezdetben 1-et tett, a 0! erteket. Ezutan pedig a 0! ertekeból kiindulva a p valtozoban
sorra elóallitotta 1-tól n-ig a termeszetes szamok Iaktorialisait: elóször 1!-t azutan 2!-t
es igy tovabb mig eliutott n!-ig.
f
2
pont Iorditva latott hozza a Ieladathoz: egyból nekiszökött az n!
kiszamitasanak. rekurzio mechanizmusa altal elóször lebontotta a feladatot a
bonvolulttol aladva az egvszerú fele, maid pedig felepitette a megoldast az egvszerútol
aladva a bonvolult fele. ... es beigazolodik a közmondas miszerint a rest ketszer Iarad.
kkor hat melyik a iobb strategia, az f
1
-e vagy az f
2
-e, az iterativ vagy a
rekurziv? Teny, hogy az iterativ modszer gyorsabb es kevesbe memoriaigenyes. De hat
akkor szol-e valami is a rekurzio oldalan? Ketsegtelenül! rekurziv megközelites
egyszerú, elegans es ezert könnyen programozhato. mint maid tapasztalni Iogiuk,
vannak Ieladatok amelyeknek iterativ megoldasa rendkivül bonyolult, rekurzivan viszont
egy nehany soros programmal megoldhatok.
Ezek utan, ha maid legközelebb belepsz valamely hivatal aitaian, mit Iogsz
mondani? zt, hogy kezdódik a kalvaria vagy azt, hogy kezdódik a rekurzio?

REKURZIÓ LÉPÉSRÕL-LÉPÉSRE

Megszakad a main függvény végrehajtása es valaszkent az I2(3) hivasra elkezdódik
az f2 függvény végrehajtása:
1/1 megszületik az I2 Iüggveny n nevú Iormalis parametere a Stack-en;
az n Iormalis parameter megkapia a Iüggveny vegrehaitasat kivalto hivas aktualis
parameteret, a 3-at;
1/2 megszületik a talca nevú lokalis valtozo a Stack-en;
az utasitasresz vegreaitasa.
1/3 mivel 3!=0, az if else agan Iolytatodik a Iüggveny vegrehaitasa;
1/4 a talca=f2(2 utasitast megint csak nem tudiuk vegrehaitani az I2(2) ertek
hianyaban. Ezert felfüggesztõdik az f2 függvény végrehajtása is ebben a
pontban es az I2(2) hivasra valaszolva elkezdõdik az f2 függvény egy újbóli
végrehajtása amely a második:
2/1 megszületik a masodik atiaras saiat n nevú Iormalis parametere a Stack-en;
191
ez az n megkapia a ielen vegrehaitast kivalto hivas aktualis parameterenek az
erteket, a 2-t;
2/2 megszületik a masodik vegrehaitas saiat talca nevú valtozoia;
a masodik atiaras utasitasreszenek vegreaitasa.
2/3 mivel 2!=0 az if else agan Iolytatodik a Iüggveny masodik atiarasa is;
2/4 a talca=f2(1 utasitast megint csak nem tudiuk vegrehaitani ez alkalommal
az I2(1) ertek hianyaban. Ezert felfüggesztõdik az f2 függvény második
átjárása is ebben a pontban es valaszkent az I2(1) hivasra, elkezdõdik az f2
függvény egy további átjárása immár a harmadik:
3/1 megszületik a harmadik atiaras saiat n nevú Iormalis parametere a Stack-en;
ez az n megkapia a ielen vegrehaitast kivalto hivas aktualis parameterenek az
erteket, a 1-et;
3/2 megszületik a harmadik vegrehaitas saiat talca nevú valtozoia;
a armadik atiaras utasitasreszenek vegreaitasa.
3/3 mivel 1!=0 az if else agan Iolytatodik a Iüggveny harmadik atiarasa is;
3/4 a talca=f2(0 utasitast most sem tudiuk vegrehaitani ez alkalommal az
I2(0) ertek hianyaban. Ezert felfüggesztõdik az f2 függvény harmadik
átjárása is ebben a pontban es valaszkent az I2(0) hivasra, elkezdõdik az
f2 függvény egy további átjárása immár a negyedik:
4/1 megszületik a negyedik atiaras saiat n nevú Iormalis parametere a Stack-en;
ez az n megkapia a ielen vegrehaitast kivalto hivas aktualis parameterenek az
erteket, a 0-t;
4/2 megszületik a negyedik vegrehaitas saiat talca nevú valtozoia;
4/3 mivel ez esetben 0 == 0 az if then agan Iog Iolytatodni a Iüggveny ezen
negyedik vegrehaitasa, a banalis Ieladat megoldasaval;
4/4 a Iüggveny neve megkapia a visszateritendó erteket, a banalis Ieladat
eredmenyet, az 1-et. Bingo. megvan az erteke'
befejezõdik a függvény negyedik átjárása:
eltúnik a Stack-ról a negyedik atiaras talca valtozoia;
eltúnik a Stack-ról a negyedik atiaras n nevú Iormalis parametere;
3/5 folytatódik az f2 függvény harmadik átjárása abban a pontban, ahol annak
ideien IelIüggesztódött. talca nevú valtozoba bekerül a most mar
rendelkezesre allo I2(0) ertek, ami nem mas mint a negyedik atiaras altal
visszateritett eredmeny, a 0! erteke, vagyis 1;
3/6 a Iüggveny neve megkapia a talca·n szorzat erteket. Mivel ezen harmadik
atiarasnak az n-ie 1, igy az altala visszateritett ertek 1·1=1 lesz. Ez nem mas.
mint az erteke.
befejezõdik a függvény harmadik átjárása:
eltúnik a Stack-ról a harmadik atiaras talca valtozoia;
eltúnik a Stack-ról a harmadik atiaras n nevú Iormalis parametere;
192
2/5 folytatódik az f2 függvény második átjárása abban a pontban, ahol annak
ideien IelIüggesztódött. talca nevú valtozo megkapia a most mar
rendelkezesre allo I2(1) erteket, ami nem mas mint a harmadik atiaras altal
visszateritett eredmeny, az 1! erteke, vagyis az 1;
2/6 a Iüggveny neve megkapia a talca·n szorzat erteket. Mivel ezen masodik
atiarasnak az n-ie 2, igy az altala visszateritett ertek 1·2=2 lesz. Ez nem mas.
mint a erteke.
befejezõdik a függvény második átjárása:
eltúnik a Stack-ról a masodik atiaras talca valtozoia;
eltúnik a Stack-ról a masodik atiaras n nevú Iormalis parametere,
1/5 folytatódik az f2 függvény elsõ átjárása abban a pontban, ahol annak ideien
IelIüggesztódött. talca nevú valtozo megkapia a most mar rendelkezesre allo
I2(2) erteket, ami nem mas mint a masodik atiaras altal visszateritett eredmeny, a
2! erteke, vagyis az 2;
1/6 a Iüggveny neve megkapia a talca·n szorzat erteket. Mivel ezen elsó atiarasnak
az n-ie 3, igy az altala visszateritett ertek 2·3=6 lesz. Ez nem mas. mint a
erteke.
befejezõdik a függvény elsõ átjárása:
eltúnik a Stack-ról a elsó atiaras talca valtozoia;
eltúnik a Stack-ról a elsó atiaras n nevú Iormalis parametere.
Folytatódik a main függvény abban a pontban, ahol annak ideien IelIüggesztódött,
ugyanis most mar rendelkezesre all az I2(3) ertek, ami nem mas mint a Iüggveny elsó
atiarasa altal visszateritett eredmeny, a 3! erteke, vagyis 6.

Rekurzív függvények

z elóbbiekben arrol volt szo, hogy mikent közeliti meg egy rekurziv Iüggveny
az n! kiszamitasanak Ieladatat. Foglaliuk össze:
Ha a Ieladatot banalisnak talalta (n==0, akkor Ielvallalta a telies Ieladat
megoldasat. Ellenkezó esetben viszont (n0 ket reszre osztotta a Ieladatot: egy
oroszlanreszre (az (n-1! erteket biztosito elsó n-1 szorzas), amit rekurziv hivas altal
atruhazott, es egy saiat reszre (az n-dik szorzas), amit Ielvallalt.
Probaliuk meg altalanositani a Ienti megközelitesi modot. következó sablont sikeresen
lehet alkalmazni:
<típus f(<a feladat paraméterei

<típus talca;
if (<banalitás feltétele <banális eset kezelése
else
talca = f(<átruházott rész paraméterei;
<saját rész
·
·
193
Egyszerú Iüggvenyek eseten igen iol hasznalhato a Ienti sablon. Gyakran egyebet
sem kell tenni, csak kitölteni a sablont es maris meg van a Ieladatot megoldo rekurziv
Iüggveny. Segitseget adhat ebben, ha Ieltesszük a következó harom ravezetó kerdest:
. kerdes
Hogyan vezethetó vissza a Ieladat egy asonlokeppen megoldato, de egvszerúbb
Ieladatra? z erre a kerdesre adott valasz vilagosan el Iogia hatarolni a rekurzivan
atruazando oroszlanreszt a felvallalt saiatresztól. Tovabba nyilvanvalova Iogia tenni
ugy a Ió Ieladat mint az atruhazott Ieladat parametereit.
2. kerdes
Miutan talcan megkapiuk az atruhazott resz eredmenyet, ogvan epiteto fel
ebból a telies Ieladat eredmenye a Ielvallalt saiat resz megoldasa altal?
3. kerdes
Mikor tekintiük a Ieladatot annyira banalisnak, hogy teliesen Ielvallaliuk a
megoldasat anelkül, hogy valamit is rekurzivan atruhaznank belóle?
Ez a megközelites nagyon eredmenyes, peldaul olyan Ieladatok eseteben, amelyek egv
szam szamiegvenkenti, vagy egv szamsorozat elemenkenti Ieldolgozasat követelik meg.

Peldaul, legyen a következó Ieladat:
1. Irjunk rekurzív függvényt az n természetes szám számjegyei összegének
kiszámítására.
Kezdiük azzal, hogy megvalaszoliuk a harom kulcskerdest:

. valasz
z n szamiegyeinek összegenek kiszamitasa visszavezethetó az n / 10 (az n
szam, az utolso szamiegye nelkül) szamiegyeinek összegenek kiszamitasara. Ez egy
asonlo Ieladat, hiszen ugyancsak egy termeszetes szam szamiegyeinek összegenek
kiszamitasat ielenti, de egvszerúbb. mert n / 10 eggyel kevesebb szamiegyú szam, mint
n. Tehat a rekurzivan atruazando oroszlanresz az n / 10 szamiegyeinek összegenek
kiszamitasa lesz, a saiatresz pedig az utolso szamiegynek (n % 10 a kezelese. z
alabbi abra ezt szemlelteti (n egy m szamiegyú termeszetes szam):







2. valasz
Miutan a talca valtozoban megkapiuk n / 10 szamiegyeinek az összeget,
egyszerúen annyit kell meg tennünk csupan, hogy hozzaadiuk n utolso szamiegyet, az n
% 10 erteket.

n / 10 n ° 10
n
a
1
a
2
. a
m-1
a
m

194
3. valasz
Ieladat banalisnak tekinthetó mar akkor is, ha n egyszamiegyú (n<10, vagy
akkor, amikor .elIogyott¨ (n == 0. z elsó esetben a megoldas maga a szam lesz, a
masodik esetben pedig 0.
Es most következzen a Ieladatot megoldo rekurziv Iüggveny:

int szamjegy_osszeg (int n

int talca;
if (n < 10 return n;
else

talca= szamjegy_osszeg (n/10;
return talca+n%10;
·
·

z alabbi abra nyomon követi a szamjegy_osszeg(3561 Iüggvenyhivas
vegrehaitasat:

main() 15
n 3561 14 ¹ 1 ÷ 15 15
n 356 8 ¹ 6 ÷ 14 14
n 35 3 ¹ 5 ÷ 8 8
n 3 3

sablon azt aianlia, hogy elóször a Ieladat oroszlanreszet oldiuk meg a rekurziv
hivas altal es azutan a Ielvallalt saiatreszt. zonban vannak olyan esetek ilyen a
következó Ieladat is , amikor celszerúbb elóször megvizsgalni a saiatreszt. Miert?
zert, mert bizonyos esetekben a saiatresz vizsgalata megoldhatia a telies Ieladatot,
szüksegtelenne teve ezaltal az oroszlanresz megoldasat. Ime egy pelda:

2. Irjunk rekurzív függvényt amely egy logikai értéket térít vissza attól függõen
hogy egy n elemu számsorozat amelynek elemei egy a tömbben vannak eltárolva
a) tartalmaz-e nullát?
b) szimmetrikus-e?

Kezdiük uira azzal, hogy megvalaszoliuk a harom kulcskerdest elóször az a) pontra,
maid pedig a b) pontra vonatkozoan. Feltetelezzük, hogy a szamsorozat az a tömb
a¯1`, a¯2`, ..., a¯n` (röviditve a¯1..n`) elemeiben van eltarolva.
. valasz
I. z a¯1..n` tömb vizsgalata (tartalmaz-e nullat) visszavezethetó az a¯1..n-1`
resztömb vizsgalatara, maid pedig az a¯1..n-2` resztömbere, es igy tovabb mig
a Ieladat banalissa nem zsugorodik.
a¯1..n` a¯1..n-1` a¯1..n-2` ...
altalanosan. a¯1..j` a¯1..j-1`
195

II. Egy masik lehetóseg, ha a szamsorozat eleieról hagyiuk el sorra az elemeket:
a¯1..n` a¯2..n` a¯3..n` ...
altalanosan. a¯i..n` a¯i+1..n`

III. Egyes Ieladatok termeszete megköveteli, hogy ötvözzük az elóbbi ket modszert
(ilyen peldaul a Ieladat b) pontia is).
a¯1..n` a¯2..n-1` a¯3..n-2` ...
altalanosan. a¯i..j` a¯i+1..j-1`

z alabbi abrak az elsó ket modszert mutatiak be, hiszen ezek aianliak magukat a Ieladat
a) pontia eseten:











2. valasz
Miutan a talca valtozoban megkapiuk vagy az a¯1..j-1` vagy pedig az
a¯i+1..n` szakasz vizsgalatanak eredmenyet, igy gondolkodhatunk: az a¯1..j` vagy
az a¯i..n` tömbszakaszban akkor talalhato nulla, ha vagy a talca erteke logikai igaz,
vagy a megmaradt elem (elsó esetben az a¯j`, masodikban az a¯i`) nulla. Bar a
megadott sablon alapian ez a kezenIekvó gondolkodasmod, megis Iigyeliük meg a
következót:
Ha a saiatreszt kepviseló elem nulla, akkor nyilvanvalo, hogy van a
szamsorozatban nulla es nem szükseges az oroszlanresz vizsgalata. Ha viszont a
saiatreszt kepviseló elem nem nulla, akkor szükseges az oroszlanresz vizsgalata is, sót
ez esetben teliesen tóle Iog Iüggeni a Ieladat eredmenye.
3. valasz
Ieladat akkor tekinthetó banalisnak, ha az a¯1..j` vagy az a¯i..n`
tömbszakasz vagy egy elemet tartalmaz (j == 1 vagv i == n), vagy egyet sem (j ==
0 vagv i n). masodik valtozat ielen esetben elónyösebb, mert az eredmeny magatol
ertetódóen logikai hamis (egy nem letezó szamsorozatban nincs nulla). z elsó valtozat
eseteben szükseges azon egyetlen elem megvizsgalasa, hogy nulla-e vagy sem.
Ime a Ieladatot megoldo rekurziv Iüggveny ket valtozatban.

a|1..i-1| a|i|
a|1..i|
a
1
, a
2
, . a
i-1
, a
i

a|i| a|i¹1..n|
a|i..n|
a
i
, a
i¹1
, . a
n-1
, a
n

I. eset II.
eset
Rekurzivan
atruhazando resz
saiat
resz
saiat
resz
Rekurzivan
atruhazando resz
196
int van_nulla (int i

/· ellenórzi, hogy az a¯1..j`
tömbszakasz tartalmaz-e nullát ·/
/· int talca;·/
if (j == 0 van_nulla=0;
else

if(a¯j`==0van_nulla=1;
else van_nulla=van_nulla(j-1;
·
·
int van_nulla (int i

/· ellenórzi, hogy az a¯i..n`
tömbszakasz tartalmaz-e nullát ·/
/· int talca;·/
if (i==n if (a¯i`==0 return 1;
else return 0;
else

if (a¯i` == 0 return 1;
else
return van_nulla (i+1;
·
·

z alabbi abra nyomon követi a van_nulla(1,n Iüggvenyhivas vegrehaitasat.
1. eset: n=3, a¯1..3`=7, -3, 15·

main() 0

i 3
0 0

i 2
0 0

i 1 0 0

i 0 0

2. eset: n=4, a¯1..4`=7, -3, 0, 15·

main() 1

i 1
1 1

i 2
1 1

i 3 1
Figyeliük meg, hogy a masodik peldaban a lepcsó egy Iokkal alacsonyabb? Miert
van ez? Mivel Ielcsereltük az oroszlanresz es a saiatresz megoldasanak sorrendiet. Miert
ez a valasz?

Ieladat b) pontiahoz csak az abrat Iogiuk megadni es a kesz Iüggvenyeket, az olvasora
bizva, hogy tanulmanyozza es megertse óket.











a|i|, a|i|
saiatresz
a|i..i|
a
i
, a
i¹1
,. a
i-1
, a
i

a|i¹1..i-1|
oroszlanresz

197
int szimmetrikus (int i, int j

/·ellenórzi, hogy az a¯i..j`
tömbszakasz szimmetrikus-e ·/
/· int talca;·/
if (i = jszimetrikus=0
else

if (a¯i`!=a¯j` return 0;
else
return szimmetrikus(i+1,j-1;
·
·
int szimmetrikus (int i, int j

/·ellenórzi, hogy az a¯i..j`
tömbszakasz szimmetrikus-e ·/
/· int talca;·/
if (i = j return 1;
else

if (a¯i` != a¯j` return 0;
else
return szimmetrikus (i+1,j-1;
·
·


Rekurzív eljárások

z alapvetó különbseg a Iüggvenyek es az eliarasok (void Iüggvenyek) között
az, hogy a Iüggveny kiszamit valamit, es ezt visszateriti, mint eredmenyt, az eliaras
pedig elvegez valamit. rekurziv eliarasoknak is Ió iellegzetessege, hogy meghiviak
önmagukat. Termeszetesen itt is ervenyes az a megkötes, hogy a rekurziv hivasnak
Ieltetelhez kötöttnek kell lennie, hogy biztositva legyen a rekurziv hivasok lancolatabol
valo kiszabadulas. Ebból adodoan a rekurziv eliarasokban is altalaban van egy
ugynevezett kulcs if utasitas, amelynek egyik aga rekurziv (itt kerül sor a rekurziv
hivasra) a masik pedig nem.
Ha ugy Iogiuk Iel a rekurziv eliarast, mint amely ezen .kulcs¨ if köre epül,
akkor a következó vazat kapiuk:

void rek_elj (<paraméter_lista

<lokális definiálások



if <feltétel



rek_elj (<paraméter_lista;


·
else




·
a zona
b zona
B zona
A zona
X zona
198
Bar a Ienti sablon a rekurziv eliarasoknak egy nagyon leegyszerúsitett vazlata,
megis sokat segithet a tanulmanyozasukban.
mint megIigyelhetó, a kulcs if rögzitese öt területet hatarolt el a rekurziv
eliarasban:
a a kulcs if elótti terület
A a kulcs if utani terület
b a kulcs if rekurziv agan a rekurziv hivas elótti terület
B a kulcs if rekurziv agan a rekurziv hivas utani terület
X a kulcs if nem rekurziv aga
rekurziv eliaras barmely utasitasa csakis a Ienti területek valamelyikere
kerülhet.
Ha gondolatban leIuttatiuk a rek_elj eliarast, akkor könnyen nyomon
követhetiük, hogy az egyes területek utasitasai mikor, hanyszor es milyen sorrendben
haitodnak vegre. Mindez abban segithet, hogy vilagosan atlassuk milyen hatasa van
annak, ha egy utasitast egy bizonyos területre irunk. Tegyük Iel, hogy Iuttatasa soran, a
rek_elj eliaras a rekurzio következmenyekent , n-szer Iog meghivodni, ennyiszer
lesz atiarva.
következó abra bemutatia, hogy a különbözó zonak, hanyszor, milyen
sorrendben, valamint mely atiarasok soran kerülnek vegrehaitasra.

a
1
f

b
1
a
2
f
2
b
2
... a
n-1
f
n-
b
n-1
a
n
f
n
X
n
A
n
B
n-1
A
n-1
... B
2
A
2
B
1
A
1
I I I

I Ieltetel
I azt ielzi, hogy a Ieltetel erteke logikai IGZ
H azt ielzi, hogy a Ieltetel erteke logikai HMIS
az indexek ielzik, hogy a rekurziv eliaras hanyadik atiarasarol van szo,
peldaul B2 ielentese: sor kerül a masodik atiarasban a B zona
utasitasainak vegrehaitasara.

Ienti abra Iontos következtetesekhez vezethet el. Milyen következmenye lesz,
ha egy utasitas egy bizonyos területre kerül ?

a terùlet: a ivasok sorrendieben haitodik vegre, annviszor aanv atiarasra
kerül sor.
A terùlet: a hivasok forditott sorrendieben haitodik vegre, annviszor
aanv atiarasra kerül sor.
b terùlet: a ivasok sorrendieben haitodik vegre, de eggvel kevesebbszer mint az
a terület hiszen az utolso atiarasban nem kerül sor a vegrehaitasara.
terùlet: a hivasok forditott sorrendieben haitodik vegre, de eggvel kevesebbszer
mint az A terület, hiszen az utolso atiarasban nem kerül sor a
vegrehaitasara.
199
terùlet: csak az utolso atiarasban haitodik vegre.
következó reszben bemutatiuk egy konkret Ieladaton, mikent hasznalhato ez a
megközelites rekurziv eliarasok irasara!

Peldaul, szolgalion a Ienti vaz hasznalatara a következó Ieladat:

1. Iriunk rekurziv eliarast, amely karaktereket olvas be vakon, addig amig `*` karakter
olvasott es a kepernyóre pedig a beolvasas Iorditott sorrendieben iria ki óket:
Peldaul, ha a bemenet: BCD*
Kimenet:
a) *DCB
b) DCB
c) BCDDCB
d) BCD**DCB
e) BCD*DCB
Ime a megoldas:

void eljA(

char c; /· mindenik átjárásnak meglesz a saját c-je·/
c=getch(; /· beolvasás vakon az a zónában·/
if (c!=· eljA;
putchar(c; /· kiírás az A zónában·/
·



void eljB(

char c; /· mindenik átjárásnak meglesz a saját c-je·/
c=getch(; /· beolvasás vakon az a zónában·/
if (c!=·

eljB;
putchar(c; /· kiírás a B zónában·/
·
·

void eljC(

char c; /· mindenik átjárásnak meglesz a saját c-je·/
c=getch(; /· beolvasás vakon az a zónában·/
if (c!=·

putchar(c; /· kiírás a b zónában·/
eljC;
putchar(c; /· kiírás a B zónában·/
·
·


200
void eljD(

char c; /· mindenik átjárásnak meglesz a saját c-je·/
c=getch(; /· beolvasás vakon az a zónában·/
putchar(c; /· kiírás az a zónában·/
if (c!=· eljD;
putchar(c; /· kiírás az A zónában·/
·

void eljE(

char c; /· mindenik átjárásnak meglesz a saját c-je·/
c=getch(; /· beolvasás vakon az a zónában·/
if (c!=·

putchar(c; /· kiírás a b zónában·/
eljE;
putchar(c; /· kiírás a B zónában·/
·
else putchar(c; /· kiírás az X zónában·/
·

201
8zakirodalom


BEKO Tiborne - BEKO Laszlo - TOTH Bertalan
2003 !rogramozzunk C nvelven. Budapest, ComputerBooks
KERIGHM Brian, W - RITCHIE Dennis, M
2003 A C programozasi nvelv. Budapest, Múszaki könyvkiado
SCHILDT Herbert
1998 C manual complet. Bucuresti, Teora
CTRI Octavian - COJOCRU Iuliana
1994 %urbo C¹¹. Bucuresti, Teora
SORI Tudor
Bazele programàrii in C¹¹. Bucuresti, L&S InIomat
C programozas BORLD C¹¹-ban,
www.eet.bme.hu/publications/ebooks/progr/cpp

03  ,47,9,8,3F8F7/00803 003-033007 0/098F  

v8O  

3;09 ,20090F-039,79,4;,8O 9,33;308E39,2 43/442  070/2F30803 14E ,83E3  , F584E8 /E4  239 , 00902 ,,9O  $v9  702F02 9,3E7 40E2 8 9,E3, -0330 909009  ,20009 ,83E39:/3,2,/-43489F2E49,9E8,47   3; 20J7E8,47 9--70 9700/902  239 0807~03 -02:9,93 ,  30;09 , $ 89,3/,7/3, 20100v03  , .F42 , ;49  4 5747,243 9,3J98,   08v 1000990 0802 0 E914O F509 39,3 , 5747,24E87O  239 8E2J9OF508 10,/,9204/E87O   09 ;09v 100090 4,3 847703/-03 ;09 02E89  4 144,948,3 ;0088F -0 , 4;,8O9 , 5747,24E8 ;EE-,  1000909--F 
0;F8-F02E87,F5Q30 00902302;,9434,8270  ,2 2F 302 099 -02:9,9;,  !F/E: 2E7 , 2E84/ 10009-03  , -039~097v ;,O 4;,8E88, F8 , 2439477, ;,O J7E88, 5E7:,248,3  -0;00902 /OF-,3 , 8;008 E42E300F89   :948O 10009 .F,  4,3 009-0 :99,93 , 4;,8O9 4239010Q3F09-vE8843-43489F2,709  F79 4,3;309~338E7,3, 8414,2,9204/49910,/,9443 07089Q ;0090 -0   14,2, 02FJ9F8F9 :,3.8, 204/499 10,/,94 E9, ;,O8J942 20   09--10,/,9 0809F-03 0802 0v877E;0093, 4;,8O9, 204/E87,  F8 .8, ,:9E3 2 , 1477E8O/49  3/03 10009 ;FF3 9~99 10,/,949,E,9O  %03F9 F;08 49,9O 9,5,89,,942,9 00902 -0F5J903 0 3;-0  %700/902 7E  4 ,/,43 003 :897E;, 802F909v E-7E,  08 100090 5F/E: , 70:7O  49,9E8E4 0F803 8,E948 2O/807009 ,;,844  E,2070/2F30,92:9,9E 40032O/8070,9F43,3,,2,,9O  %--40E2857O-E9,v098F5070/2F330  J42 -0330  4 , 0/;08 4;,8O  9,E, 2,/  4 ,47,9,8  F7/008 ,8348F8070/099,33;099,794990F-03   807v  

%,79,420F 
                  '%A$  #' %   'E94O3F; ,4348J9O  'E94O.J2 'E94O9J5:84 'E94OF79F0 'E94O/013EE8 8.,31 57391 18.,31F81573911Q;F30 &%$ % $  100F8
:9,8J9E8 C8809099:9,8J9E8                                        

39F8:9,8J9E84    1:9,8J9E8    89.:9,8J9E8   :8:9,8J9E84    0.:8    /40.:8    147.:8   &7O:9,8J9E84    -70,:9,8J9E8    .4393:0:9,8J9E8    494:9,8J9E8    709:73:9,8J9E8    A$ 100F804-- #;,:0 F8-, ;,:0 F79F0  

4389,384    F89J5:84389,384    ',O89J5:84389,384    ,7,9079J5:84389,384    ,7,907E3.9J5:84389,384    $2-4:84389,384    507E9474

                                

79209,4507E947 C880,843J9E84507E947 4,4507E9474 903F394507E9474 A79F,/E84507E947 42-3E94507E9474 '088v4507E947 09F90084507E947 $0414507E947 ,894507E947 05.99J5:843;07O   

                                          

! %# &%%    

~;009054390700    A79F,/E8    C880,843J9E8    543907 

 
0F8    !439070Q3-8F0  %CC  

/203O892-    3.,EE8/013EE847    ,5.84,9,92-F8543907099   ,7,907E3.4 89730     ,7,907E3.4-04;,8E8,

J7E8,    ,7,970E3.00v1Q;F30         F9/203O892- %--/203O892- &$  $ $   % %% !&$  950/012O/48J9O0v  

897:.99J5:8    897:.9 
5439070    920v           :3439J5:8 108474E89J5:8 03:2  D'A J2807395,7,2F907E9,/E8 !,7,2F907E9,/E8,$%
0307089Q

                                     

4-E8F84E8;E94O !747,2907;0F8.8-03 Q;F35439070 Q;F35,7,2F907F39;,OE9,/E8,1Q;F330 'E94O5,7,2F9078E21Q;F30 !,7,3.8847,7:2039:24 ,2,31Q;F35,7,2F9070  #0:7J;1Q;F30 #    A$ !&%

.F30 8. &%!&%}'%  42E300v1Q.31.

18.3109.057391..

OF8/0.1573911Q. 30.24E8 013J.7E.E94O489E4E8.9J5:8.9                         ../.10Q3F09-v 880909910.843839~E42E300F8  %  A! '#u $97:9:7E95747.F3000--7v .24E8 4/:E785747.O .

2.3 8419.3 8O  . $ 8. .9O -0330 . 30.323/0300v99.0  F8 203370 . O  F5 209.0 .3 0 .8E2J9OF5  F5O/49 330. F9030 147/J9O 2.8  0508  F8 . 02-07 30.F530.3.77O F5 O/7./F49 802F909 .03 --03 ..8J9E84  F8.0203009v8F0033F30.8O0F-039.2009 -E720 24/073 147/J9O 108207 930.  30. 07Q -02:9.  0v7003147/J9O92F302J79.09 O 2009.8439 8Q8F . .4 .8:5E3 F9 -09~-v E   .E348J9E8.3:3.E94.39E.. J73 0 4.090v70    30. 802F090803 2:9.30. 08v 8E2J9OF50 J .20 E9.-03 .9v  20Q3-909Q3 2.3 5729J. 8.3 30.    20F09   E-7. .. -0 23/09   F7/v0 . '%A$    10..20 00-- E .249  .9003/v0    03 30.  /0 703/J. 0/90 200033  $Q8F088F .O7.   009v. 8E2J9OF550  29 807093F  40. 30.   99O 1Qv03  4 203370 .7:   E79  Q3-03 302 F5 0330  .047/4. 0330  .  08 F.09v30.E9 90E9 . 02-070  239 .0 F8 7.05747..:34./.F908 4.    .E94.24E830.3: 2.9204/E8 8E2J9OF550 422:3E.-.4.E9J9: 2 .3 073.09 F79 . 09v 30.79   3.9.20147/J9.F8-03 8070930 80J98F09 39..9. F5 O/ 30. F5 30.49  ..  O  0F302080-- .3 .. Q3-v .24.30 . .9E87.5747.F0 .2009.24O8070930033 O 2009..2030 E-F. F5 O/  2014.009   005088J39~5747.7vF5O/7.9.422:3E.3 5747.243.. 3.24E830.8348  F8 0-03 F7/0108J9v 970.  30.. 8.  O  204/E8 0 5747.E-F. F530 8E39 :9.079 5747. F88E200-vE . F583903 02...9 0708099   8Q09099 20 .3 F97049E .F0 .  :9E3 .3147/J9O9J73 .9.O9 109F900  0 .20 147/J9 F5 O/7.9 .8E2J9OF509.843 839~5747.89O  43/4:3 -00  30F 0 4.24 J7E8E9  .30 1v0 ...4/3 .24E8 30. 0030 08030 F5080.-..F003     F5 43/44/E82O/E4 . F9704E8. 5747.24E830..3:3..70  . 147/J9O 425E947  43/4.7E3  42.0-03 0338 #9.E3 80739 .302 02-07  O 8.Q 1E7. 3 9:/42 .2009E90/.49. 02-07 F30208 F3  2E8 204/E84.  30.9O8E3..09  .03 -08F3  ..09   9072F8090803 0098F08  .09v30.7v .5747.

!.8. 2070.020  1455  0203095071F7E ! -039~09  203095071F7E ! F5073v 3429.08847   E-7.3. #' 5 2.30.0          E-7.8. 4-4    !    %  # C!$$%}!# #  $' 5  479  $ $%}!# #  $' 5 8802-   A!  .    . E99F79E7.. F5 ..7          $$%}!# #  $' 5 .9O   !   08v   # #      74574.

399 9E74. 5747.3 0 0830 .J9499E ..3 07Q30 09E74E87..0.  .F3 .   5747. 10 703/0.30204/..3 .3 3F  543948.422:3E.3010.--O E  4 .9F7F50 F97E3.147/J94997E350/.09      F5F8 10.20F09 E-7.2 3F  4.94  003 0809-03 .E-.0090 8Q8F08 .2:3./.2 /44  F8v-- E93   14:  29v 1Q  4 -4348 . Q3-v   202O7.9E8. ./.8J9E8. -08v 202O7E-.02:9.E99F79E7.9002F80   10.9 Q8v 202O7E /0009203903.9 7:35747.O..F5F8009  0.. 147/J9O9O  .0 .425:907  7E3 422:3E.24O F ! 507843. 930./..24394743. 274574..5.2 O/E9 . 0vJ79 2~.3979F31.8E2J9OF510. ! ././.9..  .  :9.  !# #  5747. 807050  0 00 . 907Q0909 .249 .3   ./50/ ./. . 10. 9E7495747.E.94 20 %$$ 202O7./. 202O7E-O .9.9.79.33 E3489O 077010F   . 4.94E42E34-.84E8.. 0Q99.83E  23/0330 20F.43.3429.009 9903v09 E99F79E7.47  .8E2J9E890.-08v  202O7.F70.3.89    .-0.2.8E2J9OF5 .2 99 07Q09E74E87. .97v/ .9O307089Q979F3    8E2J9OF5-0 !  -0:99. 10.8J9E84.092:9.2 :9.  2.9002F8047. 2E8 E742 50/ . -039~0903 .949 204/O 5747.20.. 5747.  Q .F30 . -0203v ...9907029F8.FF79 0 O 82079 10..9 F5F89 Q3J909Q3 0   4-- 20F79F8 0/. 0. 070/2F3009 :.08847F8.   4.88.20147/:O5439490039099 .84.08847 003F39 4./. 274574.9.0Q.2 ..20. 907Q0903 % $$  $%  !  07Q30 09E74E87.9 ./. 907Q09 9F7F50   20F09 E-7.200 .99  $%   0147/J9499  5747.24E8 730099v F8 .94. 10.E--F7/F807007088Q.9-..9  2.979F302F-03   5747.3 .5. 5747.94.F v09   274574.O80Q99./.94 .9O-O .9499 . -08v 202O7..9498E2J9OF550   ..-05747. 5747.9204/O 7F8F.  239 ./499 .O E9.9  ./.08847  9J5:8E9O  4.9E74. 0  F79 202O7././.79.9O     . J7.08 F8 .943 07089Q2:9.02E84/1400309.9:-0.8E2J9OF5202O7EE-.08847  .9 ..88. .  .9.203/:.2./. .2:3 E9..94..9 F8 0.83E9 202O7./.  0:2.9  9. ./. -08v 202O7E-O 5747.274574.33./. .

9 F8J7./.  .9  .4792:8 4. F8 580:/OO/ 30.0Q 070/2F3030   2E84/1400309204/E8E3...070/2F30./.33. 10..  02 1~Q3 2..2.3 .499 2~.0Q 0807~03 .9O3.. 2057O-E./.9  F5F87v F5F870 0.3 . -0203v ..F5073v70./E8    . 4.070/2F3009.  330 20. 20100v0310/44.. 8E2J9OF5 839F3 2014. 307 -0v0 . 0 E42E3-O  ..4792:84. -0203v ..0Q .8E8 E9. 10.2 .0 . 0143948.2009  . . 580:/OO/ 30.9O--E 90Q .8O  .090v  04. -039~097v . 4.4792:83.33  4 2014. ././. 1039 10. 204/E8 .F:3 ..8.0009.8F2.E9O20F7903v09  -04. 070/2F30 J7E8..3  ././..F5073v70    .0 84E8 E-7E43   .2.3 20903909v .F03 009 30.03 10. 0. .009847  .979F3    0098F08 147..  .9E74E8.949  . .-- F8 0-03 03000-- F5F8    .  09. -039~097v .70 E9J7.8E8 $%#%  J7E8 ..949 204/O .8E8. J7O/3.8E8.949 4E:  803 . -0203v ...9-.3979F3 ..9 204/E8E9   . 10.E-.88.9 4.F70.  .0  30. 80J98FF.  433. 8E2J9OF5 204/.      0 .4792:8E3.9 14. 0039 F30F-03 ./499 ...7E.4 ./. 10.949O .94 -04. 8F2E.4792:84 F9 9Q3909099 2~.0090  .0 .  9 0 8E2J9.E--.  09.0E42E3-..E4.009 .9  330 003F70 .9 204/E8 .-.  F79F. 209E7. . 204/E84 9 30.0 4./.. 070/2F30  -04.  09.94 -04.  /39F8 /- .94. J7E8. . 8F2E .2.

    'F900384 204/E8   $% !   .. - / .O8 204/E8  -      .8.- 3.8 204/E8 3.   / /   .

. .    Q3-03J7 .8..47.-     .47J7 'F900384204/E8       Q3-03J7 3.F0..      580:/OO/ .       .  -04.4792:82E84/1400309 .8204/E8      .47.. ..   ...

O8204/E8     Q3-03      -  / .F0./     ..  Q3-03   /- ..8.47J7 33.-   .   .

  -  / ..

. /    8.4792:8 3. 57391 '0900384204/. J7            ..~5747. .F0.3    /4:-0.8     08057391 3..9  2.:/02..8204/. .F0. .   1 .  .F0.8    08057391 1  .    1 -    1 .:/089/4        30. .2 3.31 111  .

8..     1 / 57391 3.48204/.8    080        - 8679 / .. . 080    /- -  .

  .      - 8679 / .

  .     57391 1 1      <  < 709:73  <    .

9.4792:8  203 94.F70. .24:88:3 0-03..3 8Q8F .E-- F5F8070 .9O5747. .4  4.8E2J9OF5E9. 703/00F870 E ..

2 20807089F80 0 20100v E9.8J9E8.2030:9.-.009009  204/.F5O/7.J.2 O/  .2 807089F80    425EE8 -E 30F8 -E :9E8.949   $E2J9OF503 5747.24E8 73009-0 -0F5J9099  8.3 0vJ792~.30.E-.9.0807089v.5J743 0.E3910..2 :9.5747.FF8F70   10.9  F5F8 O/4E8 .1:99.F5F508.30vJ79 2~.9.70 70/2F30.1477E8O/3../.3   !747.9OO/ .0  70/2F30.4792:8E9J7E8./.4792:8-.30.0099E42E3   4792:8  F5F8 47/J9E8 425EE8  1477E8O/0147/J9E8.9E8 #:3   F5 .0E9./. 70/2F30.:9..5.8J9E..F70.9.8J9E8.00900.3 . 5747.9002F80   F5F8 $07089F8 /9EE8    5747.  5747.9E7O/  O/4E8    F5F8 C880807089F8 30/9EE8  70/2F30.2 O/   F5F8 :99.8E2J9OF509.F70.

E42E3  425EE8 47/J9E8  %E7O/ 4- E42E3   30/9EE8 C880807089F8 E89E7O/ 08F0   :99. -E 477E8O/ .9OO/ 00E42E3  #:3   .9. 4.

33-90 .  543948.0 ./.J9..J20 8E2J9 .34.9 .49 .3014./.E94O-.8 4..4348J9O    .9E74E8 F7./.2.J20 ..8E8 342E3  202O7E-.3   7008 . .F..  4 270  203 . 02E8 :9E3 202O7. . 14: .79.8.4348J9O.7008.3.0  .070  E3.9.E94O .83E3  $v9 ..3 9E74: .~. . . .9 -0203v . .8.E.-09~99 2.J2F70  !F/E: 2.  02O7. 0   08v 7008 . -04... -038E2EO9     'E94O.9 .9070/2F309F87F8070/2F3098    202O7E9  0 0F503  2398478E24499 202O7.J2F90039     .E94O30.F308 23/03 .. 8.20.5.0099 202O7..   %0398Q00v70.8  .8 .E94O   4. 07Q30 . . 8478E2.J20         9J5:8.3 84E84.E94O2F7090.9:3 0 .. .20030 . 100    202O7.0         . 2..700808E2.3 .                       30.E94O-.J2F9 .9 !F/E:.F 8 F8 3. .9E8E9 -90 -.E94O-.J2    4507E947 80J98FF. 30.239 8E20009 9.2.O/3.$F7F03.E--3F002vF9     02O7.8 30..90039  4Q3-8F099088 F83.94.. 10. 10.EE809  .34 E-F.--.E94O30.J2F30  .  30. 20. 0039F80 8:.8E2E7. 70080 14.948 -08F/08 .  &./. -09~9  .E94O..4348J9O7.-03  302.9 /03020/v/098E200 30..3 ..202O7.   07Q 09E74E87.323/880099E74:3 . .89.E3202O7..E94O .0099  -3E78 8E20  .0-9-90 49..2..E94O.  -930 30.       F79F0                'E94O3F.E94O 8E2E7.8 $  2E8 2E8.70080 02E8:9E3E9  3/03 7008-03 34.8348 009 .

.7942E3-O9E74.E94O 9J5:8.9  4 203 F79F9.0.09v.59J5:84 .E-.99.239 .9 F79F009 F8v-- E9314:  4 . 20 . 9J5:8 2.. 14. .O88E249E74E8E7.F009v2~...14.7 390F88E249E74E8E7.4/802203.9 /4:-0./.9E74. 2F709F9  ..  'E94O9J5:84   . .0090098  . .

 0.O8 8E24 .5. 00F8 O 02 23/03 .E-- 9E-E. 4E: .3 8479 39 090039    %J5:8       . 8E2J9OF5 202O7EE-./.290090903E-7E43.2.9 /4:-0 43/4:-0 F709      A79F9.9O 0 543948.59J5:84-O30.94..7 :3830/.E--9J5:8430709v   %J5:82O/48J9O 830/ :3830/ 8479 43    . 2F709Q09 -90 -.3.7942E39  2033-03 E3 .9488E2J9OF5003    ..7.--.59J5:8  25.7 8479 :3830/8479 39 :3830/39 43 :3830/43 14.3 ..-E72039J5:8 E8/F8v-.3  F8 .F9003 90/08 8E2009 9.00999J5:82O/48J9O.. 8479 . .O8 8E2 9E74...3 .2.OE-.3   4:8  803 008 ...83E.83E9 0807~ 9J5:84.84O/O F79F9. .9 88014.9  20. ..79.7942E3                 ..9 39 30 903903/v  !F/E: ..

 .

   .

  .

./.9 8041 /4:-0   80414507E94709J5:82F709F9.20-90 -.9-. 14.3 F7..E-.E--.8.F3080  803 .0v 8041 .10009     . 9J5:82F7090 1Q0930.8.                                    1039 9E-E.3     . E9.147/J9O9O $89.7 8041 8479 8041 39 8041 43  8041 14.9 F79F0 ...3/.9J7.7/.

34: 14.F30 E9.8. 3.09E74E8:7. 2F709F9  F8 .31 F8 57391 1Q./../E8302900v  !F/E 39. ..7.8E20098207 . 09  3/0330 /. 0 .EO/  2E847. .3.E94O /013EE8.21:9E8 .E94O3.. /013EE8..:9E307Q09847.O8 8E24F9 50/ 0-0v543948 .9:8.3 :9. 202O7E-.47  20 0 . 14..0097v -08F9Q3 .E94O F79F0 .4792:84 . 5747.   .F9  9J5:8E9 0 .99 . . 088E2703/8078E2009 . .90 4.9 0039  4 ./3:3 . 8E2J9OF5 0  5747. 43/4:-0      ..9 .8E2J9OF550 4443F970.8E87. -0203v . 070/2F30 J7E8E7O  4. 20 .0 ./.94.8E8E7O  F8 .J9.E94O 30.8020909 149..9:3 0 0/vF79F09 8 0 302 900v  ...24E8 730099v 1Qv03  .8J9./..3 . 2 F302Q3F79   08 8E2703/807-03 F7900 . -0330 09E749 F79F  03 F79F .94 -04. 8.008 E42E3 -O.O J7E87.E94O0/vF79F(  80908E7O00.E94O3.:942.843930.3  -08v E-7E4E83.F8.30.8439 . 0F8 8E24 -08v E-7E4E8E9 1543948  .  -039~097v .0Q  3FQ  4 7F80903F3 2002J9Q  4 .E94O/013EE8839.0/vF79F .E94O9 09v .   . 9 .9 0F79 8 30.  'E94OF79F0   .2-O 003 2~.30. 30.2.E94.202O7E-. -3E78 .O 4.47  . 9F8.8.79. 302 .9E74.0 .9O .0090 0-434J9E8E7. E9.5 F09-03 E9.3Q.  $.9- - 43   :3830/.90039 4 8E2009     .8E2J9OF5.3   .   23/033.20-03 .47 -4348 08090-03 5747.0     'E94O/013EE8  4.E-.93 E-7E4E83. 2439477.E94O /013EE8./:3 F79F09 .  5F/E: ..49  .0099 202O7. 07Q30 .. 10.3  08 8E2703/807-03 /44:3 .5.83E:3 0802-03 .  . 8E2J9OF5300v87E90.E7.2. 9J5:8..8E3 F9 9Q3909099 2~.  09.8./.83EO..94 09E74E87. -039~097v -0F509 ..

O 4.  ..8E8..-.

J7E8 0809F3 . 18.83E.9: .31 F8 157391 1Q.F3009     ..

249  .9E7.    10.F30    E88:323/0300v990437F95F/E9.31F81573911Q.9 7:3 5747.02J90991Q.83E..20 -04.  8.F30..8 . -039~097v.31 57391 18../.

E42E3-O 0 0F8 8E249 2./J7..F5073v70.

88. F8 .  1.47  0330 .09v03 .  57391 8E2/ .43 3.31 / ...5. 709:73   %072F8090803 . 4.93 0009 ./3..94-...8J9E8..F30.83E.9.F809 .2 7F80   5747.3   E42E300F880 14. 3.3:8E4 O 5747..F30  10009     02 E 8E3/F:3-. .  709:73  <  . 05 0  .31 18. 90088F F3F.. 1Q.2 1:99.03  3. 2. . 114503 -0 99  7  14503  99    18. 1Q. .E42E3-.10009  7.31 57391 157391 .480   709:73  <   30.8O 9008 F509 8070930 3073 7O:  147/:43 .9 9.8.9088Q8F088F 4 .339 4 4 .9E8. 3.480  8.3.03  3./. .2 0709F7v   3.203370 8Q8FQ3 08 ./.0 -02:9.4  4 .88.3    709:73 < 1v1Q.3-. 2. 3. .88.7E. .00 . 8.480 1 1.F3009  E9.0F7F89 F8 099v 8 .F330 ..28479 .  157391   8E2/ .7v    .31  57391  18.3 1Q.5. .9E7 1Q.   30.339 807093F3 0243/.5. E9 .F70. .4O 10009-03   .83E3 9:/: .3  ...F3009  8.3 1Q.E91Q.20090080J7E89.F70.. 5747..:/089/4  5747..8.3    1   39.9E8E9 0039   4507E.F30 003 5747.2 . 14503  1.3      709:73  < 00v70.F3 23/03  5747.9 2E8 1Q. .F3 20J.:/089/4  2..:/089/4  2. 08v 10F-03 80705v 10.3 .30.31 F8  1573911Q.O8 703/807  .2.F3 :9.3   39. 2./. .31 1  /  .0F7F89  0 00930 3.9F7Q3 7E:  . 8..3 99  2489  .9E8..:/089/4  2.

.3 1Q. 2.7F488E 44-O  .9.79.5.2E914:20J73  O 08v5747.J7E850/.200-03  09.  O  E42E3 -O. .2-.3 .0Q3  '0Q F870  4 . .~E42E3-O979F3 .O 3/03 .8F8.E94O /013EE8E7.8439.. -44 00F3 07Q 847  0830 5F/E  ..27F89 -43.-039~097v4. 2439477. 99 30.-04.J7  2E84/5747.8E8.~E42E3-.F3-4E3. 30. .2.848E7O0 5E7 F E79 5747.-0 9930.8.

.O 4.  .-..8E8.

3 Q3-30  4 .3./.  18. :9O--. -04.31  57391 18. -020309 E42E3-.  790  O  -020309 E42E33.8..070/2F3009  O  1 F8     9J5:8 ./4993F.  9J5:80543907 9J5:8 .  57391 1472EO847 100F8*89.9 . 18.-0203v .94.8.0 157391 1Q.9O   42E32039E8E3. E42E39 09 200vv0320393 14503 2.33. 8.9E8E9 200vv03  F8 9..20-03 ..93  O '0Q F870  4 8.3  .9O14503 E42E3*3F..  E42E3*2:9. .99 F80--0J7.F3030  4 20 E42E3-O4.8E847 E9 0 9F73 Q8v E-7E4E87O -08v   ./ 39:20 . 30... E42E32:9.20.E94O..E94O.79.../..88.3 .94 -4348 E9.8439 .  157391 E42E3*2:9.8499 .839.31F81573911Q.94.2.. 07Q3F30 .2 14./.839./.FF3-0E73 1.3. 1.20-03 -0F50Q .9O    E42E32:9.480  O -020309E42E39 -0 99 4. . 0 . 09.49  .2009F8v--14:3-02:9..0 ..839.2 1:99.0 157391 1Q..3..:E8443 20330 E9  20v99 09E74E87.49  4 .9O 1472EO847 . 20100v .  Q8v E-7E4E83.    2J9.E94O.9.31  F8 57391  09.F30 .9 .8. 7 70..J7E8 0809F3 8Q8F08 .E94O-. F9030 0 . 5747.J2*89.31 09.--.9O/013EE8E3. 20309E42E39 .. 5747.9O 1472EO847 100F8*89.31 E42E3*2:9.31 1472EO847 .8.  2039E8*2O/. -039~097v  .F30839.47 -04.31 09. .0Q  F8 00 E9.9O    8..3 807050 . E42E3*2:9.9 E42E32:9.0 18.480 E42E3*2:9.8.F97043 ..    42E3-0E7E8E3.-.0Q  .203099  99 50/J7E87. . 30.020-0J7. .J2*89.9O3.8E87. 00Q .

77O  4 90390990 .E-7E4E87..31.93:3 0 1Q. E9.J9E84 9J5:8 1Qv0  9EF49.  J7E847 50/ 147/J9.0 .  -08v7v Q8v70  .E94O 8..F30309 . ..

31 0809F-03  09.18. 100F80 57391.0 ..

/ -08v E-7E4E8:. 1472EO847E-.3 9.7.7.9070   %J5:8  472EO.907009 0 ..79.1472EO8474.. 0-03 J7. 1472EO.  .31 18.J9E87..907E3...9070./3-13.. 8.157391 0809F-03  9J5:8E7. .9E ..  /   57391 . :3830/847939: 4339 /. v09  2. 43/4:-0/ 8.83E91472EO.3 2009.88E2703/807-03       488E2703/807-03  :3830/39 : 847939 /.E94O.  . .88.9 09E74.   57391 /  4               :9. /    .J289E.009099 1472EO . -0..907   . . . . 1472EO847 1472EO.99.J2070  8.  .7.9  . F5073v70 E42E3-.. F79FF9 2:9E3 E9.7.9O 302 1472EO . F5073v3.  088E2703/807-03  4  .7.E.5.9 1 /4:-0 1 43/4:-0 1 .57391100F889E.3.    57391 157391  .E.J9..38Q8F 9. 1472EO.E94O89E-.90709  .7. 100F889. 14..8070509. 8.9070099.9- /4:-0.9070 99 -0  !F/E:  .090v00320  .7  39               . E42E3-./. .7.8J9E8 342E3  .83E.94.949 43.7.239 .2.13/13 .3.7.4 F81472EO.7.--. :3830/4339: 14.31 1472EO847..7..7.. 2009 2O/43 E9..J9499.E-- 5F/E -02:9. 09.31 .9E7.84.7.0. . ..009099 30. 20100v 1472EO .31  -04../4992O/43-08vE-7E4E8-OQ8vE-7E4E8-..E94O.0900305F/.9O  . 20100v 100F8F30 .31 18..3 9.    . /. -039~097v -0F509 .   0.  203E9.31 /111  . 8 543907 5     .90770-0.9077020..9070 0F70 50/ -0J7.7.907 E9..8..0099 1472EO .

 00F8 , 9J08
8E2703/807-0 
08  34.,8 8E2703/807-03 49E    903,9488E2703/807-03 0, 50/,;,    , 9-- ,/,949 807093F3 -04;,83 :,3,, , 8.,31
10  ,47 0009 10F7
,7,90700 90
85,.0
3030;0Q 5F/E: ,$! %F8%#-039~ 0Q9F8047 94;E--J9O/O ,7,907009  0;E,89;, 0 -0F503  F8 , ;FF3 %#
9 0 0Q93  &,30009 , 0;E,89O ,7,907009 0 ,83E3 , -020309 E42E34-,3 8  039~097v ;,O -04;,8E8 ,,99 , 8E2J9OF5 20003J9 , 30;0099 10,83EO F5073v9 &807$.7003  ,20 ;88,34, , -0F509 ,7,907009 &,3003,F5073v3003J920,573918,070/2F3009    , , 1039 10,/,9 08v 204/E8E-,3 , -039~097v -04;,8499 F79F   ,47 , F5073v3,;090v00320 8,2  &807$.70039,79,2,,5747,201:9E8,342E3   8E2 J7,9E8070/2F30 

-04;,8E8;88,3,  00F8

O  8.,31
30 F8 18.,31
30 09;0 57391
30 F8 157391
30  239 1Q;F3030  , F79FQ  , 8070803 -04;,8499 F79F0  09;0 , J79 ,7,9070 8E2, 08  0Q 20  4,3 14 3F3 , &807$.7003 , ,E--:9,8J9E84;F70,9E8,342E3 ,3
-0  
94;,8:3-0 
39, - ,8.,31 /  3  -57391 / 3  57391 // , -  

8.,31;88,3, 

 

57391
0 342,  

 94;E--10,/,94-O2F9--/07Q,-02:9,94991Q;F307v     10,/,9 7:3 5747,249 ,20 -04;,8 , -039~097v F9 ;,O8 8E249  2,/ J7,,F5073v702,:,9,8E24,9 09;0,880Q09   

 
3.:/089/4  2,3   14,9  57391 7/-0,08v8E249  8.,31 1    57391 7/-0,2E84/8E249  8.,31 1    57391 F98E2 108 13    57391 F98E28800 1    709:73  < 

00F8 O 948,3 109~39  4 , 57391 1472EO847E-,3 ,  ,7,9079 302 ;0903Q ;0990 , 1 14,9  1472EO,7,907  03  20,/,9O  E3 54J.O3 07Q030 J7E87, , F79F0  F8 ;,O8 8E24 0809F3 , 8  4 0--v E3 003 , 90/087F830 10339,79;, 0330 E3E-,3 25.9  90/08 5439488E, 979F3 , ;,O8 8E24 J7E8,  8 243/,93E3  1472E,9O , 20003J9F8 2O/,   1039 5F/E-,3 9 54J.O3 979F3 , J7E8  ,2-v 099v , 90/08 7F8F   ,9 0039  4 , 0F8 7F830 :,3.8,F954J.O2,7,/ 803054J.O9,90/08543914014,3  , , 0F8 7F8 9-- 8E20~  239 ,E3 54J.O3 F7Q , J7,9E89  ,4710203J;Q08,;,,F7954J.O8E2 4,31472E.O30 8F7Q3  030v 0809-03  , Q70803 2,7,/9 54J.O 8O ,7,90770 5O94O/3,   , , 90/08 8E200 8E2, 9--  239 , 8E2:7, 10339,7949954J.O8E2 ,47,5:88E200 02,7,/3, F8070J9F8 979F3  0;080-- 90/08 8E20 0809F3 3:E, 0F8J9v/  , 90/087F8    !F/, 
57391  1   

20003J9F8  ,F79F0  ,F79F0  ,F79F0  ,F79F0  ,F79F0   
       

                            

  10,/,9 7:3 5747,249  ,20 -04;,8 , -039~097v F9 0F8 8E249  2,/ J7, , F5073v70 , 880Q09  Q3-8FQ09  847,9:,9  E3,/48:,9 ;,,239 489E82,7,/F:,9 109F900Q 4,2E84/8E2Q3-3:E9O   
3.:/089/4  2,3   39, - 4880 :43-80 847,9 ,3,/48 2,7,/0 57391 7/-0,F98E249 8.,31 //  ,  -  4880, - :43-80, 
- 847,9, - ,3,/48,

- 2,7,/0,- 57391 C880/3Q3-8F/3$47,9/3 E3,/48/3,7,/F/ 4880 :43-80 847,9  ,3,/48 2,7,/0  709:73  < 

 00F8 O F8 8E24 J7E8,47 8 20,/,9O , 20v8F088F  ,,  4 E3 54J.O307Q030J7E87, &,3,,200F8F7;F3087E: 239,29 ,;,O88E240F87F8F3F9099Q3  !F/,
57391 /   

20003J9F8  ,F79F0 ,F79F0 ,F79F0 
                     

 00F80,5747,2-,3,83E94507E9474, 2~;00900 ,5.84,9-,3     
 4507E9474,2,902,9E-,320844992O/O3;800/30 

 0F8489E8 2..47 0F8 489E8 979F3  ./FE9.47.20 . 23/F9 4507....O8 489E8 .0F8000930  !F/E  .8439 .7.3/:8.8.3/:8 0F8  ..O8 . .4507E947 0809F-03  .20  0F79 4507./.

  .

   .

 .

                  009 F79F.0Q      ./E84507E9473.30.

   .9E8E7.E94O100F8 ..0 .8...  .4/.   .100F8 4--4/. ./E8839.. .  .  .0F8F70 09.E94O F79FF30 00 .0 .8039F8F70 39.   . / /.E94OF79F008     Q3-v 009v8F0 0 .E94O -. 09.  .Q3-8F. . ..3702039EE8499 39. F79FF9  !F/E /4:-0            .   . !F/.. 10.08..F79F.O 3.

. /F79F0  .F79F050/08 .

 - ..

..-239.  .E94OF79F008 .

79209.. - . - .E94O 100F8  E842-3E9.  %072F8090803:.E94O.839.9E3.E94O 100F8.8.83E. -   42-3E94507E9474.8.2E84/0809-0350/147/J9. 100F8F79F0F8F-03F8. . - .83E./499F79F0 39.:9E33.0F800... 4507E9470809F-038    'E94OF7F9F303. 0v873.  08v :9.0 .:9E3.. - ..E94O F79FF9 .8J9E8 F7902F-03 .0F8.83E.  . 8E2J9OF5 0v87 .4507E94     . .30.

008 E42E3-.0  :. 8. 8.:7479      10. F5073v3 . ..3.      3 30 09 .90730 30. 57391  09. 157391 1472EO847E-.3  $E2J98:  .7.7. F5909 . 880Q09F8J7:./.38 847-.24 -0 8.9 /499  0F8 8E2 .3 847 3030  .0 .     .008E42E3-.24 8.9079 . 20309 E42E3-.

.E-- 204/E8-O /07Q  4 0F 0 .. 20F09E-7.31 1  /   8  18.84998E248E2E9O    !F/. 9~309 4 8Q8FQ3 08 3F .9 7:35747. 3 ..3021Q.20 -04.480 1  709:73  <      8..00F8 8v E9E87.480 1 1.24 -0  7  114503 8./..90909 03200J9F80v30 4.24 -0      8 8.24  880    10. .3    1  1 39 8  114503 8.   .-04.249.            3.31 1  /   8  18..802F909. 20  .8.F7.E94O9 .8E200880F9.31 1  /   8  157391 1  C880/ 8  1. 3F 8E2 09E74E8E7.:/089/4  2...-039~097v03F0~9072F80908 8E249F8J7.F5073v70  C909  3    100F8 . 3 :948O 8E20F9 .24     18.E94O 8E2.83E3 0770 ../.31 1  /   8  18.E94O7.

99  3.3F8.5.E..8J9E8 50/0.8E249  8.   :9..F70.5747.31 / 3  .E94OF79F0.3.3:948O8E20F9 20F099E-E.9E8.E94 .934243.09 4.:/089/4  2.2.3   393 5 57391 7/-0..

E423 :948O8E20F9  .0 2. .090vF92~.00909 5 920847423:948O 8E20F./0.   80714422082F903.

 5 3 3.

  5 3 3.

  5 3 3.

  5 3 3.

84998E2    3 5                  .  57391 847.9/ 5  709:73  <  !F/..-04...

7EO8.9 2.0099 422039E74.0009  30.79.9 .    5747.2 9...2.

  .

 .  009 .20 8E2J9.7 2.88:E8 .Q .7 F8 2./499 8:.20009488/v307089Q.240809F-03 . F8 J7.9. 1477E8O/49 4.2E9  2.8 F9 .249  .E9     7:3 5747./499 8:. 8E24.O8 8E249 F9 .72.9 147/J9499 847703/-03  !7O-E: 204/. 3472E943 2. ./ J7. .9E9   070/2F3009 9E-E.E94O-.10..249  .  0vEJ9.83E:3.E94O-.94     7:3 5747. 09.83F E742 8E20~9072F809088E249 F8 J7..E94O9. 0 F54.   9~9910.807F0     7:35747. 147/J9499E9 0 2E8 ..83E.20-04.20-04. F9 8E249 02E8.E.807F ..84341Q. . 147/J9O 10203 J.E94O 9. 80-088FF8.3  2.8E200880F30E9.9../..  F:  330--03 F7909v.E94O-.8098E20~9072F809088E24900F8 ./ 50/ J7.F5073v70     7:35747.0 .3003J98020     7:3 5747.3. .8 1F9E..20 8E24.20 -04.88E 00308 0307 F8 5 108J3F9 F8 9F714.79.9498 430.20100v422039E74.F 9033 .249  .83E:3  0030/090903.F3F-03 109F900099..35747.48EE9 .9481472E-.249 ./.249 ./. 0 .

8  - .08943 2.

8  .08 3EE8943 2. .

8.43E8E4 . E74287F7.E914O9.2 -03  $E24:   2033 7F270 .447/3E9EE9.239 .3    /499F95439 F8...9.2 -03F8J7.79O2F70909 E92F7vF9F82.89.8  70.3 .9E74:20 .8F55439E3. F54. .O/v2E84/507... ..8EE9 .8488E9  ./.-0. .249 .33.E88.80/v80-088F0-020309.8J-.88:-0..8.488E9F8.88..F5073v7v058O9.9479.0/07F8~E742808F30 F79FF9144-. 487E.20-04.3 8Q8F.  .9O7907Q09F9F807Q09F9     .8....E/-.E7428-014O3../44:3 07008.3.447/3E9E9       .88EE9  .9     7:35747. 7E 9003/v 7F2 ...

  .

  .003087E39F30vF9          -   .

3. %4.8..48EE9. -c  - .94../.9O .447/3E9E..4.1F07Q09   00F810. .9E74: 20 . c .. .4/..94/:20.4. c 5 .c 5 .488. E7428 07Q09F9 F8 907Q09F9 .5E3  $   5 c 5 .  .48E  /  . - . .  .E--EF9 543943E9203v00308003090             /499 0 E7428  .003089v 2/  9E.85439.. 550/.E--08090-03  -020309  20309  -039~09 243947  -039~09 E42E3  E42E3  243947  E42E3  E42E3    ./ 00308 00309F300Q99./      054399E.

8J9E84 :9.31 //  ./E8   1Q.3 E7O.100F8 :9.3 .30.8J9E .83E9 100F8 :9.:9.95F/./.E8 8 100F8 :9.7.8J9E84 80705090  20 .F98E249  8.--.9 204/E8 .00900.3-. 4880.8J9E87.9:.3 0vJ79 2~. -.100F8  0. 10.4792:8E-. 8E2J9OF509 . 57391  7/-0.090v-03-02:9. F79F. - .  .2.8J9E8  // 5747.FF8F70 .8J9E84   :9.8.F3J.. &9.8J9E8 .8J9E8 $39.8J9E8F809F9     100F8 :9. 03 :9.

-E7839.008 F79020903 ..9.

 5 3  3.

8J9E84    1 :9.090v          003v8F . :9.9:3 .247 .8.090  /0 30Q3 302 E8E3/F:3-.7.E94O.3 4.848E7O0 5E77.8J9E89 J73 5F/E: 4. 807093F3 9-- 02E8 :9E3 .83E:  .8J9E89 F7  /0 2 9-- :9. .9O     39F8:9.8J9E8 00F3 /013E.8439 4E8. 0830 . 839.2.3 880.247 0 109F90 . J73  .843J9E89 14.E-. 0vv 10009-03 9099 200F880 88.3F830.20030 E3 . 839.8J9E84 F50F8F70 .0 0 .47 880 0 14: v09 0 . 109F90 0 0 .8 :9.8J9E89 807093F3 4/.2033-03 . .3-.3 003 .032:9.8J9E8 .8E.   850.8.090v :9.3  23/03 8809099 :9.8J9E8  . 09v -47.E-- E-7E 4.:84-.49E9O 1Qv03  2E8 2E8 2~.5.28 .8E.F03 0 -4348 2~.9E-0./39F8:9.3F.8 00903 :9.83E: .8J9E8F39 003  . 8F2E.-40709F3-0Q.3 .00909 0 0.8J9E89 .4 .. 580:/OO/-.3 009 8 0v147/:.9  .:  .   <  C8809099 :9.3 .843J9E8 4507E9474 .9   Q3-v8F .E-.848E7O0 5E7 F E79 7F8 -449 F50  .8J9E89 00903 8809099 :9.Q708 :9.8J9E8  9. .10009     C8809099:9.83E.0 .F03  .8J9E89   /39F8 109F900 .47 009 8Q8F  .   880.5.3 4/. 2.9      ..E8100F8 :9.00909  Q3-03 302  .90039 4.9  0 . . 2.247  . 8J 9E 8  47 .

*100F8  :9. - .. 9 F8- 9 2.100F8  & & :9.94204/E8E-.8.v847703/-03    204/E8  !80:/OO/  -04. ..8.3. Q3-03J7.47:9.   .  30. 4..F0.. 1 .8J9E8( .8J9E8 080:9.03  39.-039~097v F99072F809088E249 .249 .8J9E84  .9O./J7./39F8:9.. -  . - .28  !80:/OO/  .          & &      109F90 4.  ./.- .*100F8 .- 57391  // .  .-  .8F2./.8J9E8410.8J9E8 Q3-03 :9.v093.03 1 4.20-04.  08057391  // . - .  30..8J9E8(    & E88: 4.0. - 8.83E.4.F0. .3   10.47J7.31 //  .9 7:35747..

9099v3F39.0.E94O.79.4..9499897.  1.31 1  111  . 8.807FQ. .E94O F79FF9    0--03 .  204/E8 4.- -...  1  14.31 //  .3 .- . . -  . .--.--.8.9  .. - .03  39.-  .- .480         . - .  . .- ./.< 1 ... -  30.   C909C880.2:.< 57391  // .3 0807~03J79:. 2E84/ 204/E8 10 8 .  ...E-7E3-02:9.    18. . .. 1 .< 157391 .9.0.80739  F8 ..20309E42E3-. 111 .< 1 -. .8030 3.O8 8E2  J7:  v09 3.8F2. .   00F8   08v 204/E8-.. -020309 E42E3-..807F .843J9499 .47 .- -.  7  14503 4:95:9 ./499 E742 .E94O F79F0 33.E94OF79FF9.E--10/44E84847E3     10.080900894.9  35:9 .. .F0.- .9F.--...9:. J7. - !80:/OO/  -04.v847703/-03.. 114503 35:9 .--. .703/00F870. F9 . .F9.4 8Q8F08 .v 847703/-03  .4:95:9 . F79 847703/-03 E3. ....843J9.9. 880.480 1  1.8F2.  1 .F79847703/-03  2J .

  Q3-03.28  O  47 2~. 4.F8  .399Q5E748  0801 .47 ./3E3 0 00E38.009 070/2F30 .9 ./E8  O  .3/:8.31 //// .E-- .  10.  82070/Q3 20 .899Q5E748   0v99 . .4507E9474  4.009 070/2F30 . 23/F9 4507. -039~097v  03v7Q .3/  F94507.88:3 -0 3F 0F8 8E249 . /  1 ..399Q5E748  0801 / 57391 '.. 0.399Q5E748  08057391 3.009 070/2F30 .4507E9474./. 1039 10.28  O  349 2~.  47  F94507. .   4.9.47 .3 0 99Q5E7488E2F8J7:3020100vQ030909.. Q3-03.-- 204/E89 8 . . .3/:8 4.. 0 4507... .  .3/:8.F5073v70    204/E8 39.399Q5E748   0801 - 57391 './.3/ 2~... / 8.97.3/:8 4. 57391 '. 57391  '.  .

28.3/:8.. .99O 1Qv03  4 4507.28  .

 - .9J5:8  O 3/03 9O Q3-v F79F30 . .. / 8.  -  . .31 //// . 100F8   . .899Q5E748     ..899Q5E748   349  04507. 4. .843OF5503 100F8  0099J7:30807~03 100F8 9   204/E8 39. /  1  .28  F79 100v-.. 3. .31 //// . / 8. . /  1 . 100F8  .399Q5E748   08057391 3..3/:8 O  -0333.49 . .399Q5E748   08057391 3. F79F0  . 0099 ..   204/E8 39..83E:  . /  57391  '.  .. 50/ .84.  / 57391  '. .

:9..8 J9E8   .8J9E84.80&-70.  390 8..09 -0100v/..8J9E8 O F79F0v/.249 .9O/& . F90 .:9. 89.8J9E8839.8../..:249.:9&3 (  <  00F80 O O O . ...    8 9.8J9E8.(  /01.800947-E72030F89J5:8100F8009  .384    3 0F84389..:9.E.& 9-70..(                 .. 8009477.80&-70.80 .. O O O .9F79FF70    10.47.(  .9 7:35747.89.-70.:9.20100v:9.794O8E249 F8J7.3020100v23v8J9F89 0F9003  0F8F08  0508  O  008    204/E8 02E8-. (3907.97E.80 4389.8J9E84 &  'F70.  89.89.20-04. 10397v 0100  .31 / 0  1 0 57391 F9003   0801 0 57391 F8F08    0801 0 57391 0508     0801 0 57391 O      0801 0 57391 008      08057391 %F.:9. 003v F79F~ .80 4389.009.32~/.89.803&3-70.10009   E88: 4.E--10..2 E9F5 .843J9O/ 8477.38 5F/E:   .800947 100F8 O  800947 F79F0 880.43E8 -0100. 5747..08-04.:9.8J9E8   .8E8    89.80 4389.8J9E89   . 800947    ./.4991:9.384.:9 .384 .8J9E8 45.

09  O O .3 2~/3 8Q8F0823/03E.3FQ    10.8057391  .F099 2~. 89. ..8. F9 .. . &   &    :9.3 .E.3 :9.  149.O .. .. 302 00903 100F8 Q3-v F79F09v 1Q .8057391  .9E8.83E..08-04.388.. 802 003v  . .9O/ .2    ..9204/E8.843O.F70.93.8E8  00F8  . 0 4.8.8057391  ./01./.8J9E84..499 1    ..794O8E249 F8J7.94  00F8 .E--10. -70. -0 . 0E.9.0Q .80 4389.9079  398.O8 8E24 302 23/ 9E74.3  0F79.  390 8.8057391  /01. F8F08 -70.8057391  . !.E8  . & 9 302 .-02:9.8057391  .9 7:35747. 008 -70. .0 . 8. 0099    . &3 :9. ..89..20-04.47 .. 89../.8J9E8    204/E8 89.4733.:9. 8E2J9OF5 202O7EE-.80 0 ...8E22. 800947 00903 ..7.249 .2E. 800947 100F83020F89J5:8 .9.E.8E..FF70.    ..:9. 0    .  --v 14O.2  89. %F. (3907. ./..02E8-. &3   .09 -70.47 .8057391  <       9~9910.8J9E88. 8E2J9E8 -E .8057391  .2 8.8J9E8.82E8..O8 8E2 003v8F .9O 0 543948.:957391  < F9003 -70..2033-03F90. 0508 -70.9O/. O -70.31 / 8./O/... :9.9E9-70.F70 .31 / 0  89.8057391  ...003v8E2.8J9E8 .0090..:9E   4  4 ..8057391  .89E8 239.:249.2009 -70.80 ..8J9E8  .

. 20-03 9. E3 30.249  . 447/3E9E E9.79E8109F900               7:3 5747.249 .20-04.E9 . 09..20 -04. 5439488E  ./499! ! !543947O0/39  4000308039. 2098F8 109F900  4 30 0030 5E7:..249  .249 .2 -03 0 4/.E--5747. 00308 Q3-v 4/.  1   1  & 080&  -  1   1  &< 080&    7:3 5747.    7:3 5747.O8 8E249  F8 208E24. 09--  .83E:    1 ..E.305F9    7:3 5747.3 0 00308 Q3-v   ./.. .27F809009 . 447/3E9E.  398Q 0  4  2098 002E89 F8.47 . /         7:35747.8F2E.  09.4:104.     7:3 5747..20 -04.8 3F ..E.200 /44:3  !F/E: 1  0809F3. -  .249  .248./499 E74287v0/39 4003v8E7 0    .249  ..E94O9. -       ..8E2409E74E8E7.20 -04..3  ..9O 9--  8 8E20  F8 J7 0 20100v Q030909 .0 54394 .5J98:20205439-..9J.38E2009    7:35747..447/3E9E..85439.88: -0 0 E7428  4/.Q3.8 0 3F0~ 9072F80908 8E249  F8 8E2J9..907Q09F9   /499 F9 8.O8 8E249 F8 703/0 v09 ..9-O0E7428 8E2J98:. 20.9FE80739 .83F 90~9072F809088E249  208E24.8 0 3F0~ 9072F80908 8E249  F8 880.803v 847703/-0.0  54394 0030 .9.20 -04.8 3F .8.239 ..4 1 .05E7.3.57J28E200308E29.880..3 C909 .20..E3  F9 5439 ./.9O 0430.  F8 .E--897.03E.49  .843J9E8E74290/085439488E.5E748 09..20. / .249  .2 009  2033-0380708909v0E742.20 0  .83E:343..F5439.14979F33     #.  00308 2E8 2E8 4/. .8     .

83E:3232E88E2.10. O 3.31  157391 1Q.83E:  . 207v0080 2 2   42 F82 .9  00 147/J9499847703/080739    /499F900308F9 F95439:447/3E9EE9. ...-09~ 0 .0 7F55439E3.88:3 -0 0 ..9079 2.843J9499009F9 C9098E2J9:.82079:9.907. C909 00Q 0 -70.9/0.  /499F55439F88:.-09~ 8-09~ 8E2 850.4/./..9.843J9499 009Q09 5E7:.8:.E94O9 .E3.88:3-00/E9:249F./499. 3FQ 89.7..E8 .9E.7. -04.8499 ..8J9E8-.248. 2 2  2098v  .090v F8 .002E874E./J7:43.9079 7:  .    .18. 03v7Q 05439  000308 09. 9. 447/3E9E. $ 9E-E-.7.9E74:20 02E84 .83E:.7.3  .5. .302   .239 .F9003087E39F30v    /499.77003090              7                       E742302430E78543943E9203v7003090    00F80 O O O 8. 7F55439E3.F3009   .. $ O/E9  ./E9:2.88:3-00.. 0vv .3.7. 003089v F8 .7./ 3...0 .48EE9.8..5  7: 40.. 447/3E9EF8.0F-   ..7E7425439E9.907 3.9 4 . 2E87F55439E9O    &. O3.31 57391239.9 -0009908J9.54.9079 . 00308 00309F-0 0030v 0v0~F79F009.54399O .8J9E84. ./3.3  .F..

3-.. 00990  4 -4348:9.8J9E84   // 10.:82.090v-032:9.28   -0100v/./.9O/.8J9E8 .  109F90 2E7 0/09-03 .   30..9O/.03 880 0 143 v09 00903 8809099:9.      7.:9.009v8F0 .49 #F8090..47 .8J9E8:9.:8:9..8J9E88E    .:82.9 .. .99--8700099..9O/. 0807 802 .   :8:9.:8:9.F79F0v/. .109F90.83E/ :9..:3.100F8   ..:8 :9.  2. !80:/OO/   . 2.-03E742.8J9.8J9E89--87.F70.F70.3 9--87 8 802-0 9.8J9E89 3. .0 F79F0v/.109F90. 9-- :9.109F9082F90/.  .F70  O .8J9E84. 82F9F88E2 0809F3 0 302 8 0330 0098F08 F09Q3.2..109F90.:8  4.F702J..9.  :8 0v90890v8.F0.*100F8.3.E9: 2.20009.9E8E7.F79F0v/.:82.2J4.8J9E8 %2703        00F80 O .9O/.03  0 109F90  :9.        109F90 4.   7.8J9E8F90 . ..8F2.9:3-0       0.8J9E8439499.F03 0099 40347 9--87 0J73E3 .8J9E8    4.  30.  .8J9E8-O E   30.8J9E89 . 09v :9.F70.   82F9.:8:9.8E2J9OF5090-4348:9.28  .

:8 .9E88.    0    . 2. ..F9003 . .F9003.:8  !F/. . 109F9070 Q3-03 .O .F70.:87. 0 0330 .9E8E3.

4-- .0Q   84802 08  3F 3.  .99O  4  9 3.

0903Q.8:308E249.3. -039~097v 3:. ..F5073v70   8808E2J9E890.. 8E24.F700.E9 F9 90890F8 99 :9.880Q09.9.8.009009  8  0% $ 0 % $ 0%  $  0 %  8    8    3.E--2~...E-- 4109F8 4:8..3E./:.88: -0 .0  .8499 F79F09243/E902039038 -0 8      .F0F8J7.83E:3  .F79FF94 9OQ3-v 0 90890Q 003v7Q . 4.. 8  09.9O 20 003 10. -04.8 -0 .E94O9 ..  0.9 7:3 5747.83E43 .5E3 .   /013E:3 0 .-04.8E8 :9E3 . .8E8:9E3 4E..EJ9:   8477..9 4..090v 8E249 7E4. .20-03 .. 8E2J9OF5  2:9E3 F97049.9   8E2J9OF530.8F79FF9    08 ..0    9 0 ..E94O-.88: . 0vv70  23/03 -04./.249  .  09  F8 23/03 8E249 0--0 4.  2F39 4/.F79FF94 .:8 2. .E94O9  .9 5F/E: 0   .0 . 88009 14: F503  F8 F790F93:E7.0093 .88: -0  ..5J9E8 .8J9E8.003v 0 4E.E94O.:8 109F90 9v 1Q  4 0 0 149..E94O-.802  90890F8F9v %0E9 %        20E./..E94O9 003 8 .E:. 90890Q 003v7Q ..9O/43 .88800 8     %0E9 00903 . 0 %  %  $ 8     -04.3 57O-E 7E.9 00. ./:8 0 098   J7:.77.. 82F9F8 .  F8 23/0309  .20 0F8 8E24.:880J98FF.

8J9E84 F50    .:9.

8F2E.  !80:/OO/  ..F003/v2~..O8J9.009847-.8J9E8 0 109F90    ..*100F8     109F90 4.%0E9  $ 0   . 2~.8J9E8 .   30.F..5:     8  0%  $ 0 % $0%   $ 0%  8     .0090    002-0.F03/v  00.0.F830.  082~.:82.4.8F2./.:88.31 /    0    8  8..F0.1039009908J9F8009.:8:9E3 .3.31 /    < 57391 $/ 8     $ $% ! $ $      / 4 0.9O 0.  :8  E9:90890v8.03  398  8.03  /4 :9.9204/E8.83E/ :9.023/09 J20.090v9.100F8   .009 0.:8  4.10.03 $%#% $     30.2J4.2020.009847 .:80v99  ~.  .

 .9O/..:89O  803 .080723/03F55.0 /40.8057391  .9 $E24...109F90.O F5F8 ..F0  7:   4 23/03 008 8E23.109F90.8057391  .8057391  < 0 0  < F9003 -70. 7050.:82.   7.      7...:82.2J.8J9E8 %2703       00F8 O 2.28E43979F3   0..:8-O .9OE9...109F90 #F8090.9 4.   F79F0v/.   82F9.2.F70..0.  4.F70.3.9O/..9O/..     0 /40    4 0   .28   -0100v/.8. !..-. 0508 -70.:80809F-03 .F7082F90/../.31 / 0  89.:8:9.9O/.F70.8:3 -0  9v    .8057391  .F79F0v/.8..:82.F79F0v/. 0    .  82F9.E7..F70.0 .F8147/J9.4..49.37. O -70.109F90. 008 -70... 239030 20323v8J9F810020 390 /4  8..9:39 .9O/ O Q3- . F8F08 -70.8057391  .

31 /    1  .    003v7Q4 5E748 0 .0Q.:88. '08Q3 0  .     < 57391 /      ./438E0020208E24E8E3.E:3 0 20100v 9:. . F79FF9  0  ../.EJ9:3  .-9072F809088E2 8E24:20E35E74800Q  /4999:.31 /  3     0 3   8.     /40 0   0    1 47.E94O  F79FF93.03  393    8.  30.100F89.3E. .0.0090093 807 4.O8J9.E94O9  .9/499 3/.E3847 9.03 3. 8E2EO ./. .0Q .543948../.9O2000.89: ..99.:82./ .7.  3 4.:82. 23/03 008 .9204/E8.8E2EO9   0//082F903.  /013E:30..9E8.:8   0/Q010.E.20090/09-033:E7.8:308E249.47.90.F70.E94O-.33 807082082F90.:88.47 3.  :8 82079F5F88E2.3.10392~. 0.:8109F9030 .0Q  0   9082F903   -04. ./438E 00209 ...-039~097v 5F/E:0 ..E94O9 8E2EO9 .2009 0/09-03  70 EJ9:3 2.0     10.

.       8.31 /  3     147 3  0v--10. 147.:8..147./.038 147 3    00F8.9204/E8..E94O9. $%#% 3       3       $% !        82079F5F88E282F9F8070.147.31 /    1     < 57391 /     .30850.:8 ..03   393     8..E94OE3..84E830.:88.E8.:8 .:8   0 3      < 0.

07Q F79F0F870 4 ../9. .E-.2.:823/03 E9E7E8E-.20 .:84.3 O 104E703/0F8 .:84Q23/099v3 807.9.83E9147. 4 .147..:82.. .  .F70.9 .49 147 3 147  3     .:8.843J9E8  .49  .9.09v03   9.88:8F79002-03.:8.E348.F8vF79F09  O 1. ..:8  147 0/vF79F..:80v99 .:8109F90F3984E43 1  1   1 .F8vF79F  0/vF79F   807 14.E348.20. 0807...9E8E9.F70.E--.F8vF79F      2.14.:8E9.20E9.8F2E.  147 111    1 1 1100F80  .8E.  9.5  O 1 0 880..E94O0/vF79F09. 147...3F79F0v/ .F70.3 .E94O 302 0 ..:82..:8..E94OF5909F8F7084E   .

.0 89..70.:7E89-E720.:8..147.:8-O 09. :9.2.1F81100F80 .8J9E8-O  5747.:8  0   0.:82~/239 00.8J9E84    .038 147    'F9003..F908.:9.9E8.:9.F70. 8J 9E 8 -70.:84  0    /4<0    147      &7O:9. 2033-03E343.8J9E8009v..

89.:9E3:9,8J9E88,149,9O/   39   5  14,98  147      8.,31 /     1  -70, 0,/,9 F8 8E24,9 1    8 < 080 5 < 4;,8:3 -0  ;F0  $E2J98:  , 549J;, 847,9E9  09;0 , 30,9J;, E9,E9             . 4393 :0:9, 8J 9E 8 .4393:0,9E8E7,, 009;0 /40.:840809F3208,,/,.:82, ;F70,9E8, F8 , .:8109F90 F79F0F8F;0 149,9O/  %0E9 302 :7  , .:8-O .8:5E3,,9:E8E9E7E8E-O 

< 1  57391 / 5  08057391 3.8549J;8E2   1  57391 1 8

  08057391 3.830,9J;8E2     

147 .:8 0809F3 1F-0,, , .:82, ,9:E8 E9E7E8E9  ;F70,9, ,  1  

100F8
:9,8J9E89  2,/ ,  1  4, 100F830  239 109F9030 , F79F0F8F;0149,9,,.:89    393   5    8.,31 /  3  147 3     8.,31 /     1  .4393:0 0,/,9 /499 3 9072F80908 5   8E2  $E2J98:  ,
9O < Q3-v8E24847,9E9            494 :9, 8J9E 8 839,8 
494.J20 1  57391 / 5  08057391 3.83023:,8E2   

  5747,2 -E720 :9,8J9E8, 20.J2F09v  F8 0 494 :9,8J9E88, 4/, 009 :7,3,4 4,09v:9,8J9E88,149,9O/43,5747,2;F70,9E8,   .J2FF8839,8, 
.J20:9,8J9E8   494 :9,8J9E8E9,E-,3 07Q03/v  2079 ,83E,9, Q9 , 897:9:7E9 5747,24E8

,,50;F;0F8E990390909033F908,5747,249  F8 -4348 08090-03 5F/E: 9--87803 02E8-, E,499 .:84-O ;,O F5F870 0v38009,,83E,9,   0,/,907088Q20 F8 99,080--59E47E88E2E72,89  
147 , , ,   147 -,-    147 .- . .        1 . ., , - - 494.20 < .2057391 ,/ -/ ./ , - .  

 

002-70,:9,8J9E8.8,,0-08v.:8-O:7499;43,  %072F8090803,.:8;E94O,9E744592,E,9O      7 09:73 :9, 8J 9E 8 839,8,
709:73100F8( 

709:73009v;F908,;88,9F7F8901Q;F3-v  10009   'FQ E88:3 0 4,3 5F/E9  ,20-03 Q708 :9,8J9E89 ,83E:3  239 02J9099Q  E9,E-,34,3.:840809F3,83E: ,20030E3,2,:   
39 147   57391 /    

10395747,27F809J7,,8E20009
9O  
 04/49910,/,94    7:3 5747,249  ,20 -04;,8 F9 9072F80908 8E249 F8 J7, , 08v 8E2 8E20030,880F9F8,2E84/8E28E20030,847,9E9   5747,2 F9 02E8 :9E3 .:89 9,79,2,  90E9 .:8;E, , ,E-- 2O/43 E-7E4,9O 39  8 5 8.,31 /    0    8   

.  < 8.31 /    0    5   .

./J7:.3:E9 2.F0903807~03 0307E 0F8 8E24.E..249  .     ( 3907.9 .  < 57391 $/3!/ 8 5      7:3 5747.2J09.20 .0307E957J20880F9       .:2-O.

9204/E8.3/  1Q.E. 39 8 572  87.:2-O  10.E./.F3 .499.F0903807~03 0307E 0 9072F80908 8E249 .3/ 920 .:89109F900  :8.00F80  7..   #* 3907.F902E8-.

3.E...F0908E20307E9479 ..

.3/   7.00     .00 < 147      57391 /     1 3 494.F8J7.249 .908v39.00  <  <  ..31 /  3  147 3   147    57391 /     1 3 494.E.200307E. 147 7..E--8E28474.< < 1 572 8  < 57391 57208800/ 8      7:35747.3/     1    1  572  080  572 147 8679    1  572 -70.E9                    :8. 39  3    8.

.   7:3 5747. 2J0 8E20~00830  7:.9F79Q 4.  23/030932.8 3 9072F80908 8E249 F8 .9  842..249  .0   :8.204/E89  39 3  8 8.  %45432O/807144.2J0 8E20~08 57391 .J.20 -04.4E8.4.31 /     .5499.948.8E249009908J9Q..842..842.842.E-./3 <   .E.842.8E20030880F.E-.4.4: 09 .99.31342J9:.// .31 /  3  147 3   8..

842.4: 09  2J0 8E20~08 . .E-..

  0     $E2J98:8 -03 8E20030880F9 8 < .

 $E2J98:8 -03  8E20030880F9 .

  8  0    8   .

  <   .

31 /    0    8  0    8   .31 /  3  147 3   8...03  39 3  8 8.2-.3   30.204/E805747.

 ./F 489E8E3. E42E3-O  09. ...3 8E72.9:.:8 147. ./3 <   00F8 O  204/499 10.0 . .7E.4792:89 434. 10.. 009 ..3580:/OO/30. -039~097v .3.9..80739  4 433.8348 009 -084743 .204/E8E4   02./.090v  23/03.27F80900  84E.. F5 0307E.94-O .77. .9 489E4-.E8.:8.032:9.5E3  .E--./.. .  20v99 4EE9:3.-E 80739 .E: ././48 0F87F8 302003v   .4792:8488014./.  < 8 < 57391 .9O 5F/E: . 10.47 Q3-03  1 903 080       '   (        489E82..E43.842.5.3. 0v87 9.949 -4348 10.  .0909093  4 . 2./.7.9:3-03FE3.F0903807~03  . 580:/OO/ 5747.:8  .:8  .2J.-.8O 8E2E7.:8 0.94 Q3-v 80254394 80739 489E4. . 0 8.

 .83 23/03 3.2J J7847.4792:8  9.88E2 .9847.F0~8E28474.9..4792:8  /4999:.   .C880 F8847.88E2 .8E28E2(.F0...F023/03 J7880  .F0.9 ...88E2 .F0.83 23/03 3.F023/03 J78E2EO .9 -04.F0/0 .  4792:80F88E2EE8 8E2EO  -04.47 8E2EO8E2EO  .2J8E2 .F0/0 -04.F0./438E0020208E24E8.9 8E2   8E28E2'  .95E748002030E9..  4792:88E200847... 3002~.O88E28474.47 880880 8E2 8E2EO8E2EO  .98E2J9E8  3002~8E28474.2J8E2 .4792:8  9072F809088E28E20030847.  4792:85E7484E9.8E2J9E8 :.90F8F79F~002030208E24E8.F0.9. 8E2EO  880  -04.88E2 880880 8E2 . 847.90020308800   4792:8880 880  -04.F0...F0/0 -04.8E2  .F0/0 847.

88E2 .2J .F0.-04..8E2EO .47 J7880.

./438E002200708F80 :. ..E: .8E2EO Q3-03 J7 3... 09v8E249   4792:83F09003v7F8 F2  -04.890083F09  Q3-03 J7 '.3 090083F0903002~8E28474.83 23/03 3..9-.8E2 .F0~8E28474..47 J7 3..307088Q3200.F0/0        .F0/0 -04.F0.F023/03 .85E7488E2  .F0.9-../4998E249  4792:80708F8 -04..F2 ..2J .//F5009Q390083F097v90083F09702J .F0.80708099 -04.E.88E2 8478E28478E2  .47 J78478E2 Q3-03 J7 0708099 3029.4792:8       /4999:.F0.390083F09  .F0.2J   .9O20  .4792:8  /4999:.2J 8E2.F0.09./438E002F90F8F30003v7F80 03v7Q 4.F0/0 -04.3:E9O  . .4792:8    .F0.88E2       .88E2 8478E2 .2J8E2 F88E20708099.090vF5503003v7Q 490083F09 008E23/:.E9F5Q.47 F2 .3  C909. 8E2.

.4-- F79F 1788J902.88E2 8478E2  .88E2 8478E28478E2  .2:2E3.E94O9. 9--87 8 0v147/: .88E2 23  .   . 8E28474. ..9O20  ...4792:8. .   4792:8080--$E2000 8E2EO  -04..20. 08v 0v147/:E8 0F9 .9E74E8.8E22.88E2 2.47 2.08v8E249 2.00F8 .O. 0708099 8E2 .2.8E2 .4--F8080--002F79FF3020.2J .47 J78478E2 .80708099 -04.F0. -. 3002~8E28474.4792:8  03. .090v  4792:80708F8 -04.3  .4792:8  03.E3847F7003.F0.2E9   4792:803.7O4--7.4--F79F -04.8E2023...F023/03 J72.F0.F0/0 8E208E2   .F0/0 -04.F0.F0. 20  .2:23.79.9-.O8E2EO ...47 ..47.F0/0 -04.20..F0.83 -04.E.2J8E2 .88E2 .8E20708099.47 238E20 2354J.. 9072F809088E2080--8E20F3054J.92.9E74E8..2033 0v147/:E8 0F9  807093F3 J7.  C909022.. . .././.F0.4--F8080--00254J.47 J7 0708099 3029.9E74E8.OE3.93 ..2J8E2 .8E2 23/03 3.8478E2 .

94 0809F-03 .       .  c c c  3  c3 /  ./.93 0/002F9 .8E28E2'  8E2EO8E2EO  .94    0307E: .090v100F80F79FF9 .           3 c3 .         .8474..4792:8  9~9910. 08v 3 00209 F8 0 2E8 204/E88.       3 .F0.O  .. .2J J78E2EO 2354J.090v 8E28474.        /            0              1                                                                                                  $E2J98:.F0.

   c.

   c.

   c c3.

  1    .3  3  ( 0             3 0/9.

    c   .

  3      c  c   .

            ccc c3 .

      3                   3 807    .

 .

 .

 .

 .

 .

 0F8 8E24.F09038E2 0307E9477.3/.94.8.0 5E7.F0Q0.:948O 232:254J./.949   .79. 09008 3F0909 E.900209EJ98:.:2-O  .03002~0F88E28474.9 C880  E9.08v 232:254J.     8E28474.9 ..F09038E2 0307E9477.34 8E2E9  003v7Q 49..342.E--10.  .5J98:20.2J 09.9.98E2J9E8  8E24: 20 .OE9 .  E42E3-O4.     ( 3907.OE9 8E2J98:.9.2. . 5E7484 09.5E7.  3 0/9.- 3E80--9072F809088E249 .E:.57J208E2E9  8E28474.2703/00F8F70 .2:2E9 .5E7484 2F/EE9 .  847..900203. 9 . 232:2 F79FF9  .5747.7..

9495..309. . !.O8J920./.E74280080020./ 03.0F89     9..27F809 7/E9 4:.8.03F39 -439E8-.20 ..20/0/4 0./.30.3 J7.8..F9003.9.5J7434/:20 39   8. .F0  .20109F90 3029008QF800809F3 5F/E: .949 7:. 0v 2 -0203v . /  0F88E24.:88.8. E7428 08v 2 847E9 EJ9.9495...  0/v80-088F~  .:8410.249  .F89-0203v.. 3E0.948.33. 003090803 478:O 24E89 ./.8478E2E98 '.3 9E-E.10.O8J98.  0   .9O  3 0/847 ..080--002Q3. 147    / 147       7:3 5747..9 !.3 .Fv 9089E9.9/v./0020   3  3.2.72.20 8E2J9.5747..88:3-00 .-039~097v ..Fv/v 0F80-vEO8E28474. 478:E88./.99209099:9.249  ..5J7434/:20 ./43-.31 /    0    57391 /      00.94.0099-342E80Q99.94    7:3 5747. F8 2E84/507..E--5747..4--002F9 F8...0    . .

 3  c  3c 3  c 3    3   .

9  2003009./302 57J230 30./302 57J20  .  F8    8 2. F8 J7.  . 302 57J2  /0 :.8023.249 .20 8E2J9.3./302 57J2009    7:3 5747.0Q3  .47 F9 57J2 847.20 200708.84.   83 . ccc c       0F8 8E249 2.249 . . 4./302 57J20  7:35747.072.9..47 07 2.3!9E47E8 8E2E72.4-- 3F    -7E4:.F5073v3.

F39.20 J7.1:7.:243  4. 8.1Qv008031:9O9030 2039F3.0F7  7E  -E89.4  .7. 20100v447/3E9E54394-.  1:9O  :8E7  .9:E8 447/3E9E9 . E9.0  .9O20v09     . 6 6(3907. .907900Q3#.1:7. 8.1Q.88: -0 0 8. 9E2.4:.. ..903098    .249  ./.9E-E3 7:3 5747.

4..  7:3 5747.88:3-09072F809088E24.249  . 9J0800F35E7.239 .- 0F8 447/3E9E.. 57J28E2008E2E9    .J98:/0.93:.2E88Ev09    ..-039~097vF88E24:..31 F8 57391 1Q.  4 E3 /.9 3:.8   .8 8E2703/807 v09    . 30F89J5:8    7:  .4--.20 -04. 002009v447/3E9.93:.F0 F8./0.F30 1472EO.. .9E9  880F9  E9.93:.009v8F009    .20 147 .O8 8E249  F8 20E.2E88E24.9  8E2847.E9.4 . ..94-..v8801Qv7F88474.2E88Ev09    .O8 8E2 ..73-0Q70    . 0.FF9F902E8:9E3 000    7:3 5747.0. 5E748  .200-03 .F0  F8 .9880F9    7:3 5747.7E3.2E8 8E24.F0 F8.249  . 8J-.7..249  . 5E7. .2E88Ev09    ..88:3-09.88:3 -0  3F 80-- /0.9 F8.88:3-049E88E24..3 F55439E3.F0 F8..5J9.249  .9 3:.-- 847..9E74:20.543908. 8428F/48 8E24 Q3-8FF9   /499 0 9072F80908 8E2  .J98:/0.J98:0.20100v.8 3 0F8 8E249 F8 J7.J98: -3E788Ev09    .2E88Ev09    . 0488.:.33..88:3-00. 447/3E9E E9.:88.  ..20 208E2E.. 03.3:2E3E9.F0 F8.4..9..9E74: 20 .J98: 49E88E  .38E2E   /499 0 7 . 2 0 ./0.3 .23v8J9F8009  9~3v    ( 008     O    0508    0F8F08     0F9003     00F8    10.3 F8 ...88:3 -0 /0..  7:3 5747.. 8E2 8E20030 847.88:3-0/0. 23 F79FF9  .9.E9  .20 -04. 8E2J9..83E:  .  3E 80-.90703:9499.7.F0  F8 .J98:/0.2E88E24.2E8 8E24. 8. ..E-- F90~ 5E748 8E24.9.9  . 080--09  . F8 8:../.88:3-0-3E788E24.9  .93:.9 .

. 0810.20 57J2 F8 .:2-O   /49909072F809088E2 F50Q.93807942-.7.3 .9493/.7 2- 9F714.0//.  08 10./0.F0F8E..-.. 703/00903   3.9 ..97O20309-03/07Q 4703/00903  100Q-0.   /:20.9    .0.0.0F88E24..E8 30003 ..909    7:  .  4--7. E3. -0v0 .0.2030 .-. .49003 03907 70. 003v 8E24.88:. 7.3  .90.v2.4:3 .F5073v7v30030/Q2033 8 .247 2F709094.89:3 .F88083.9E9    7:.43. F.5747. F5073v 05F70 0 009  2.0 .:9E3. /E9:2 .9820030/Q ./.   3907..-09~F93.  O  3. F5073v70  2F709009 .5J98: 20 .5./.88: -0 F8.-0.34E-F. 3.0/09-03 43 2. 0v-- 2O/43 F50998E2857J2   /499 0 3 002~ 8E28474./ 3.803v .2-0100v/    %0Q3 .9  $E24: 20  4 .v  09.2E8..49 .9E8E7.-0F88E20809F-03    /: 20 .. 8 57J2   /499 0 9072F80908 8E2  F50Q .2100v/3-0     .88:3 -0 0 /E9:249 F.88:3-0549J.F5073v3009. .5:3  4 10.  08 8E2703/807-0 .3  .38E243F39F8880803E3 08F8E3 . 2 3F 80-- 9F714.v  .20 57J2 F8 .v 8:. 147/J9499././499 2F709~  009 ..3    .803v 703/00998F3F .302.949 3 /..43.- .7. 80J98FF.2009  .807FQ.2 03F39 3. .4E8 0v99 4.5 7:   4 0 ...803v847703/-03    .024.9 703/00998FF9 003v 0020-v E 0  3. 8E28474..3 E7420~ 0F8 8E2 ../ 10  0  -. 8E249  .147/J94998E249   E3 4.5747.8474.   #.7..3 E7420~ 0F8 8E2 .F0903807~03 0307E9 0F8 8E27.08vF8:948O8E2009    E3 4.0.

803v 847703/-03 .F0/    23/03 3.9   0307E:3 ../2092703 29.0 054393.(F79F0 .F0/  -04.((   .249  . .((.80330  7:8478E24./: 0  .20  .((   ./ .3 143.37.      F79F0094..F0/    23/03  3. .0947-..9   003.4792:8  #%&$  -04.88:-0 ..(..E949.  .E943 .2..F023/03  .4792:8  #%&$  -04. .8J9E8 109F90F9.9:   003. 0vv 8E29O . 0307E98E24. F9 8E2 Q3-8F0 .2:9. .37.E--.9 9.F0/   ..7942E3-O  ..   0  543947.99.49J73.8 -0 8E24.E7420~8E24.E--.2J 4.2030 8E200 .F70..F09038E2 0307E9477.  E3E3023.9 . 20.F0.F0 4.8:3-0 .E:30  .:9..  .83   23/03 3.E:30 .(    .2J4. 03308.F09038E2 0307E9477.F023/03  'A #%&$ .F023/03  23/03 3. ./499 100090  ..  7:3 5747..(    .83  23/03 3.(F79F0 .(    .93 . 8E24.00/30 2.50/ .33.47 14.(.0947-.9 ..4792:8 1 4.F0/   .20308E200909v.F023/03  .8.89E8 0 4...0307E98E24...O8J920..99 8E249 .3 30 94.. 39 9.  03308.9  -0. 2038..(.37..O 09F7F8 .(     Q3-0337. 7:  8478E24..(   37.4348F79F0094. :9.4--    0307E:3.33.4348F79F009 ...3 E3847. .F0/   .8.9O/.8:3-0..-E48E49143.4737.92-0020 /  .-849 F79F-03 . .((.F023/03   23/03 3 .

 . .8:3-0 1  243/.FF3 /  .8:3-0 203308. 5747.  7:.92-30.20FE9O00207v.4792:8.85439 848 . 847703/F-03  447/3E9EE9..3 30 094..4792:8.003vF79F~.  .92-03.3 305E748F79F09 4.3 30 09 4.FF3 .FF3 .FF3 .1vE9O0020.0830F79F09..F70.40F880739.8.. E7E8E3.8:3-0   /499 0 3 .8..F023/03  'A #%&$ . .3 F79F094.4792:8 .9E8.8:3-0 E32.92-E3002008 .4792:8.8. .8:3-0 0  03.848907Q09F9  $ 5443  I c  3          .3 30 09 4.3 30 094.FF3. O7..4792:8.9O0. .:9E3 .92-E3002008 ..4--002F30F79F0.-O.2E8002008.8:3-0 .. .F5009-03  0/5439447/3E9E      ...28474.2.

2.3 -.9 847703/09 10Q 009 -J7E3  . 08v--8F0  570.0090 . 4507E947. 0v  4 203 2~.050/F8v--100090-03   !7479E89E-E.9  !# % #      (   =    9J5:8   8041 . 070 E7O00./. 20100v 4507.E49:3  2E84.E.  100F80    100F8 4507E9474.9O/3.9 9.200 0809F-034--7O-.9E-.  .902. . .9474 57479E8. 2.79. 20  4348 57479E8 4507E9474 0809F3 E9.8.83E.34507E94748 .2.803v 847703/-03  0800 2E7 9.3  E7O00F880 .7.3/:84.9 9..E-- 9E-E.E-. . 0--03 . 25.00909 0 0.9--.8.9 .9 J7.79.   4507E947 .9 F8 4507. 10009-03 82070/Q3 20 .3/:8443   2~. 847703/F9 .9O    . 2~.  30.9E8E3. 4507.F03 .E7. .0090 /0F9030 4.F70 .0/03.7O 4--7. 57479E8: 80739 .F70.

       )        .

  .4348.30 8E2J9  4 . 2~..7O4--7.203F.7O4--7. 25.7O4--7.F70.7O4--7.F55038F023/099v3F . -. 8v F5F8 23/03 7.7O4--7.9 9J5:843.4  4 . 302 . 4--7O-. F9 4507..7O4--7. 070/2F3 9J5:8. )  $ ##  $ !# #% $$%A -. -.7O4--7. 0 033Q .-E480739   79209.E 43./ 9J5:8 .7. -..7O4--7.43.7  8479  39 9J5:8. 8  A8 .50. -. 4--7O-. -. 07Q 847 .3.7O4--7. -.3/:8.7O4--7. -. 9J5:8 08 . 4--7O-. .009 . -. -.. -.3.4348 9J5:8.7.07O7.079EO/    .9O/43   .3/:8 4507E9474 4507..E--8. -.7.7O4--7.7O4--7.07O  .

. 4/.. .4/ .4--4/. . 3..8. .47    A79FE9./E80809F323/. 4-- 4/.7.4  002 . .0   ' .079EO/499   .8439 ..100F89J5:8.714.E94O  43 100F807v  ../E8 31472E. ' .9  /4:-0  43/4:-0  002.. 100F8 30 .J2F70 09E74: .3 -.. E9.E94OF79F0  .8 4.9   .089F880E7.E43.4/. F79FF. 100F8 F79FF9  %0E9 0 4E703/0F8 -.J2F.. 08  2:9E3 .200 0 4E703/0F830 . 0 . 3.8. . 1   .E3 . -08v E-7E4E8. . 39 9J5:88E 43.3. - .91 /4:-0/  95:8. 08.8.939/4:-039  39  14.9  14..E3 8070500930 .4-- F79F9...F79F050/:. 14.470v0 907089F8979F3  !F/E:  ..830/.9 /4:-0  /4:-0 /4:-0  /4:-0 /4:-0  /4:-0  .4/.7 %0E9. 39...O.8 4-- 4/.0 /44:3  .F79F0  03 100F80 .20 0 437F9 202O7.3 100F8 00309 20  .E94O .:0 F8-.9  !F/.9 243/:  4 .-.4-- F79F9. .94   03 100F870 .47 . /  - .7399J5:8.E94O .. F79F.7942E34   39  :3830/  43  :3830/ 43  14..F79F050/08    100 F804-- #.079EE8.7 . 80-- F79F9.:0 F79F0   '  100F8 4E703/0F8 0809F3 .7942E3 9J5:8 .20 E9.E-.J203 F90v 4-09:27.7. E84/ F5F8 .3 830/  F79F0    .708  .E94O3.E--100F89J5:8. .43.7942E3 9J5:8  . .

. - .8.4-- F79F0 . F79F0 8 .243/:  4 . - . . .F79FQ  !F/E: 39.E94O3. 5F/E:  .3 -.3   ..J2Q  F84--F79FQ8 ..

E94O3..3-.. 008 2079..F79F0 ..

   . -.F79F0 207930204.. .8-..F7933. -100F830.  .34-09:2.4. .

F79F0 . 09003 2079. -100F83033.8-. .

 .

 .F79F0 ..E94O3.3-. 008 2079...

E949./0. .8 49E  8E2703/807-03    903.3-. 0F8 4389.E94O7O 2E7 -08F9Q3  . F79F.9J.88E2703/807-03  .  09J7:30F0   00F8 O 3.O.8 30. 30.  %0E9.E94O F79FF9  %0E9 302 807050090F79F.2.9J.00Q 404389.4/.384 200030930 5747.384   0F8 9J5:8 4389.E3.E8E.948 8E2703/807-0350/ ..F5009v  !F/E: .9O20./E8-.843903    100F80-03 80705v 4507.38  -03   30.384 4 0770 . 4389.09v03 .0903.-03    F 8 9J 5:8 4389.F307v F8v-- 08 8O  . 0039F9-03  302 .2E8 8E2703/807-03   !F/E     088E2703/807-03       .Q 8 :9.0  34.  2J3:8  4507E9473.O-.4348. 2J3:80 4507E947  .2E8   .         0..v .E3 4--4/.384 F79F0  .3  4 9 09..3  08 /0.. 8E24 .3/O  F8 1Q.5747.3834.E94O.809.384    4389..21:9E8.  08 50/ 0F8 4389.384 E...F30 00930   .  .0  09.E--0F84389.9.3/:84 .5.4389.38       .. 48 0.384.8 49E .E3 F.3 ... 0 00930 9E743 . .2.9488E2703/807-03.     488E2703/807-03   .E94O  4389. 1Q..0v0F39.090030E9. 39    /013J./E8 4-- 4/.

& :3830/4339 !F/E:   399J5:8 08 &  &   :3830/399J5:8 08 43399J5:8 08 :3830/43399J5:8 08    '.   1039 8.94389.7942E3-.94.  /0 -001F730 .7942E3-.90770 009 .9O 05.7..3849J5:8.  3/03 0F8 4389.9488E2703/807-03    FE3 143948.7942E3-.907$O/..9:3.9 9J5:8 10Q-J7E.  .9079J5:84389.-E 80739 25. O8 9J 5:8 4389.  . .20 -001F7 .943 .38 25.9 /4:-0 9J5:8  0 10Q-J7E.54897O14 F J7:   . 200 302 1F730-00.4 444F8 . 907 9J5:8 4389.88.  F79F0       ..  /0 -001F730 . 4339 9.0099 08. $ .  4339  :. :3830/399.38    43/4:-04389..E3:3830/43399J5:8. 3J.94. $ O/..   033F 8 3.090vF5503 444 .9 09.90770 30.9:3   ..  .O8 4389.0F84389.9 2O/43  14..3847.8      20003J909v . 384  Q3-v2O/443.. 384  3/03 .4 4339 9J5:8.38  00F8.9 2O/43  30.0903.0099 9J5:88:100 8:100039F80  :.7.9O 05.50 80.5/4-E8   . 7. 39 9. E9..   .            3/ .7942E3-.7942E3-.384    14.F5F8  1   .EE9.94:3  4 .0 43 8:100  !F/E               0    /4:-0 4389.7...809.&  :3830/39  . . 39 9J5:8  200 302 1F730 -00 ..  .907070  .8.03.803v  .38  .7.7.. 39 9.-- 302 20003J909v . :3830/ 39 9.4 :3830/399J5:8.4--. 34.

3.   %0E9 8041     .        3  7  9  .907 -08vE-7E4E8.       # 847 847020F8  4....88.E9481Q.:7E8.   .8. .54897O1 /Fv0 F7/v0     00F80 O %#0Q9F8047F9.9070-04.  !F/E: .7. ..-:E947 '% 1Qv0089.E--J9O/.#F8. .7.907 9J5:8 4389. %.8E8E7.F5073v3 .7 .88.-:E947      -. . 202O7E-..7.J839089.F3 !F/.384  -03 0F8 9J5:8.7. .-039~097vF90E7428.% .09..8.  O  .7.90794.8 .  0..:747847-.

8E8F5073v.88.E7 ..3. 5:110709-04.%# 9.

 .0  .09.

E7%# 9 .8F5073v.  302.3. /709.202O7E-.4..88.

  . .09.

/709.4.88.33FQ   302.202O7E-.8F5073v..E7%# 9 .

.109.F3.434 5747. 15  .09.7/  09.:/0.9... .0 F809.F099E8/.7..7.28479  5:11070909..3. .8E8E42E3-O !F/.83E.0/7094.3/.. 8.7 $89.10009009  .9074. .8E87F809080J7E8. F8 .

9O . 15 E42E32:9.

7.  .907J7E8F5073v70.

E42E3-.   5:9. .. 15 .  15:9.7. .7 .. !F/.

9O . 15 E42E32:9.

.7.907 4.8E8. .

.31.9O .E3 0-434J9.J7E8 3. 8.

.57391 09.0 . 18.31.

9079 7F8090.384 /Fv00 99 00330 20 5747.1000909     .0 8  .7. 7. 384   .31 1472EO847.F3 5.907E3.157391 1Q. 9J5:8 4389.83E. 1472EO.F39  . . ..3  !F/E: .7..F30 80J98FF. .3-. 9J5:8 4389..2. 8. . 14503 1Q.7. 907 E 3.2F9070F39   .F099E8/.

384 9-- 847-.099v  008    $2-4 :84389. 8809099 9J5:84 0709F3 -0Q  .4389 2O/48J9O 0v.0 9J5:823v8J9v.  . 2E84/50/.9!  /0130!  00F8 O 82-4:84389. 14.38 .E9903909v--F908.  :.9E3..48 .907E3.9.4O10009-03-08FQ37O:  !F/E 2.0 4.9.249  F8 2033J9 . 38 4  82-4:84389. /0130 /709J.093...9O F970   03:2 9J5:8 .3 302 0 .38430.0 .2O/E9  !F/.9.E--5F/.E949.83E.907E3. 03:2 9J5:8 80J98FF.-09~084E8J73  FE30v70/013E982-4:84389.7O.4389 9J5:823v8J9v 0 . 50/ .907E3. 97/009v .9:F3.F/099F  9099 .  0 889743  F93847  .    7920 9. 2..3/:8.    .907  O ./E8    .  302 .90780J98FF. .147/J9O .E.7.9O.7.907E3.4O 10009-03087F8090803-02:9. 08v 0 002~ .E7424507.83E9:3  #F809080--03 .302 J7E8.38 .384.7.38/013EE88E .4389.4.0  .4389F8.9 .  //   00F8 O . 202O7E-. 4389.7.43-.83E. 9J5:8 4389.38  #*  #*  #*  %*  %*  &%*   *  * & * . ..384.384.38  . . 14.05 09     507E9474  4507E9474009300 099v.4389.  4507E 947    880.438914. :9O.   .9008J9.E7 .9.3  .979488 .4348 .7.:/0298 5747.0 F9847-.F79F0  10009   .J9   J F97099 4389.7.. 9J5:8 4389.9E89   .907E3.E94O/013EE89 4389.E94O 0809F-03  8v9 54390703 07089Q 90E93/7092O/43 208..7.-02:9.7.  /0130 /709J. 488 . ..38  O 02E8:9E30000/v. /0130.3.E949. .28479  A79F0.E94O  014.E8 979F3 8E2E7.F099E8/..  09.83E.907E3.5747.

  .

 .F79F0 2079.3/:8    .  . .3:.7.-  .28   100F8 4.3/:8  4:8.F79F050/.3F5090   .    4..F79F0                                           047.9J5:8 0F79 .E-- 5F/E 0809F-03 .84.38.  4507E 947 4      9. -  00F8   .F79F0 :.843J9E83.28 '8439. 4507.843J9E8070/2F30.0 4507E94740v0F39880705009302390 4507. . 239 100F830 ./E8 04507.F79F4./F  09.3/:84507E9474    C88 0 . 0880.  100F830 .3/:8  4:8F8 4507.  0030v 0809-03399J5:8 8 . .4.. 843J 9E 8 4507E 947          .43 0009088FF9  4 23/033023:.47.0 .0Q 1002-0 .43E8  847E8 489E8  489E82.F79F0. 880.0 -0333.28  !F/E:.-09.  30. . F79F0 0 39 9J5:8  08 .  100F830.

. 100F8 F79F0F80 . . 302 .8. 070/2F3 0F7902~. .  .8. F79F0  .0F89J5:84507E94747.9  .2J .-3.. ..:3 102080  !F/E: .O 002  4.3 08 F830207Q847.. . 100F8F79F0.F .9:8./O/.:942.9O    4507.9O/  .E  --v 574-F2. 100F8 F79F0F8047  .3/:8.47 . .0F8F70       90 3F39 4507E 947 4  .2.// 149.

.-90307Q.9E87.4507.3/:84-08vE-7E4E8E3.0vJ792~.7.F70.3/:8 E9.009     -903F39-.4507.

.7. 4507. - .3/:8  -903F399./E8 4507.F5909F847. . .9...47 . F79F~0   .F5909F8 4507. 4507.4--7.4/.- .03.090v 9E-E.0-.3/:8    E7O .7.4--0F79F~-9 . -903F394507E9474  !F/E :3830/.--  08  4--7O50/ 8-9 3-0    . -0 2F39 2~/30 .)- =. ..  .3/:8  -903F39E7O. 08vE-7E4E8             A79F           00F80 O . .3/:8   ) = -903F39..3/:84 20100v -90  Q3-v 4. - . 4507.9 5F/E43 07089Q  802F090803 2:9..3/:8    -903F39F8 4507. -  100F8  .

 - .7-     100F8  .7. - .. 080-- 0F79F~ -9 . 04--4/.O 4--7.7O50/0v03FQ :3830/ 9J5:80809F3 0v008 830/ 9J5:8 0809F3.7.0v0-9 3-0   ..--  08  -. - 08vE-7E4E8          A79F         00F80 O  -. F5909F847 ..  :3830/.

4--7.0 .. F5909F8   .O 847E89.

--..9. 8E2J9OF5  0F79  ..3 .  .O 847E847.9.  !F/E: . .489E847.E3.--.489E89 0039  .009009 478...0 .-92~.9. -92~.9F43.009..F70 .83E. .

  .E94O5 0/0F79F~-9F9  1   &5   4.E94O5 0/0F79F~-9F9  57391 /    &5  4.39:/:0F7/0300F8. ./ 0F79F~ -90 .3..E94O4395:83.4348.39:/:J7.E94O 5 0/ F8 6 .3E.9300F8. 0  1    &5    &6   4.E94O5 0/0F79F~-9F9   .  . .903903/v   4..-0 .3 9:/: 003v73  4 0 0F8 .5F/E-.300F8.F79F~-9.39:/: 7.47 O - - - -    - - -) - -)=-  2.84E890.EJ9.

EE8. .E94O5 0/0F79F~-9F9  )&5    A79F.7.EO/3.0  -03 ./E8 0809F3 . F79F0 003v.E30. 847703/70 .   4507E9474 4--7O -./  00F8 O %--878 F79F.08. /E8450 7E947  F79F. . .E94O10. 57391 / . / .8J9E8-O. 8 100F8  .   %--878F79F.9.2030 . .300F8..39:/: 70EJ9.3100F8  !F/.. F./300F8.-....v100F8F79FF9    42-3E 9 450 7E 947 4        ./E8 2./E8839.E94O4703/09F79F0  !F/.8./E84--4/.3.39:/:9. F79F.  3/03.  39..E94O100F8  .E94O5 0/0F79F~-9F9  &5 4.8./E8 $39.F79F.E94O0:9.  = &5  4.   4507E947  0F79 ..  57391 / ..O3:E.  39..

     )    9.45100F8 !F/E: .3 .45100F8  .E348.- ...-  .

. - .0 .4. 9-903F39 ..

 . .

. 94--7.F5909-990 .

8.    '088v 4507E 947   $39.. . 1 1 1  13    .

 111  F79F0v/ 1  . F79F0v/30   .7..8439 1 4. 0F830  239 100F830 . 1 100F80 -. 1 F79F0v/  F8 0330 ..3 F7902Q 5F/E: 4E703/0F80  .7O 4--7.7.. 1  3  100F8030 32.:948O100F813F79F008  .. . F79F0  . - .8.80100F89F7/029--09807093F34/.Q 2..839. 4.47 F79F0v/ 1 F8 0 08 .28  . . .83E: ./  .8.3 8 .83E.47 ..4. . F79F0 F8 1 10203 J.F79F0F812. F79F0  .088v4507E947.. / / .3 4. F79F008.Q  !F/E   .7. .F79F0. /   39     147      0 9F90 0 8 450 7E 947   $39. - .47..J73  !F/E  39./10203J.  57391 //// .:-.3F79020 .3 003.0F830 239100F830.9E3.  . 0F830 239 100F830 50/.

-849F79FF9F50 . . .E94O.

-.. 2.-.

4--07Q . . 2...E94O-.3.F8 -Q.

8J9E8 .O8 0Q99.9O  9 .  -   .. 0 08v14 00309 .57391 -57391 1 -.O8J920.090v:9...  0./.9 0030 . F8 .

9J5:8.83E:.  $39.20-v0F7902~03.9E84  O  9J5:82F709  ..0 .07Q20.9O5747./4:-0-    ../. 147/J9O9O  F79  .49 1Q .-90 -.9E74E87.239 2E7 02J9.2F709F90.803020F. 8041 100F8 .F900384204/E8     $ 0414507E 947   0.  33.  ./O/. 09.8.8204/E8 57391 ./4999J5:83.8:5E3./499100F89J5:8E3.9.8041 9J5:8   00F8 O 100F830207QF79F0F870 . 47/4.80414507E9479  !F/E 14.2F7090 90E933.249807093F3J73 .3.00.

  8041 /4:-0   8041 . 100F8  8041 . A79F0     . .

 100F8 302 099   8041 F79F0./ 2079 .7.  . . F79F0  2. .0 .

.3/:8 !F/E O 5.99J5:843.J.8.O88E20F87F80   14. 95:8 4507.3/:8 30 .302 0 2E8 9J5:8 80739 034705.F. - 57391 1  14... 89 4507E 947 0  5.9  57391 /  39      O 5..E94O .07O.   .9 807093F3  4 0 100F8 F79F0F8047 0 . 9 9J 5:8 43.247 .9 .07O 80J98FF.07O. 80739 003 1002-0 ..     .E399J5:89  $39.9 9J5:843.99J5:843.7EF3807J9Q.9O F9 0F8 .O8J9. 25. 08090  .9O0.O8489E8.0 7O  './499 4507.0 20.   39.20..9 9J5:8.0  .33.9E74.

F0  F8 J7..9 39 8 8 8  888  0 8.34 880030 .3F51  14..31 /       8    8 8  < 57391 880/ 8  57391 8E29.20 -04.. 8E29.3.0 5E7.  14.-84:9F79F0Q./.3 05Q09  F8 . . 5E748.4--. . 09.    O F05F/.9 3:.9  57391 /  39     04/49910.9 8.94   7:3 5747. 880Q09  .249  .8 0F8 8E24.9.

/  8 8 8 8  8 8 8 8 88     .4--8802O/::8.  57391 3.

.20.7    1 .7.0 09.7.E94  ..F0 F8J7. 09./      7:3 5747.9.09.7.E94O-..907 .9J. . .8 <    7:3 5747.39-- 08-9.748 5..9  5E7..  F8 43 39 :3830/432. 703/70 .200-08vE-7E4E8E-.249 .     147 8041 43     1   8041 43      080  < 1    < 57391 /3/3/3/3/3     549.31 /    57391 8E2-08vE-7E4E8.E3 8 ..3   0805.7.20 -04.7..49239 8-9  43 39549..F0  F8 208E2E.8 5:9.8E87.8 0 0F8 8E249 0 43 .8-0 .907 -04.34..4.9.9.7.7 09...49 9Q  .7   2..9  30. ..9 .9 4.3  147 8041 43     1  2.9. 0 .F3009. 30.20 0F8 8E24.   080549.7.9  .249  .83E: 39  .748 5.  7:35747.9.E94O-. 549J.8-0 0 43 9J5:8 .  .   57391  8E2.748   1  8041 43   30.7    0805:9.3      J7.9  5E7484.9070094.8&8041 43 8..249  .. 30. 5.31 /       1   5. 5.3      0 8.9..-08vE-7E4E8E9   .239. 1Q...9.

7....8 F8 0vEJ9.8O -90 E9 .- 9072F80908 8E249 :3830/ 8479 9J5:8 . -04.        7:3 5747..20009  307Q3 .E94O-. .9 .31 /  3  147 3   8.8 8.31 :     8041 8479 .8499 8E24-O  4 .9  . 8E24.. -08v E-7E4E8.0vEJ94998E249  .249  .9  39 3 :3830/8479  2.4.239 .0 7:  . 4.807FQ . 070/09 8E249 . 108v.20 3 /... -08v E-7E4E8: .

    8041 8479 .

.8 < 5:9.7    0805:9.8 < 5:9.8 5:9..7   2.7 3  <   ..88041 8479   0 2.88041 8479   0 2.8    1  2.7 3  57391 :   2.7   2..8    1  2..  57391 :   2..7    0805:9.8 5:9.

E94O-.9E74:3 0 47.94    /4990 0F88E2 .88: 77803 . 3 -0 .2 08 0 10v  . 2E8 10F3  4--7.9~9910./.20090 439J5:8.

7.O8J9:20 4.10.-08v E-7E4E8:-9090 00. ..4--0F79F~-901032. . ..080--0F79F~ F803. 8E249  .  7:  .0Q99   &.2E88E20-0F8J7:.9--9147.9:2.9/0..7942E3-O .:99    /499 0 0F8 8E2  .9 . .. . -.:3830/439.  .3./ F59088Q / 54J../.2009 0 43 9J5:8 .147.239.4:8803F03F39./:  2.J.7.-.9E89. 0/ -9F9 9. 433./.J.7942E3-O 842. . ./ .3. . -08v E-7E4E8. - 0/ 0F79F~ -9F9  70  .807FQ02E899   /49909072F809088E2./0. -08v E-7E4E8.54998E24.O.. 399. 8428F/48 -909     .9-08vE-7E4E8:.5499 48 8E2703/807-08E249    .3 30798E249F8-08vE-7E4E8E9   /49930F88E2.7.E94O-.5:3  4 .  /   9 9072F80908 8E24   -08v E-7E4E8E3. 9E74:3 0  J98: 0v .2009  . 070/09 8E249 F8 -08v E-7E4E8E9  2.-909F8J7:../ -9F9 EJ98: 7.

9O    08F9Q3 2E7 .200 0/v/v03 0 .9 51 43/4:-0 5/  5 0 39 9J5:8 .3  9E74. !439070 2:9.9   4.  .. .20 14.  0F79 .E94O3. 39  51 -03  09. 39. 9J5:8 543907 !F/E 39 5 14.J2F70 4507E94780J98FF..0 $39.0Q   543907 /013EE8839.  5 5 .9.3 ..5543907.E94O !F/. .77.E94O7.3 009 0 54390703 07089Q .9O0   4.E94O .E94O-.E94O .0 5/ -03 .E94O7. . 202O7E-. 700830 .9   5  57391 131  5           %0E9 5         ..9 243/:  4 39 543907 9J5:8.9O 0 .J20 03  .3 . ..8.. .J2 9J5:8 .9   4507E94780J98FF.J2F9 9.39:/:3.0 $39.20 .0 43 /4:-0.943 .E94O..30. 8E2E7. 9243/: 4.33. ..9  09.E94O. 202O7.9O3..79.J209E74. 543907  !F/..3 14. . 14.8.77O  4 23/03 ...3 009543907030..8.2:9.9430.2070 2:9.J20  F850/ . .J20  . 202O7E-.2.2:9.

  5.2.    Q31F0. .43.99J5:8 43.9 5 5  .07O  !F/.9O. $%4507E947 05.99J5:843.  55.  5.J2 9J5:849933.  55.           55..                        . 43   514.          5.825. 5.          55..07O /0.

008 .

 5  .

09003 2079514.J2 .14.9 9J5:8 .843943 9J5:8 F..F343 .9   543907  .

9  . 5 14.

008 .

4348 . .4/ 5 5 . F5073v3 .2030 14. $% 4507E947 80J98FF. -E7203 9J5:8 5439070 4E703/009v 0 .07O7.2.8 .0 . 20100v 5439077F 0 43.8 0F8 43 F39 -08vE-7E4E8E..4/ 5439079 ..3 5439070  .E94O .  4507E9479   10395F/E-O...47 33. .-03147/J9.4/ 5439070 9J5:8.079E3:3 F8 .   003 20 .   F9030 4.  0v87 .   ..9: . .4/  !F/.9E  0. .3 2E7   .200 -E720 9J5:8 .79. 57391  1  5  J7.0 .57391 .O -08v E-7E4E8.7.99J5:843. 39.8/07Q 4.2.4/ 543907  /0  -.J2F9 9... ....4/ 5439070307089Q807093F3.E94O7.57391 /3  39 5  5 -57391 13  /4:-0 5  5 .0 .7 5       %0E9.  .943.2030 ./4:-0-.88Q8F 05.:9E3 .O8 8E2  .   .E94O 9J5:8E3.  30.77.9 F39 . .4/ 5439070703/0Q3-E7203 9J5:85439079 .9E8 342E3  .8....J2F9 09E74.

83E:3 05.302 F7909.543907F55032:9.E94O. ..5439070307089Q   .438939 5 39 ..4.. 39 5.9O20.99J5:843. 39.8.07O9 .249807093F3J73   !439070F8.43896 .438939.E949.9O20.9.543907  5F/.E949.:9O--08090907QQ  . ..9.4389543907 302.43892O/48J9O0v  . ..43899J5:8 543907 302. 47/4.9O5747. - .9 9J5:8 .

2:9. 5  399J5:84389.E94O .387.9O543907.

 .

20 . .38  .  6  39 543907 4389. .J2F9 .

008 2079 5.E94O .

 .

008 2079 .E94O ..

 .

38 5 307089Q .4389. 09003 2079 54389.383.E98 .

 . 9.79.2..

 5   5 6 .  6   5. 5 . .   .

E94O . 008 2079 5.

 .

008 2079 6.E94O .

 .

09003 207964389.38 .

 .

09003 2079.38 .4389.

 .

E94O 0F79243/9: 4. 008 2079 5..4389.38 .302.

7 55/ 5/5 5/ 43/4:-0 5/ ..4/ 5439070703/0Q35439079  !F/E: . . . .4/ 5 5.       ~.7.07O  .009054390700   A79F. 05.43489J5:8543907002E84703/009v 239 2E7E99:Q3-v 9J5:8 5439070 0809F3 8Q8F08 .  5.F..43/4:-0/  5/ / .5/ 5.9 9J5:8 43.0  . /E8  .

09003 .

  .

008 .

 .

008 .

 .

008 /007Q03/v .

 5 .

948 .E3. J.

   .

5E3 . 843J 9E 8  ...4-- 202O7.2:9.843J9.J270 07Q 239:     54390 7 . F9 543907 :..77.9O  . 880.843J9.4-- 3E:  803 : 3..9 .3.33.0 .47003v  !F/E: :3830/8479: :  5 :  6 :  5 :                                                    : : 5 6 6    1039 5F/E-. -033Q 9E749 202O7.43489J5:85439070 880. 5439070 . .   C88 0 .J20 . ..8439 3.  0F79  .3 5 F8 6 003v  5 .E94O7.

2000v8E2 F5F880 14 ...7.E94O7. 0 F 8   003.9 5 14.090vE9. 9J5:83.77F-.20 .2:9.9  . ./.  .E94O7..9 5    5     . 09v8E22.47 5  3 09.. 5 5  5  5  5  5  5  5  5  5  5   5  5  5                                         .3   $02F09080--03 .v9J5:89J5:8.  5 .   8 243/.2:9. 3 0 0F8 8E2  .J2030.. 0 5439070 4E..2:9. 5  3  8041 9J5:8  09.9O9J5:8 9J5:8543907   .947.20 20100 .  5 .33.4348 .47 .202O7E-.E348/013EE8 9J5:8.0 5  3  8041 9J5:8 . 14. 2:9.93. 5.93.3 0 F5F82F7090  .4348 9J5:8 5439070 0830  .0 .        5     5     .0 5  3   5 .200 . .93E3  4 23/03 54390730 ./:3 0 0F8 8E249  . 9J5:82F70990  . 880 .203 9J5:8 .

0  ..4.E--2~..-.3F5909.88.3-02:9.F55032:9. 989E3  4 2F79 07Q30 ..35 0F5089  7008     . 8041 /4:-0 202O7.9O 02E8-O  Q3-8FQ .08v5439070.9802F909.0E.:83..3  807  3/03 F5F8-03 J7.3 .2~.803v 202O7. 202O7E-..J2070 .003303.92F709 F5909 .7008  554390797EEJ9./ -90 43F39 14. 5   - 5  ..9O 14..4O 10009 14.3 3/03Q2F7090 2:9.20100v .9802F909. 5543907  350/0F88E2 . 202O7E-.43.9  5 147 5 5   5 57391 13  5        5   . 14.5439-.009. 55 3.9   002   5439070 39499.47 5 5 3 5   !F/E:   /4:-0   5  5  5       5 5 543907Q3-8F F79F0  08    . 202O7E-. 0F8 8E2 08 ...FQ3. 09v .0902F30 .4348 9J5:8 543907 .0 5 239 /4:-0 543907   /4:-0 .2:3   .47 5 53   ./8E.. 2./.!F/E 39.E94O .0..9 .F5909. 003 8.3 03 -0Q /013E: v09   .. .E94O.9 F79F09 90E9. 2. 57391 /3/3/  5  5   5    1Q..2E84/4F5089   ..  5 .E94O. 202O7E-.090v 147.9E8.E.2033-03 4E8 .  .F300 14.E94O7. 55 3.2033.20 1Q.. .0.J203 9. - .F303 -0Q  5F/E: . 2. . . 100v88F900803 0 F3Q3  803.3 3/03Q2F7090 8041 39 202O7.0E.9.94992~.470080. ..00930.0090 55 355 3 5 35 3 5  5 5  5    !439070 Q3-8F 0  F9 .88.5747.   ..E94OF39  .20100v .9 0v--70  .

9 /499 0 .8 .0.7 5 8041 43/4:-0  .39E74:3 0  7:  ..O8 8E2 ..2009 43/4:-0./.-08vE-7E4E8E9  43/4:-039 :3830/..7 5 .E94O-.72..

7 5439079 .. . 013E:30.4--0F79F~-90 E7.297EEJ9:3 03.

7   2. 8.7    0805:9.31 1    147 8041 43/4:-0    2.88041 ..8    1 5 2.8 5:9..7   0 2...8 < 5  <      .

0028E20F89J5:84389. 5F/E: 8E2J9499E .9  20.E94O-.4792:84 0 8 .                      103992--0302./499 5. 2.( 00F8 O .9 00903 0020 .310.3.43E8. 0020 9J5:8E3.89E-0 ..33.F79 302 0039099 43/49  2079 ./. .9 00203  793.3 9072F809~0 .9- ( .2:2  002~0F88E28474.00909 .3808   08v/013J. 9O0/. ( 14.99:3  .3.4792:8.3 .49 09E74. .703/0F80  . 202O7E-.9-. 202O7E-. 8E28474.79J5:8.3 0.33.200 0 8E28474. .9439:/:3.9 .F09F..090  4 0 8E28474.9 0020 0/v-03 -039 0030 .2009.94 5F/E:.3 03 10.O342E3F9709992-.49  4 ..0 . 20. ..7.94 .E94O9J00930E-7E43  . 0020 880F9  208E249E.4792:89 8 -02:9.  247 -04.92- 008 002070  003/00.   F79 4 . 0vv 002 F79F0 0./. . .9 204/E8. 8E28474. 92- 0020 703/70 39  14.  .5E7484.9 00209 :.090v 00209 .--.900209E74.  .3 .900390990 4. 0029J5:83F.8E28474..8..9E749E.  .9 0020.8808 2~.4792:84 4.204/E892-9J5:8  013EE8E3.-04.4348 9J5:8.4.8E8::9E3 0..   %2-   /203O892-  0vv 100090-03 9-- 4.. 20100v9J5:8 202O7.89: .E94O-.839.  !F/E: .9O0    92- 0020 .0028E2(  !F/E /0130   39.43-.3 4.10.2:24989- 03.0 0028E2      .0 /449. ./.08099   .  4 . 20..49.200204/E8.0909  '..

E87.907Q0907Q014.J20     9(   8E2E7. 9 92- 8E2E7.$39.. (          < 14. 014. E E 8 /0 13E E 8 47 !F/E 39.J20          9( 9(  9(.8 92-3F.J20.9 9E70 2F7090   -90     92- -90 92-.J20  9 (. 014.      9.( -  ( 00F8 O 3/00F89J5:8100F8009   92-00208E2E7./002F30. .907Q09 2F7090 0028E2 8041 0029J5:8  !F/E: .J20   9 (  14.J20     3. ( -( .91 (    < 39- ( < .9 202O7.3/0(  !F/E.( .99 ( 9(. .J20 9(.02E8:9E3202O7.

EO/ .3... 9--002 .

 .

.. .0092O/433..8. 23/030020 .3.EO/  .E3 ..

 /4:-0/(        < .

9:8. 92-.:942.3  39.(      < 002~70/013EO/ .

 .

0/vF79F  . 09003 984.

38 .    .--..92- /002F702:9. 92-F 8 54390 7099 92-30. 84./002F30.0903909v 239.9     . 5.20.9.J20543948. .3 239 05439074389.

35 57391 /3  5         0.  . 3.J203 0/v/v 430029J5:892- 30.0.. ( 3  8. .J20  %0E9..2. . 39.090v 5F/.3 F90v 92-70 2:9.(00270142:9. 5 43 543907 43 5  .31 /  3  147  3  8.  0/002.475(. 23954390730..92-002030F79FF9.J20 .31 /  3  147 5.9  .5 .09v Q3-8F . 202O7E-.3     0.(  39.. 002093.92-..//.2J 5 9 .79.!F/E:003.9 .47  8 1014. /002 .( 5( 5( .   .O 8474.. ( .9  /499 0 3 002~ 0F8 8E24.E--E ..9  #03/0Q .9 9.9O  239 0 5 .38 5 50/ .14. (  %4. ( ..0 F85( 2390330./.31 /  .-0     .5 . 5 302 0 .F79F050/ . 4389.2.93 . ( ..31 / 5  147 5. .9 . 5 .E94O .09v035.9002090.  0/002   2E8 -43J9FE9 . ( .79. (  5.E--E-7.O 8474..9J5:8.9FEE9 08v200J9F8-03 .9 9.J203 F.9 /499 0 3 002~ 0F8 8E24. 0/002 5  . 0/0020  .F5073v70  39. :897E.v  -90 48907Q09090039 .2. 92- F8 5439070 74438EE3.9.  5   ./50/J7:.( .3 (0020-039E74:0   :-47F48703/0F8  -:-47F48703/0F8897.35 8. . /002.92-30.J20 .v847703/-0  8E28474. 0/002.( .E--92-/013EE8 14.4 9:/./.9.(  147  3  57391 /3 .  .( .   .  4 . .2:9. 3702039EE8-E8  .(  . F8 5 99 .54390703/0009v5( 5    . ( 3   5 8.88: -0 0 0/203O892--0 2.5.

4-- 002 . 08v -0E7E8-.4 .  0/ -0E7E8-.0 23/03 -0E7E88.3 .. (  10.J 108J3F70  . 1033 .( 9.( 9.4792:83  3  .3 ( 9..8.(   .843O.3 .E3/4743.3.E3/474 .. 0Q70  .3 ( 0  9.3 !F/E: .E--00  E3880.--.(.1039. -0E79 0020 8.FQ.F0./J909v0. ( 9. ( 0  .E-- 0 002  . . .0  . 0F70 07Q 0.E3847 9.E-- 0020 .FF70 .(              .843J9E89.3  .843J9: . ( .3 .090v -0E7E84-. 92- .9 .4      3   '.E:  4 .03./.0v-:-47F4 849.(       . 0.3 ( 92-002-0   .4 .3 880. . 23/03-0E7E8:9E3 7.E348.( .3 (  ..3 (       -0E7E8 3   -0E7E8 3    8E28474.949 3  807 14: -0E73  !43948.843OF5503 E7:3 0  F8 94.8E9  4.( 0 2.807FQ v09   070/2F3 . 3 ( 8. 8E28474.3 (  .

-- 0809-03  .  A8 E3 F79F.3 8Q8F   07488.09  .3  23/03 880.8439 E742 F79F. 8E28474.8070 .2 .803v 847703/-03 ..843J9E89 .9 070/090 .807F70 ..99O 1Q  E3 ./E89  ../E89 109F900   880803   3  3    .

/E89 F8 . -:-47F48 703/0F8 07488..52~. F79F.E.89:  ./E890039  . . 880.47 .00930 .-- 0809-03   3  3    .  F79F.843J9E89 .

J9.9 703/0099  $v9 ..0.99  .8F8 0809-03 9-- 002 8 .00909 109F900  ..4792:8-434:98E.880. 8E28474. F79002-03  4 302 .9703/0099  3  -0E7E8    .7.3  3 ..52~. 8E28474. 8E28474.  .3 .9 243/:  4 003 .-- 0809-03  94. 42509E8..08 F870  ..--. -E730207Q847. 8 3   -434:98E  .807F70.  . 1039 .2E.8439 04-- 0809-03 .. -020309 2F709F9v 3  3F090803 1Q  ... 8E28474.80700 -0E7E8 . 92- 0807 -0E7E8. 2000Q . 302  .090vF5F8-030F. 3  803 . :948O.4792:8 .3 4.v847703/-03.  3  02 30F E9E93  4 0030 E. 80703.3  04-- 0809-03 8  .3 .332. 0F70 07Q09  .E--7.9 2E7 703/0.:.9 2E7070/0903.802F9 0Q 4979F3 0..08  4 . .//2033   .3 009 .0 0 .4792:8 07488.J9499 . . .843J9E848E2./  4.8.3.4792:8-434:98E... 8E2 .8.300930 393.47 .4792:8 -434:98EE3 '0Q F870  4 . .80700F9 ..0.549E-. 08v -0E7E8 :9E3 F870.

.31 /  .(  :3 ..8 8. ( 3 :   .31 /  3  147  3  8. :.39.

.F0 ..9:E8-0E7E8.

 /4  :.8 .

.807000 .:948O.

 147  :  1 .8< ::. (  .(.( ..8. ( . :. (.(.

0v :948O.090v-0E7E8. .807FF300F20 .

 < 0 :.8 .

F0 . 47./499-0E7E8-.3.49.3 ..302.8070 0.

.8E28474.(  . 3 (  3   8.9F43 :.  0/ 54J.. . 3 23/030809-03  00F8 O F9030 . ( . .9.9.E.  9  ./43 3  807.247.E--5747...3E  4 .E3847 80--09 9.O8J9.2E7 070/090703/0099 ..9703/0099F.89E848703/0F82502039E.E--E-7.  147  3   147  3  1 ...8E28474.003    .9F43.(.080909 .2. 20  4 ...--0809-038 /0002502039EE8.( .7E...843J9.( . .(                 .E.27F809.E9 .33.( 9 8477.<  E720J730807~--239.E..4792:84 8  .-:-47F48703/0F89 0.(.20.9FE.9.89E848 703/0F8 -E7203 8E28474.3 $97.033. 147  3  57391 /3 .20030 -434:98E.8.E 10.-- 703/0F8 .9-43488.--.  0/ -0E7E8-.(..07488.-0802F090803.(   3   00200 F8 ./.3 (  -0E7E8 3   -0E7E8 3  3  -0E7E8   . .3 .F8-F.O. .(.8 080-- 002F9 0v704.(   32:2 . 34 3 .807Fv09 92:9.38 F59003F870. 880.F 08.89E848703/0F8   232:2 .9 0809F3 900v03 .O-.232:2 .(. 4-434:98E.

:.E4..80--00250/0v7007Q..33.9-..E94O9.Q30v70 ..3 F8.002E89.8002E97.80023F3.E4.0 4999.( 9 .020Q3E97.703/0F8 0..08v0023F80--00200v990 .807F.Q30v70  Q022O/  2.3:. 478703/0F8 6:.20...9   $F9.29900030  !F/.O-.E--.9E74..3E.  .:.002.3..020Q3E97.58479   .E97.( 9 F8.-.2080739.80023F80-- 002009.3.:. .2JF8 9..      C90909.:5.3E. 8801F8Qv703/0F8 20708479 . .703/0099 8E28474.9E87. 0/-0 4897..:.(80--239.:3299.4792:807Q-02:9. .9E8979F3 94.9       8F9.//.8E28474.E4.3F94.314.E43.00.F9~F809  030 5F/E: .(00209 82F9 10..4--239.8002.E3.100 2.49.07Q.E.88:8F9 .( 9 . :.07Q.80023F80--002009 2J9.0.:.:. 0/54J.O-.. 0/54J.E:30.4--002009 2J9.200.0 2.88.807F.0.EO3/07E3E-.20030-434:98E.3./82F9 .E4  0Q20 4..92--03.E9E8 979F3 -03E   .299 :.(3.3.80023F3..1039200F8-0302J909908vF9703/0F82..8E28474.2. . 0/ 54J.0F9 .O-.:3299 ...E:30.4-..8002. .8479  .9E8  3002~8E28474.3.0v70 F5009v.8F9.F83/00 E88:  2F392~/.2009.3 -03E .8002  3.9.002E89.10024O50/.4--00250/E97. 3..  .  Q022O/ 23/.900209 .4--..08v002080739  .( 00209 0.4792:8. 0/-0 47 Q022O/ .-.E--.FF70EJ9:3  0/09-03.900F7009.800223/. 30E78 3 0F50.10395F/E3                                                                                    .( 9F8 .E4.3.

 3   .

..   .F5009 . 4.F79FF9v1Qv03.

(.(.(.(. 0   1 ..(. .(      < 080  .

E9E8 . Q022O/.

9 .0. <  147  3  57391 / .940020308E2.92--0  2. 50/.9 .9 .3 .08v8E28474. .92--0 009Q3   . .3.v8E28474 .9 .(    C8801F8QF8 /499F93.80--099088Q.9E 74.   -                                                                    .9 1F8QQ 880v0900903 3.(F8 -(0020 Q 23/...89499: .    .8E28474.0 -92--03.     2E84/8E28474.  !F/. 3F8 2 F8. . .00209 .20-v 014.33.9-.E94O.          C909   ./F5Q3 009 .2009.     8801F8Q98E28474.9.9-.09.v8E28474. 08v8E28474.--.0.8E28474.2E84/0020314F50093  .

   0 3 2  .

80-. -0 23/.9. 2302F7Q3. .FF70  247.20...9.208E28474. -O 247- -v2E84:300209.

 (- ( . (.(-(  . 1 . ( 080 .

2E88E28474. :9E31:9499:3./9002090807Q03 -02E84:..208E28474.7.FF70 .9-O  ..92-.9202..

310.9F58v002F.. 0 3 . (.2.<  < 57391 / / .8478E2E9 O .3  O .94    /49903002~.8-. 8478E2E9  . (.( .O 8474..(    3E78 0708F8 /499 0 3 002~ 847.E.9O 20..8E28474.843J9: 09. 302  .v 0F8 8E24.7. (         < 147       1 ./..84 :9:3  0 .303 2O/43  .3 3.2020E. 4888E 8.099088E2703/807-0.3 ./..249 .. ( 0 2 ..O88E24. QE39F70  3E0. 40 .(.(   9~9910. 0708F89 :.E9:F8J7.302J7:.9 03v7Q 822097:8 0  .<  1 ..9Q7F5F9    9J720. .989E9    /49909072F809088E2 J7:.0. (.F79F9v    .99.8:3-0 . 209../20E9.9-.9.0  O .(..47 0 20100vQ030909  O C880.5J9.F0 F8J98Q3. (.(.9 8.E348.9  . 108v .8474.F8-F. ( .E9    7:35747.9495.9-OEO2F7F88474.239 0  0F8 8E2  07088Q 20 09. 8E28474..(.5J743 4/:20 39 . 3:.9:..(.79.E9.4792:8 80739  . (- (  147    57391 / .E-- .( .2. 302 003v  .E.E--5747..2.7./.9-.O8474.9O J7:  ./.9070v147/:E889.003v .27F8094. .9070094.8O8E28474..9 0039  4  302 9.9 9.9.(.47209.3    .9: .47 149.(.79.

 5E748  09.89E848703/0F880 ..3.O-. .4.2.E9.v8E28474..E9   /499 F9 .F008 0F9.72. 3 . 2E84/  /.  $E2J98:  .0. F9 .488..2./0v147/:E8.7908847.. 5747..88087F8.0.E9  209809F9  Q3-8FF9   /499F9.20.8 97Q .O8 8E2  .20 0 3 4888E  0F8009 9.2030   /499 3 .3 3.89E848703/0F880 /  08E24: E3 002 80-- 0 . E742 080-- F79F~9  F8 .0.  $0F/92--0  .79.9   /499 0 3 002~ 8E28474.v09.E9  209809F9  Q3-8FF9   /499F9.- 847.2.88:  00 Q 847703/-03 ./499.- 002F9   4 .3..99E   /49903002~8E28474.2.9  .E.2 .E9  /49903002~8E28474.-49 20393.:.2:249      .2.  $0F/92--0  .E v09 . 008J9099 .88087F8..9:./ 003 000/300   /499 3 . 08v 232:249 F8 .  7:3 5747.3.  .30.v847703/-089-   /499 3 /.33.  :-47F48703/0F880 ./499F79FE3.9  F8QQ 880 v09 00903 847./.9./499 0023F F8 J 209.2.E./84789- 9.9 %7Q-0v0.9 8  4 E3.v 8E28474.  7.0..803v 7F88474.O92-9 8E24.3F.0 Q3.  .98 40..488./  /.E: .249  .949 .J98: .2000-4348F79F092E84/847 .  .9-. $0F/92-3FQ   /499 0 3 002~ 8E28474.2.  $E2J98:  .: 99 Q3 . $E2J98:. 0.0.3   /499 0 3 002~ 8E28474.9 .2.9  #03/0Q 2.. 03v7Q 47F8.2.:948O2.9 23/03F90020F87:-0.v09   /49903002~8E28474.908v002F9 4 3.949.2.79.2.2.57J2009  .3 200708 0 .9847-.803v847703/-0 .2.9 F8 0  8E2 3 003  9--8780  #03/0Q .9  807FQ 10 02E8 99 .:99Q3.354J..0.v7F88474.99.7.549J.7.    3 .2.72.9J.08.79.2.5E7. .703/00998474.8E28474. 008J9099 .0 Q3./499 F79F :948O 0v147/:E8 0F9 8478E2E9  7.9 #03/0Q2..    %98Q3 10 0   002~ 0F8 8E24.9 09.2.2:2 .9    7:0..2. $0F/92-3FQ   /49903002~8E28474.7. 002009  .    7:.9 #03/0Q3. 32:2 .O .

 2 .78(.7.E--5F/E84.8 Q3 89739J5:8 2395F/E:.907E3.78( /O  .907E3.78  ( .  < ...7.   .2...  2 .7 8 790  .-03  .  < .90E7:3.4  -03 .78( .!.077v. 33..90792--03 07Q30 09E74E87..8.F7/0089J5:87O                      .30..7 8 ..  .78 ( .78 ( .7..4 89730    .

-E8 .

.78( . ..2.

-E8 .

   /    4      4  7  9  0         08 /013J.7.EE8.7. 4389.  F8 .  2  .907E3.90792--032.  .7.7.O 9E-E. .3 .90792- 8E2E7.7.O .--.E8979F30 8 30.7.907E3. $ O/.9E-.3 20003v 8808 . 4389.. 1039 /013J.090  4 0 3 002~ .388.090vF5503F5009v0                       .90792-8E2E7.~ 002~.9E74.90792- .F0   --v . . .0 .09 v09 .7.892--03     .F50.7.20-03                O  . 4.907E3. .2.7.7.2:2 3  488.. .907E3..7. .387O -00F79.949  !F/E: .  ..0 0/v/v03 07Q30 09E74E87.9O0  O F39979F3.O8E-.9 F8Q ..  $ O/ . .9 8  F8J9 08973907E.3F.2E.~   09E74O/. 8973 907E.O3.907E3.  57391 F8 8.. .3 0 2E84.E8 979F3 0 8 30..97F809202O7. .907E3.v .387O.   147/J9O .2..  790  /O  -.907E3..9070  543948..          00F80 002~ . 008030 20100v 9E-E.0099 9E-E.   2 . 30. 1477E8O/-.90792- / 002F.O Q .7 8( .    014.907  .3E3 <   014.2. .31 1472EO847.7. 4389.7.7.3     $   .O3.

EE88.907E3. .J2F9   8 243/.9-0 .7.88:892-3.7. 4389.7.9:8.E8 .  .  %0E9 302 979F3 .2020.38 2E84. 907 E 3.7..907E3.0 8. 7. 8.2:9.2J 8  7E2:9.0 .7.9 -E80330.  . 2E84E8  .20300020. 80908 E7O00 (  .7.E-- 0  002~ .7. 4389.   F9703.907E3.09E74E8.5.7.979F3014.979F3 .90792--03. 4-0 4. 8 92-30 302 .93E3 43/7092O/439Q E3002~003.7.2.0  4 E3 002~ 003     .892-     $    /  4            . 907E..2.93    .09099 2O/43 33.90754390792-08 . 8F8 8 . 09E74E8E4 0.3847.9 0  4 8 30 92-30 0 0330  /0 802 . 4389.93E3  4 8 49 7EEJ9: . 790  .E94O8E2E7.7.907543907.907543907.3 01F703 -0330 . /O  .3  002~ 08  4 543948.O 9E-E.907E3.907E3.38  0F79 . 8E 8.90792-70 0330 8Q8F    80002~.E94O   8.8 .0 790  .   8 243/.907E3.0903  802 . 4389.387.:942..9.20100v.090v3702039EE8 8    F79 09003  2079 ..7.907E3.  ./9:3 20 0022F70909  .7.143.

 J 7E 8.   .31.. 8.

 039~097v  . . 4389./4 .%# 8    8      .907E3.7.                 02O7.2.                 .J7.9E8342.    ..F300 5F/.2.2.2.         2  .2.31 8 8  57391 8 8  790  .2..      .         2  .38 8973 .78 ( 8..573911Q.-04.  .    02O7./4%# 039~097v    .8E8. .3.88. .

00F80 O 002  8.843OF55032~/30   . 9085...3 302 4.0  4.. 098..7...31 09--8.8.907E3.9O -0 8..31 ..E-.8  %0E9  E9.8.31F8157391.  O  18.8.

9.2.9:8.:7.90792--0  5:98.3.2.J7./4%#         .7..8   847 .7 8  395:98 ..F300 574949J5:8.-04../4 .. 1098.78 ( 098 8  5:98 Q2.:942.7 8   098 %#  4.4389..3847-.9E8342.7.  /        4         ..8 5:98 8   .88.7 098 ./4 Q2.  039~097v   8  .8E8.      2 .    02O7. .5:981Q..7.2.  .90707Q.  00990 .8 . ..907 302 07Q 09E74E87.:7479   !F/.   .

. 07Q.7.E.9 .8:3 8.090v574-F2E./: 20  4 2.7 1098 . 8.907 07Q3 -04.7. ..:3.4389.31..  9.47.2:2 E3 ...7.7 8  15   00F80 O 1098847.E9.31 0 F8 1098 0 ....15:981Q..7.9..E-.90792--0  O   5.9 4 .0 18.F4.843O.7 8 39  15  3915:98 .F300 574949J5:8..5:98  O 002 .31 0 F8 098 0  09. 4..8 F8 .892-2F709F9J7:/0  O  15:98.8E87.098 9v09F7v03 ..9:802-032. 10.3.907809E74E87.2F90770 .32~/ 239.847.

.F09  0F79  .31 302 4.18. 847.88. 098.. -0 .

F0914.31.1098 .. .83  4  2O/. 8.09 .-04.33..  4 09 007QQ  979F3  4 .470 003847.

9074...8E8 :9E3  0 .18..31 0 .F330 09.O 4.8O 1Q.7..7..

109.F09     ./9847.88:.4992. 4.7..

.F3 574949J5:8.7 8   897. 3.  .2.   57391  // 89703 8 89703 /O   897.79. .7.9:8Q8F088F 908.J2030/v/v.49 E92E84. 8973  0.7.907E3.7.   . 7. .:/08973  5747.907E3.F30 574949J5:8.  .J203 0/v/v . 970 E 3.7 8 .51Q.488E9  !F/.J29v 0/v/v03 2E84E8..83E..7 897.78 (  5 88 ( 8 ./07 E42E39.4389..5 ..7 8  897031Q.. 3989703 .90703F39979F3 2JE92E84E87.  . 8.88.907E3.07Q. 00v 1Q.0 0 v 1Q..F3 574949J5:8.  0F79.F3.7.2.5 1Q.28479    897031Q.4389.F3 .  8  !F/.2. 8 .9F7J9.78 ( .9 .F30   00F8  . 8 .

09003 .

 .2. 5 .

. 4389. .7.2. .387.  .554390797EEJ9:.907E3.

 897.5 8 .  .2.

.892--0-02E84O/. .907E3.2. .7.  .

 897.5 88 8  .

8892--0E92E84O/.7.907E3.  892--0309E749. . .

5 . 897. 8  .2.

09003 .

907E3.7.7  543907 0 003  .F79 09003  2079 .1.2F9070 .4389.4389 .7 43.   !F/./E8. . 2E84E8  .2.2847-. 897. 0543907 4389.38  O  :948O 5747.7   .  ..5 8 . ..7.2.147/J94997E3302.8:5E3 543907 4E703/0F8 08vF79FE9.7  543907  J .2847 .3 302 979F3 .78 ( 897.   .  .5 08v 5. 00F80 O  08v F9 5747.8439 ..07O008 ..F79-E8 2079 823992-3F..5 8  8  .1.  897.J20 .

907E3.7. 978 -v. 2.49 . 7F8.

907E3.4.F307F809080--0J7E8.3:2E34E8.F30 9.F099 09.F7/0F-03 E8/.7.. 57391 8 8    .05 09    .900v1Q.00F-1Q.

49  . 209.7..7 8   897. :9E3 1~   8 .F3 880.   88.7 8 . 8 . .7.E.7 8 . .251Q.9 .F3 574949J5:8. . 39897.90730.J203 0/v/v .843J9.3.8   897.88..9O8 -03 $0790030708F80809F3.4  401F703-0330.31.F3 574949J5:8.7 897897 .E.F3 574949J5:8. ..-.E3 0F 3. 8.7.F3 574949J5:8.9 1Q..907E3.0.7. 549J.F3 200708.9F7J9 30.88.88..J203 0/v/v .9  3:E9 ...4389.7 897.907E3..-.7.4389.251Q.J203 0/v/v .33.J2F9 .7.88.25 .4389.49  200708.  897.7.90703F39 .30v--70   8978971Q.7.209v 0/v/v03 8  0v87209.9 .33. ..907E3.J2F9 .. 8...7 8 39.7.F3 . 209. .0 8 . 8 .E..7..4389.99O 1Qv03  4 047E1:8847703/-038.   897..7 8 .4389.7 8   897..3  .9079.7..20..3 .08v0v147/:E8 00 $0790030708F80809F3.4389.7 897.90792-30 3. .88.9J...4348 8 . 8.J2003 0/v/v .30v--70  8. 8 -0.907E3.&54390799F7J9. 8 -0.7. &54390799F7J9.7 8   8 ...4.71Q..J203 0/v/v .. 8 09.907E3.91Q..7 . 0 0330 . 8.9  F8 .907E3..   897.71Q.9F7J9.J203 0/v/v .907E3.9F7J9.90730.

18.843O2O/432~/30239..F30 .31.8573911Q.

..9 /499 0 9072F80908 8E2 .J98:3 F8 147/J9.  9 2:9.907E3..E .31 302 E42E3-O 4.7. 857391 302 E42E3-.7.907E3./.302.1573911Q..9E-0.31 /  3  9..77.-..Q3-8F0  4 .2.907E3.7942E3-O  $E24: 20 8E20099.83E: v09  4 8E249 .J7 .8  .7...E--5F/E8   393     :3830/4333  .F30 .79.  . .783( 0..3 ..-O  F8 .. 88.7.3F090        E3  8 333 3 857391 83 : 33  89703 83  147     1 83(    57391 /    .302 . 39 8.

8243/.902E8.249 ..243/.9 8   0 88.94-....3.78 ( 84 ( 098 8  897.F .2:      04/49910. 8O0.90700914..7942E3-.31 0  393   .8.89..5 8 8 3  .94  00F810..     7:35747.3 243/..78 ( F8J90. .33.   0801  5:98 84 -70./4.....0  .20 .5.0...3084748.88:-0v0. :3830/ 439.74/( 098 4/  389703 4/  147  3   4/(    88..:.8.9904. 8E20 F79FF30 100 20  7:20.9  8E249  O/4:3  4 3F0970 020Q3  2.31 4/ :    :3830/43 879 /4:-0   57391 8.  393  :3830/43 .988..8243/../.8.E.3/742 07v4.<  897../ 3.8.20-04. .907 0v147/:E889.31 8 8 84      389703 84   147  3      1 84(84( -70.203023/03  898((  147    00208E2EOF39142~/3 89( 1 89(  002 .249  8E23F090-001F7. $O/.949098 0 2.33.249 .7.089 .34 E-F../  89(  8E243     7:35747.88:.0.-039~097v09--8.7.239E9:7O 8../ 23/03 8E20F9 009908J9Q ... 393  89( < -039~097v09--8.. 8..E  C90904..20-04.9 ./0O/4O5747..  57391 .9078479F79Q3  ./.989E9  098 8  389703 8  C909F9704:30002~ 399J5:8 147  3  92-9 003..7.20-03.30.949 F8 .949 F8J7./.-09~F..

972.4..84998O9 .

.-O. 8E2E9      . <  D708. 80708034.907E3...31    9F7J9.O4..7.88. Q3-03.88.8499 8.8E847...

003  3/038O7..7.   1 393    .83480 ..7.-039~097v09--8.    098 8  389703 8  5 (8 ..8..9E87.EE-F..93.. 032O/8070v30.--..-4:  423/038OQ3.949 10/.8243/. E42E3-.2:9.20-04.F847703/-03  C909243/..703/0F89E7E9F50v 0399E8430207Q30 24. Q3803.949 F8J7..7EEJ9:30 .902E8.7 5439079 #03/0Q..8.80739 4 2038O7.249 .  7:35747.. ..8..543907009.78 ( 5 ( ..3E 4. 114503 8.0399E842F7090 3.907E3.

7.-4E8.  .243/. .9 10/.

 147 3   1 8 (  5 (8 8 (  < .

.5439070703/0F80 .

5(5(5(5(.< .25 5( 5(      . 147     147      1 897.

J7E8.F847703/-03..E42E3-.E-F. ..8. .

 147     15:98 5( 1 15:9. 8 ..20-04.880Q09   393 3 3    .-039~097vF9 09-- 8E20~ 9072F809088E249 F8J7. 3 1 < 1. ..78( 8( 8( 098 8 098 8  8 389703 8  389703 8  8 33333 .249 .480 1      7:35747..8...

E9.90 .

.. 147 3  3  3        8( 8( 8( .. 8( 8( ..    .

. .    . < 147      8( 8( .. 8( ..

   .. 8( ... < 147      8( 8( . .

..7  . < 83(   1 . 5:9.

..90J7: .3E9. .

 5:98 8     .

7.-039~097v 3243/..907  393    .249 .300320.  7:35747..949 F8208E24.  ...7 .20-04.31 / 3  09.78 ( 8. E3-.8.

8..847. 4.F09 .88:.9.31499..

.31 1 / 3  109.7 8    < 57391 /      7:35747.243/.   1 393   23* 23 . F5073v70.93.20-04.33.78 ( 114503 243/.243/.20-0300v--70147/:0v.949 F8J7.8... 147  3    098 8   1 897.. 1 .9 -0E42E3-O3243/..8478E2E9 ..249 .9 -0  7  18.

847..9..31499. 4.F09 .88:.18.

 23  147 3    1098 8 8041 8 1   897897 8  30. 8 .

 -..O. 8 -0    54J.  30.07Q .

  1   23 2323*< .

3 .8499243/.  30.302807050.4.. 43/4:3..9-.7.  .907E3.77.0809v8F708 4.

243/. 8E2E9   1 393 2..009F8J7...8E8.5 8 8 < < 1..249 . .31 1 8 8      389703 8    1 32.3F394. 2..18. 100F8     7:35747.78 ( 8  ( 114503 243/.480 1  5:98 8    .80708034.F04.88...8499 8. Q3-03.3897.8 .0488.--8O9  C909. < 1..239...480 1  57391 8478E2/ 23*  30..9 -0  7  0 18.318..47    9F7J9.  .9 4. E42E3..8.94 -0E42E3-O08.83E: 4.20-04.

7./: 0  .3/7423.907E3....907 .8.9 F8 F5J98Q3 10 0 ../ 848474: 20 .  !F/E:             -020309 .00930./ 54J. 07.43484888E.43 -3E788E249J088E2703/807-0 .33847  . ..2033 ./.249 .47 14. 9--87 0v147/:E8.907E3.7..907E3.3  !F/E: 8.8479vF8J7E8009v09039./499 . .907E3..E.79.2....20 .907009 9. F../0--8.8  8888..8 -0 8E24.907E3.89.7..249  .     -020309 . -039~097v 8. F5073v7v 4./.9O ..88:3 -0 .9 9.  F8J98Q3 0 2E8 .7.907E3.20 -09~703/847703/-039. 8O0 0...7..F    7:3 5747.2.2.902E8 . ..5J7434/:20 .O 09F7F8   3E3023. .7.7 8    .78( .33847  ..9 9.09v 802F302F9F88Q09F8/E9:2E9    00008010.7.94 0088FF9  2.8E20F79F0    .09.-.4--    /499 F9 .9495./499 ...3 009908J98Q 0 ...-O 8478E2 80739 20100v8E20F79F0  !  .9~9910.79.3 9.2.7.O-..49  ./.. .4348 4888E  Q3-v ..7.89./ .7.E949..907E3.7. .907E3.907E3.3/742 0 !.90709 ... 8O0 0..:.78(    .9   -0.20-.2. 5E748 8E2 0899..  .907E3.7.. 2E84/ . ..7.7 8 / ..7.F8 4--7O-.  03v7Q .79.49 .8E20009  .E9 .89.    ./.E..79.78   0 .3.79.20002E8.907E3.90v .7.9078474.3. -3E78 8E24..0 .-. 0vv 8E29O .E3.78   1 ... -E720.7.78(     7:35747.7.2033..7O4--7..22E 03v7Q .7.99 8E249 .2E84/8E20009 9. 09v .88: 20 4 23/038E2009. 2E84/ .79.7.94    7:35747.0Q3 . 08v .94 0088FF9  2.9   /49908.79..907E3.O .20030 -3E78.78 .249 .8.  .20-03 20v7Q 8O0 0. 08v 23/03 -09~F9 848474: .4.20-04..-.0 !F/E: F.-.97O0/39 4 5. 9F300803 8E2  0F8 F8 ./    .2.8..2.E. 8.E.38.33847848474:320 239.////     -020309 .20009-- 002~.04.. 08v-09~09 . .8...80802F8E249 ! F8J7...9070807147/:.  %7Q .9    /499F9 .

0 9.79.3O 9  009908J9Q3.9 9.. 8O0 0.E3.3O52.0-03 23/038E2009.90770 239.7..907E3.0  .2.  %Q7Q Q323/038O9 F8J7:.2.  !F/E: O7009  O5O70500509   /499 0 ..70  23/03 2.8.7.7.907E3.J3079..E.907E3.3O.2.8E20F79F0   /499 0 243/.20 8..79.../E730.33 .7.  .49    .9  7: E9 2. /499 0 8.2033.E3.89.E3.8.8E20009  009908J98Q3.

   9 ( (. 48454*8E2.  -90   8041 39 -90  -90   F9/203O892-002070. 002*9J5:83F.O.79. 3F.  4 008803 .33./.   F9/203O892-  F9/203O8 92-  F5009v 0 239 0 9E-E....J20                9 (( 9 (( 9((.4348J9O 9 ( ( 9(( 9((     .9E74.9J74499002030. 014..94-90 43.   . . 8041 002*9J5:8  !F/E:. F8 4845.. .847*3/0(4845*3/0( 992--08.J20      9((  F9/203O8 92- 8E2E7..(48454*8E2.( !F/. ( ( 399(( 43/4:-09/ ( ( 992-95F/E:J00930E-7E43      9                 ..94E8839.8474*8E2.9437E:  /013EE8839.8.090v F50990 009 8E2J9.9 9E70 2F709F9 . 8474 239 ... 992-202O7.1039/013E992-2F70908477.3 8474*8E2.9  .J20   9 ( (  9 ((.33.2030 847.F5F9802F909 8471494348E-7E4E8  09F9009Q 4.33.E--E-7.J20 9 ((. .0 . 48454 3/00.399J5:8.8.

.F9/203O892-3.EE8./013EE8:47  !F/E 39.((        < 39-((            < .

8  2F709~08 . - .

 ( ( <. 39.

. 23/03002 .3..EO/ .

.F9   !F/E  39..203023/030020 002~0/203O892-  039J5:80F9/203O892-30. 30.3 0/203O8 92-30 .   F9/203O892--00.-E . 39.(( 92-/013EE8 342E3  .31 //  3  2  147  3   147  2    8.024845480F88E24.../J7.7.31 /  ..3   39.3 0/203O8 92- .-039~097v0F9/203O892--0  2. / 847.38  4./97/.20 9J5:89  /013E 0 03 9J5:8 .3.0/203O892-  !F/E: .-. 10330-- /013E9 .32E974002099E74:  0. E93  .-03 .((   57391 3   <    30.2030 / 0020. 807093F 0J7. 0  002~ 39 92- 543907 4389. ( ( 3 2   8.99.E94O30. .79.249 . F9/203O892-  903909v  239 4.F5073v702E97...9O 10 239 0 4.E94O9  2.2E9700209../.9/4990384748 09.0  .3  002~ 0/203O8 92.002009./013EE8-O.--..0  14.88.E3488.  0F79  5F/E:..2000020:. 0 4.8.2.20-04.3009 0J73 00388090999J5:89 9.0239543907 .((  147  3      147  2   57391 / .O2E97  7:3 5747..

39 .E94O    9J5:8.39 .  .

 39 5   .

39  .   539 543907  9J5:8.

  .

399 (  39 59 ( .

  .

  .

  .

  .

  .

 9J5:8. .   9 002~39 92.39 ( 59 002~ 39 543907 92.

 .

 .

 .

39(( 52 .39 (( .  39 52(( 9J5:8. 39  ( 95 002~ 39 92- 543907   392(( 9J5:8.  39 95  ( 9J5:8.  39 52 ((  9J5:8.8F9/203O839 543907 92.39  ( 2 .8F9/203O839 92.

39 (( .8F9/203O839 92- 543907  9J5:8. 25 .

   -(( .. 200908F070 108v847 09.:84-04.     !F/.((F9/203O892-30.E--E-7.   -(( .499 147. (  $.9-((  .-02:9. -( . - ( ( ..(    . - ( .  -(      .8O847  - - . 0 3L22F709~ 2E9749. -( .-E .  ( . - ((  .0.83. -( (  .- ( .9.090v92-/013EE8 14.  - ((      .E. (9J5:8543907 4389.38   %0E9.3009 .J2070 .  -( ( .  -(      . -( (  .  F9/203O892--0  14.943.3J. ( .9 ( (  85  (  05   .- ( (  .0 39  003. 4.((  .  -((  .. .  -((  .E--02E8-.  ( . 39.  -( ( . ( .( .

9 543907  0F79 3.((  147 3     147 3 3     57391 / .9 14.0 05 0027v 00270F5009   4.31 1 05    00F8 O 85 847 543907  . 3. 2:9. 108v8.F5009  O 05 002 543907  .  92- 0 002F70 2:9.0 85 8477O 8477.743/00        147  3         147            57391 / .9O  .0. -08.((  147 3.0.9 92- 543907 0F793.30.((                                                                                                                     147 3     147      57391 / ..9   002~ 14..E-7E 3L32F709~907Q0900 ..((  147 3     147 3 3     57391 / .31 //  3  2  147 8585 385  147 05 8505  85205 8.-.9J74499 907Q090 0020 . 2009 847703/-03 09F900Q 4.  92- 0 847E7.3 J7.~F9/203O892-30  F8.393 2 8.

3    147  3     3          57391 / .((    .

-E488E40 3L32F709~2E97-.:948O5F/E-. 822097:8002                            3                            .3 5E74830809F3. 5E7:. 822097:8002 3   3     .3/O              20FE9O. 5E7:. 8473/0   F8       48453/0  Q3-8F0   3     E..903070 822097:8002  3          3  .1Qv008 822097.20FE9O7..248 E9O       2039F3 .J839083..  F554397.903070 822097:8002 3    .248 E9O 2039F3 . 8473/0   F8 48453/0  8800E.J83908 822097.3/O    $22097.7E3J9E8E.147/J9499 7E3J9E8-0E7E8979F3   $22097EF88.822097...3      3          1vE9O.1vE9O7. 822097:8002 3   3    .00F8.54394 3                3              3                    3            3   3        .

47 903909v 307054393.  .  002*9J5:83F.0028E2 3F..31 1  //  3  2  147  3    147  2   18.0 F9/203O892- .2:2.2F709*(2F709*( 2F709*3( 2F709* .8.  C909 C880EJ9:3 0 23  09. 2E97  0/ 847.O.E348.((  1.E348839. 0//203O7E3E-. .~ 0/203O8 92-9   23( 002-03 09E74: .3/0*(3/0*( 3/0*3( 92-.31 1  /  .3 /013E.89.090v 50/ ..  4845E3. ( 3 2   .20002F70. 847E3. 2.  7:  . 232:2E3. 232:2.8.480 1  .33.79. .  04/49910.97 -0  7  18.2:2E3.33 /203O892-098  92- /013EE8E9. 0.843O.94E8839. ( ( 23 ( 2.. 30.47 30705439 .23((   1 39.( -03 50/ . 2E97 30705439. .008E42E3-. 2. 8473/0F9    0/ 847 232:2.  0/ 4845 2..49 114503 2.0 0 2.E.. 3/009   5439 .. F5073v70 . 3 F8 2 F79F09  .94  /4990 3L22F709~2E9702.3....~8.97 -030.  %--/203O892-  0 09../.9OE742 3F  E9. 2E97 0 0 847E9 0 847 0020 8O0 .3 08v 847 9. 48453/0F9  . 50/2.2.

84743F39-0E7E8 .

 147  3     23(   147 2    1 .(23(( 23(   < .((.

484543F39-0E7E8 .

((.49  147  3   1 2.((( 2.49   < 1 .23((     / / /3  23( .(   147 3    1 .2.830705439     .(22((    57391   .49 57391 3. 147  2     2.(   < .

2.090v 50/ 0 0 243/.94.7. .7.9  20309E42E3-.9 . ( 393   114503 243/. 243/..9     18.  /499 3 243/. 847703/-03  C909243/.. 1 .90 -02039E42E3-.90792-0 0847E-. 3 F79FF9  .949  7:  .9 -0 08v8479.. ( ( .79.90F9/203O8. 243/..9 -0  7  14503 243/.3 243/.94.39E74:0   1  .31 1  /  3  109.

7. 4.88..3F79F0:9E33847..9079 .

( 1  1.( 8041 . 147  3   1098 .480 1  .

703/0F884743F39 .

( .3  7:.. ( ( 3    114503 -0 99  7     18.(  897.480      /499 0 3F0908 2E97 . -0 99 -020309 E42E3-.31 1  /  3     147  3   147  3       18.5 .5 .00209.25 . 84E848 2O/43 .( .((  1.        <   < 147  3   15:98 .480 1     . 147  3       147  3   1 897.(   1.5 .(        897.80739-0E7E8847703/3020100v03      139.(       897. .( .31 1  /  .F5073v70..E-7.

E9O3F39-0E7E8 .

    147   3    1 3  .

20FE9O10099 .

    147                              57391 / .((   080.

. 20FE9O.99 .

   147   3     3        3 3               57391 / .((                       .

88:3 -0 0 3F0908 2E9749  .3 14.20 -04..F3F-03 .0 4./.OE-.9070-v F5J98Q3 .9 .2.200 3/0030 0..94.Q3-8F0.E348.33. .070/090F3F5v/3    /499 0 3 L 3 2F709~ 2E97  . .249  . 070/09 2E970020 1vE9O7./.4845.O489E82.v847703/-0   /49902E97 #03/0Q.. .8499  3F0908 .:2-O  F79F ..F09.O8 8E24.E348.20 Q3-v 0F8 8E24.5E3 8473/0 0F88E2.E. 003F9--3:E9.239E9O3.. 3(3907.:2-O  48453/0 0F88E2.: 20.2.79. 14.803v-03   /49902E97 #03/0Q. 3(3907..F3F-03 -  /:20 909.090v10.9E42E3-O4.8474.9Q3 Q33.F79F09 0QJ7E830220030/09992-9--0020 003     .88:-0         2F709~ 2E9749 . .8800.7.  00Q 9 F81Q.'     ( 92--039E74:3 0 8471494348. 1vE9O10099.9 9./..9O .9Q3 Q3.22E 0    /4993 2F803L2 082E97 398Q0 49.9072E97 847.907E3..0../ 0009 1~Q 880 -09~703/ 847703/-0  8O0 0.9070-v F5J98Q3 .090v0039F8~8E2E72.7. . 30.9~9910./54.07Q ..99    ..0    /499 0 2E97  03v7Q 20 847.7.4.0099 9Q72E97E9   9Q72E97 00209 .909.3  %0Q10 4./20    7:3 5747..2E9720002007Q30.1vE9O0020 E9. 00209   4 8471494348 -0E7E8 80739 ..9  '8E: 20  4 00 9Q78..v 847703/-03  F8 20 4845.3.  . 8473/0 F8 48453/0 003v7F80 :9E3 .2. . 0/0020.7.O88E2  -04.  03v7Q  4 -~.0 9 1Q.5: 9Q72E97.8 3F09 0   -~.E.7.4348    %98Q31003L32F709~92-9.. 3.0 .9 9.     E42E3- 4.O-.79    5747..92-. 0  09. E9./20  /  .47.048454.O-.0.4720392-54.9E74499 070J7.4.803v847703/-030030     .907E3.20FE9O.847..803v847703/-0   /499 0 2E97  #03/0Q E9 .7..89..9 9J5:83.2.7.8E8 .7.8 0  L  8 2E9749  F8 J7.79.940809F-03. 9Q7F8F.2E8 E9..20100v-08vE-7E4E8 E8F8 08-908E2E3.F0903807~03 109999 33 2F709~ .9  2. 2E9749 .84.4354.2009  307Q3  4 23/03 002F9 009908J9Q .2 .94 ./F..92- .2.9072E97 1v  F8 20FE9O3 9..79.2E97 0/847E3.314.8 3F09 23/03 847E3.2.9 9O0/v/v038E24:  .9..  J98: 0v .49O .20 ..07Q30. F8 4845E3.

8.. .((23.8.208E2J9.482079.-0E7E8 80739  /:20. (( .(.((.:8 :9.2.. / 3(92-9..5E3 .(. (( / ( /( /(<  -E720 Z   3<F8...2.(-( ..249 ...83E.( (<..4792:8 7F..83E.79..E--F509.1vE9O.(( -E720Z   3<  .. . . 3( 92-9.   .  - . ( ( .249  ..5E3  3 . 0 20100v .5E3 . ./090723E38.3( .20 0 907. 92-9 8E2J9..2.F3 .(<   3 -E720Z   3 <.79..4.(<F79F09.(( .. (( -E720Z   2<  .3(2(F79F09. /499 0 2E97  7:  .99F50Q3:E.-0E7E84    7:35747.E--F509.(3(F79F09.E--F509. .79. 8207930903903/v  .10.0 147/J9499 .-0E7E8  09. 00209 .( ( -E720Z   3< .(-( -E720Z   3<F8Z   2< ..9. 3(F8- 2(92-9.94900903.(2.((23.03 0/703/~/090723E38F79FF9  C909.F79FF9    .../.:882O/807    7:3 5747. 2.482079.   /49903F09082E97 $E2J98:.9 .8J9E89.

 0 302 0098F08  ..21:9E8 -03 F97043 .  . .E94O   /3. 1Q. 3 F8 2 -04.9  84.907Q0909 %07Q093.F8. 8Q8F0909 0FJ9  .. 07488. 70. 0 . 20 ..J29v    1700 .3 8E28474.E89.4.2E9  '88.F3   00F80 O  2.47  907Q0909 14.543 . /3.907Q0909 F8..4.2E972F7090 3L2  .  .4/ 5439079   . . ./499 8E2 -4 . E92F709003/v-4.20009 0  09.3 -0203v .8E28474. .3  92F7090 0 2. 0030 -449  .907Q0909F8./J9.4/ 5439079    .4/ 70. 20.5 3030.3 . . . .4.9.9: 8Q8F088F 908 .89/- 0.  3.J203 F..J209 . . 202O7. 2E974 . 0vv0 014. 2F709-E9-.9.1Q./499 .2:8 014.5./499 ./J9.. 0108.2:8014.4.2.94 .88. 0.2F709~-4.F3 E9.8E48.E8 0.90708903 . 3. 08v 239 00903 -4  . 99 .0F8 0809F3 0v8720574-E./.J2F9239.J2F9239 . :9E3 /07Q9   0F79 .4.F30.9F7J9.00997F8F307Q847  /3.8.4.2:8014.20.0.J2F9 .8:  .9F7J9. F8 ./..070/09.0 .2.83E3 03 08090-03 .4. . E92E84. 7F9 108.90028E2.0 F9/203O8 92--0 0099 09E74:3  4.  4 .. .J2  08.-. 20.2:8 .49.. 92-30 4.F . F8 03:E 0028E2 0022F709 2F709~ 202O7.4./07 E42E3 9.4.3 2F70909 J79:3 0v  4 .4.9 20247..79.2Q3-09.5.  00930 .21:9E8 -03  .E87.0. 009v8F 0330 5747.907Q0909  43948  4 0 2..4.4/ .2:8014.79.28479     ..83E.-. 0028E2 0022F709-E9-. 2E84/ 50/ 239 .4.9.. 202O7E9  A5503 09 . 1700  $39./J9E8950/.9E749: 20002F70909.3  014.F30574949J5:8. 014.v 202O7.E8900v1Q.3/O907Q092F709F9  O /3.7. 3  09.  0F79 .3  014.E94O.09v Q3-8F .4... . 5747. 3 09.4 0030  .--./.4/ 2.8E8. . .-.J20 2F709-E9-./4992F709~202O7. 0030 907Q09 9.-- 0809-03  8 0F 3..9F7J9..88. 1700 1Q.:/089/- 5747.

/J98:10 .94..4.9E -0  4.31 /  3  5 /4:-0 2. 8041 /4:-0   ..4.94.E94O /4:-0 5 5 /4:-0 2.2:8014..92-002F705(  3.2:8 /4:-0.2:8 .E83002~0/203O892-8E2E7.2:8014.4.E84389. /3.E8 -4348 08090-03 F84.E94O7.002070 92-0809F3   3.E-- 5F/E .94E8..F97099/3.9:3. 393 /4:-0 5 8..  8041 /4:-0   .9O . 92- 30. /0130  /4:-0 5 5 /4:-0 2.94E8.3..382F709~F9/203O892-8E2E7. 3 8041 /4:-0   .92-002070. 3 8041 39  1700 5    E84/204/E8 393  5 8. 5 543907 .31 /  3  5 39 2. /0130     .2:8014..0F39  90E9.2:8.4.92-002F705(  3..31 /  3  5 39 .0.83E.4.2:8 014. 09.380028E20/203O892-8E2E7.3 979F309 .20844992O/43 3/00F880 !F/E: 5 ( 5( 5( 53 (   .9:3.9907Q0909   8v204/E8 393  5 8.30 3002~399J5:892-9 2. 3 8041 39   1700 5  00F8 2F0Q3 7E  4 .9 2:9../8.014.94E8 5  3.-.E84389. !F/E  4:3F970/3.

..4. 8v204/E8 14:102390/203O892-9  393 2 /4:-0 5 8. 3  8041 /4:-0   .  0 002 3/00 .   8041 /4:-0   . F9/203O892--03/00. 0/203O8 92--03  ..  . /0130  393 /4:-0 5 ( 8.31 //  3  2  5 /4:-0 2.4.E83L22F709~F9/203O892-8E2E7.47 0330 . 3 2 8041 /4:-0   .94E8.2:8014.94E8.F9/203O892-   002F705 2 ( 47/J9..31 /  3  5 /4:-0 ( 2.3848458E2F9/203O892-8E2E7.92-002F705((  3.E8384748/04389..92-002F705((  3.4./0130  /4:-0 5 ( 5 /4:-0 ( 2..2:8014.94E8.

. 2 8041 /4:-0   .31 //  3  2  5 /4:-0 2.2030 23/0300202:9.4.2 2  E84/ 204/E8 F9704:3 0 3 002~ /4:-0 543907 92-9  .94E8.4.902002~ /4:-092-70  393 2  /4:-0 5 8. 3 8041 /4:-0  147  3  5( /4:-0 2..F9/203O892-   002F705((  5    .

2 2 E-7E802F0908032:9.F91F0204/E8E9            3   3       3  5 2 (              32  .:948O5F/.9E-0.

 .3  . F9/203O892-30.20 0/39  4  009 0 :93 .7. 92- 002070   2E84/ 204/E8 0809F3 .47-.9 90E9.090v8E28474.  O .943 .9.88:8 2O/43 9:/:3 .9O3 202O7.843O2O/43E7:30  7:3 5747. 92- /847E7.30.4792:8 80739 . 48458E2 7J9F80 4389.4792:880739 O 3/::3.9 .3 14.9 /4993/.907Q0909  E97E3.9:3 0   2E84/ 204/E8 0 2E8 0v30  4 . ./:3 .383..20030 0020 0F8 8E24  .3  8Q8F08 .. 002070 /0 3 2:9.7..00203E:3 .488.2:9.804. 8E28474. 8E28474.3543907009 ...24/9:3  4 3L2 2F709~ F9/203O8 92-9 4:3F970   08v 204/E8 0v30  4 302 F30 5:8 202O7.8.9:.F79 .943 .9J.03 E3F5F89F30.0.2033-03 0F90 .. 3:E8 0020 :9499:3  .47E9F5Q3.2:8.9443 .9 -08.F5Q3 . 8E28474.8474. F79Q3 .:9E8    !F/.549J. 8474 302 19F903Q 0 01472.5      53 (    00F80   5 ( 5(  5(                                            5(( 53 (2 ( O 4  4 .F .9J5:8.FF70  .9.907Q0909 5:8-.433/0~002F70 .2.20 ..-Q3-v4888E8E28474.43. 0 0330   .249  .4.908v002F9v  O .8439  4 30F0803 009 .                                 .20.474--7.3 Q3-v 97Q 14.. 1039 ..008E42E3-.08v8E28474./. .  F9/203O8 92-9 9:/:3 F97043 /3.3..94-O F8.48458E249  O  :948O 5F/E-.3 J 20790 .0030    0.79.090v .

.9 -0  7  18.    1 39  5 3    02 114503 8474.31 1  /  3 .

8474.948E2. 3 . .

8E28474.. ( 8041 39   147  (    18.0930  O  .9  O 5 0 3 002~ /3.93.2:8.3. 07Q90   5(.9:E88E28474.~ 92-(0028E2  O  -. .4.F5F8009 O  02 .2.948E2.3 F9704499 54390792..  39 2.<< 1  5(( 5( (   (  5(( 5( ( 02-70. O /3. 8E28474..480 1  02  0 3   1  5(( (  5(( 5((     1 ( 02-70.4. O  .2:8 92-70 2:9. 3 8041 39  5 39 2.7E.94488.  .3 009-0  .8E28474.9 O 3 .2009 . /3.4..F5009F8.94 09E74E87.8204/E8  08057391 /F5F8   147  3 1700 5(  1700 5 1700     . .31 1  /  (   5( 39 2.    .E94O 10  302 07Q9Q3 0 4...9:E800248458E2.38E24:.< 0805((    < < 1 02 5:98 3.9:E8847-.4 .47.J2~ 30.98478E2.31 1  /  5((  < 1.2:892--039E749.2030 0020 .F9003 /0 4/. 3 8041 39  147  3    18.

 950/01 09 . 950/019J5:8.47 .9 9J5:8/013EE88E .0.9.E94O/013EE8 0F 4/./013E99J5:84   950/012O/48J9O0v 950/013024F9709J5:89 .E949.30. 0 .4348J9O !F/E 39008 .09.J7: .  $39./09J5:83.  0.8:5E3E930.  .83EOE9..8.

0080399J5:8. .E94O .

 .

00809J5:8 .399J5:80.0 .--30. .

 .

 239399J5:8.E94O .

 950/0139008 00839 950/0114.9  %!%#  %!%#15 .

15  14.9 543907 .E94O .

 . 950/0139'% # ( '% #.

 002~ 390/203O892- .E94O . .

 950/01/4:-0%# ( ( %#- .

 L .8 /4:-092- . .E94O .

 1039 5F/E-O 8 /07Q  . .907E3.3.88E. .949E74.88E    807093F3 09E743  %072F8090803 /013E.090030./. E742 .794 :.33.9:3 E9. .9 5F/E:  3F.83.  4 302 9Q7v/ -0330 .802F30. .   1039 204/E83.0.88.92-9J5:88.  239 . ..  F0947.. ( :3830/00947 14.204/E8897:.     897:.9 8809./.2E888090999J5:8.9.9O     .  4 . 950/01 ./.2030 00209 20v30 30.0 .--.9. 82070/9Q3 20 .30.99J5:8  %0Q 10  4 0 802F ...8./.3 E  4 30.94809E74.9O0   . E97E3.9 9J5:8 0 8809099 9J5:8  .4348 9J5:8 ..0Q  F8 00-0Q3-v9J5:8. !F907  F0947   2./.. 8809099 9J5:843.  // 00903 8809099 9J5:88.93E3 0--v . 802 09  803 0 92- 0020-0 . . 9072F80908 8E2 F8 2. ..2F907-03100.E94O9  .E94O0093F30 5F/E: . .92./.09 .0 0 802F 30.F-O E742 .730.99J5:8  897:.O88E2 00..8 .  E742 002~ 92- 8O-..7.

E9.09./.7:  :3830/4/ .92. 897:..E94O 20v   897:.8E8. ..88.9.   897:.9..9  4 . 950/01897:.943 008803 7E:   897:.E8E7..0 E9.9.J2FF8 F8 950/01.4348J9O  !F/E.   F807~ 030. (    .0 098 8 30.9*.J2F. ( :3830/00947 14.9 9J5:84.( <.E-- 2O/43 897:.E94O-.9 9J5:8 . 897:.31 / 57391 2.9.5...94E8839.950/01.J20  9J5:8*20v* 9J5:8*20v*    9J5:8*320v*3 <.E94O*89.88.8.88E. .5.9  9J5:8*20v* 9J5:8*20v*    9J5:8*320v*3 <9J5:8*.E94O*89.20v9E70F30308800   802F.. .-04. F9704499 897:. 8.9O 0 . 897:.. .. 897:. <8 57391 30.31 1  8 00947   8 2.9  .839.7:.O. 8.(  9008 897:.99J5:8.9  9J5:8*20v* 9J5:8*20v*    9J5:8*320v*3 <.E8.9.3..2020vF70..2. 897:. .8.99J5:830...848 E7O00 F J79 20v0J7E8.E94O9E70F30.7 ..E94O.9.9.730.E94O/013EE8E3.9. 897:..2..  57391 F0947.0897:.03 .730.

4348J9O.847 80739  8478E24../. ( .0 .7 <.783 ( :3830/43. - (  00F8 O .9 -020309 E42E3-.8:5E3 .795:8( . 9025 393   .  9001438E2  0 8020 /.:94 . 3 3F.9 20309 E42E39  .00  114503 8020 /.9 9J5:8 .:94..80708 .9  ..9  7   14503 30.    0. 3 802F ./.9.3  4:3 F970 0 30. ..*3 9001438E2*3  950/01897:.7.847 /.90089J5:8... 20v0J7E89 .847 /. 08v 897:.730.* 9001438E2* 3F.9  .9    .J2F 0F79 .7: . 897:.79. ( 90( <8020 8020 . 3F. 9.4348J9O.9.* 9001438E2*    3F.72.7: 2E84/0809-03.9 /499. 802F0 .2.9   8020 /./.20 3F. 950/01897:.:94.9 897:97E.9.

E8F8-04. 014..8E8 .

( 90 1  < 1. 8020 2. 3 8041 8020  147  3   1098 . 8041 . 1  .( 30. 18.31 1  /  3 109.4.( 30.480 1  .. 1  1098 .( 90 8041 .

-:-47F48703/0F8 .

25 . ( 30.80708  .(  .( 30.80708   147  .80708   9025.00     1 897.00   .003 /4   .(.       . (  . (9025 < < <0 . . .

9E8 . J7.

( 30.480    30.900143    3 3F.   3F.900143  3F.847 /. 147  3   157391   / 883    .9897:97E.( 90  < 1. .900143    .

.( .-020309E42E330.E8E7008E2E9  -020309E42E3897:97E.      .-0. ( <8020 8020 .3  ...F9 .E8E7008E2.2  .88:-0  7:.. .9:3 .730.( 30.748 .* .480 1    147  3    1 897. 8041 .2.9 402E8-./.748. 3 8041 8020  147  3   1098 ..9.( .. :9.31 1  /3  3 109.748.J20 0 -020309 E42E3-.F9  098 .. -0 2F39 .E8E70 57391 2. 1  < 1..748. 1  18.*E8E2*    3F.31 1  88/ .9  897:.E748*:9.E--10.25 . 8.9 /499 3 802F 30..*30...748  ./.748 ( :9. 3 3F.( .9../       . 802F090803 2:9.F5073v70.* .E748*:9. ( 5:98 7/-0.94.( . 1  .7.9.2  109.7.*3E8E2*3 897:.947.*30..*E8E2* 3F. 897:.  114503 .4.2 < 950/01897:. .( 30.2.9.*3 .E-- E-7.0 F8 .9O 92:9..9  0..  7  18. 393    1 ..2030 30. 8020 2.E748*3:9.9 92--0309E749. . ..8E.( 398./.*30..897:. -039~097v4.

9. 2..( ..3 ( .F5073v70  897:.2 .. 88014. ( .E-- 5F/E-... 2F39 009 .94.9.   . .( 30.94. . (   . ..0.( .9489.  5 .  5 897:.943 0 897:. 8.9  54390 70     .2    8 97:..748 .3 ( ..J2F70  4.. F8J9Q3 077v 0 2E84. :9.3 /013E:3 897:.090v 5F/. 48 30.3 ( .88: 0 489E 9.9 .9489./J7:.E94O-.E94O-..( .3:O3.3 ( .9 543907009  F8 203 2O/443 .  39098.9 54390780J98FF.9.239 .9490 2E8 897:. . .3 -04.E94O . 8E2E9  ..9:3 897:.897:97E20v70   .                                                             .F9 0 897:.748 ( <.3 ( 30./.

5 897:.9489.543907 .

 .

543907  .9 .9489.20 . 5 897:. 702:9.

 .

 70142:9. 5 .93 .

  5 .F9  098 5 48  5 . ..F98E249  8.2  5:98 7/-0.31 /  . 098.4830. 5:98 7/-0.

 7v  57391 . -0 . 2E84. .949F8J9Q3 .J2~897:97E-.5.. .

9:3  543907 20v. 543907  20v  0..995:8.9O 543907 80J98FF. F98E2/3488 5 098.2 5 48   %0E9  0 897:97. ./. (<95:8 95:8  5  4.-20vF70     ..3. 20v70  .. 7E 2:9. -<95:8 950/01897:...939.E--/013EE84 950/01897:.20vF30  /002F30.0  .94.9 0030.9:3. 897:97.94.E-- 2O/443 .

( -   5 . .3. 897:. :3830/ 9J5:89 030/ 20    -9 488 -920v30 9072F8090803 :3830/ 9J5:8.9.3.04/E84    . 830/ 9J5:8./.E--5F/. 0 033Q 803 0 -903 33.  -   5 .9. 0 Q3008 009v8F0  4 20.( -   5 .E94O00820v   -920v09 8Q8F807~03 39  :3830/ .0897:.8 009v8FQ30v0-90989E743   003..9O  E3 -903 0030 9E74.8..  -    920 v    30. 0 /013E3:3 008 147/J9O .. -9039E7490v03FQ0F8 .20  :3830/.( -   5 .

 .

830/- .

-9039E7490v0080F8 .

 :3830/. -9039E7490v03FQ0F8 .

 .

39/  .

 -9039E7490v0080F8 .

    -    . -920v 847703/04--7O -.E94O 9E70 F30  -90 8041    .  / . 20v 01109J. <   1039 /013E9  .7.  .    /   F79F.   -909 .                                   .9. .2033-03 .83E./E84 :9E3   -08v E-7E4E8.3                                 202O7.20-v .  .   9 802F909 .83E3.  -  .                                     .E-- E-7.

J2F70  O -920v302703/009v92--0  O F59v1Q 4.090v :3434.8 897:.9.  -920v.O4E1F7F8 E7 23/0 20..E348839. O .14.9...2E9903909v8FF9F8.83E.9O10.9E3.0v309.O8J9.E8.2.00900 8  .7.202O7E4-983903.7O 4--7.9  9J5:8*20v*488* 9J5:8*20v*488*     9J5:8*320v*3488*3 <.FF39.9430-920v.9.009v8F00    .9O -92~.-. -920v .3 O 202O7..4O7F8.9-02:9.E.0 . 2F39 F09Q3..9F438EE9   00F80 O 897:.847703/~0   2489. 5747./.-920v39499.7F488E O -983903O/4931472E.O10/44E8..-920v4--7O -.0080300930-920vF8302-920v  O 02009.. 3.9..E94O*89.E94O3..090vF55030093088014.

9 9J5:8 089F3 .:3439J5:8.420v02E87.9 . 20v 02E8:9E3 07Q30 09E74E87. .v/30  8 243/.3...O8 8E2   . 03.9 49 .99J5:8.0F7/0089J5:843.9072F809088E249  09v 9072F80908 8E2 8.9:3  : - .  : -        < : .E--10. 5:98 7/-0.83EE:.   57391 20100v.47.07O./.9 :3830/43 9J5:8F39 -08v 14. 239 14.   :3830/ 43 F39 -08vE-7E4E8E. .O88E21 .  :3439J5:8  897:. .4-- 2F709~ 20v0 .E3 .93E3  4 ..E94O 9E70 F3F9 3. -90 7.O8J9.907Q0909  . 20  !F/E: .     .97.9- <:  89  89 ..9O20   ./.9 /499 0 9072F80908 8E2  0  :343 .8. 897:. E-7E4E8. .90. : .94./.  239 84799J5:8 20v70  : ..  89 -                 89 . : - <      :343 . 14.31 :  .3/013E:239.9  8479. 202O7.9   08v  -90 7.9F79FF9020    10.E-- E-7EOF7F0909.E94O 2F7090  -90 08 8041 14. 89 -  :  : .   :343 9J5:89 543948..:9.2030 14.4348 . 20v 0Q99 .. ..9E74.  :3439J5:880J98FF.94. 14.9 <.Q3-8F09 897:.9- <89 :343  8479.94E8 23/ .

0 :3434 .F.0080v309   10.7942E3-O  .29 43 /4:-0 F39 9E74:3 0  7:  ... .  4 88014././0. .9 /4990.3    .88:3 -0 .2E8. -08v E-7E4E8.9E3..O8 8E2  .83E. 897:97E  -920v  09.O/. :3830/ 8479 9.200 :3830/ 8479 9J5:8F39 -08v E-7E4E8: 802F08Q09F8/E9:2.090vF5503  .9  ./.. -039~097v 3 3  9072F80908 8E249 .3.   10.9 ./.E-- 10.   -90 E9 0.

F.F.E .-920v847703/0F8 -9 . 109F900Q 4. O 3.5O/-0847703/09.:948O .

  802F0 99 :3830/84794/ /. -9 .9:2  950/01:343 03v7Q .9:2/ 2E:8 8Q09F8~  <8020 E3.5  </.9  -9 .3 8Q0990 .O3.0-03  F8  :3830/2. 897:. F98E200 950/01897:.3..9 09.3 0 .0308 F.5 :3830/4 :3830/3.5 :3830/0.

.3 02. .:8 .

. 8Q09099 0 . :3830/..

309.03080 .3. .

3 0. :3830/ .3:..7080 .

 .

O88E249  8.3:E7080F3  950/01:343  :3830/.   5:98 -08vE-7E4E80E-.. (  ..39 5:98 7/-0.7 ( 43/4:-0 <:*950 :*950..3  147    57391    39 ..31 1  . .

F9.7O. -.90754..F79F00.5O94...7. 8E20~ .O3J7  .

7080    . 2.  5:98 '.31 :  5( 4/  1 5( / 4 . 2 1 5( / 0.3:. .3.5 .8.  < 1 .03083 .   8.3:.  5( / 0..   1 .   1 5( / 4 5( / 3.82.7080  0805:98 3.:8  0805:98 3.32. 80205 ( 393  . .31 /  3  147  3   8. <. 2 5:98 '..:8  57391 :802009.

 30.  E3-E9202O7..907Q0907Q014.94    /499 3 802F 30.E9.703/03F3.O8J98: 20 .    03F79F09J7..002/ (<002 002.39E7-O.  ..7  -E943  .E--5747.O342E3 003.939.27F809 09F900Q  4 .39E7F823/033023/039.9:7.E8E2: /4993802F30.84780739..914.009 F8 8Q09F8 /E9:24.<  .E9. 2E84/20vF30 :948O002F30 2E84/ 20vF30:948O002F70  /4993802F30.<0020 0020(  6  .J20 ..992-9 . ...9 8Q09F8 /E9:2 80739 .:3830/.6.4. E3.3....9-(39.27F80909F900Q 4.F9F8 9001438E2E9 .  3000320.  :343002..3FQ  401109J. 4350/-E943.803v847703/-03    03 F79F09 J7  .F800 .v89:.84780739.  7: 3F.7-(43.94..0 .39E74./4:-0- (<002 950/01897:.5089030..E748  :9.<  .F9F823/0330.E748:-.9~9910. .1039/013. 2E84/20vF30 080--0F79F~-9F9 70  .J2030. J98/.  .7 -E943 .  7:  .E--5747.E-- 5747.27F809  950/01897:. 703/0F89 0 54390792- 80J98FF.802F0.5.:3830/4350/-E943.J2030..  E8E2  F8 9001438E2..E--5747..7-(:3830/43. (  5.94:948O002F30 08v20vF30 :948O002F70  .0809F3.v89:. .J20  .239.3.4348F... 0 -020309 E42E3-.-:/.549   .9001438E2:-.3F. .3.3 .E9.:948O002F30 2E84/20vF30 :948O002F30 08v20vF70  .O3.9-04.9.0F83020        .8Qv.9:7....E87.3  7:E9020309E42E3-.39E74.   - ()  -(   -(   -( 57391 /  ..939.  003.   - ()  -(  -()  -( 57391 /  .27F809  950/01897:. 8Q09F8/E9:2.0 9001438E2..0 9.89:    /4993802F30.897:.0  .803v 847703/-03 .../.94.0Q1002-0./.  :343002:3830/.802F030.

 E94.7942E3-O  %948J98: .314. /: 20 . 489E100v809 F8 489E1v3009   /499 3 0F8 8E2 . 8474.949   4 . . 43 9.0F8F9  ..314. .3./:3 20 0 03 5E748J9E89  . 14.3   /499 E742 -020309 E42E3   08v 9.3.72.88:   /499 0 8.79.20-03 .9 .7.3   5E7..O:.  03v7Q4.  0098F08 0 v09 5E748J9. 9.009009   .247O   /499 E742 -020309 E42E3   08v 9.9 .E.9948J9E89:343 4F8-920vE9.314.9E89 0 20309 E42E3-.488EE7O  .00. 9.9.94E83. 7.9O7O  F8 .79E89  23/03 847-.3:O 2.249F8.200 0809F-03 703/00Q3000.2. 008 489E1v330 E3 /E:. 0/v80--0 0  09.48. 489E1v309 F8 489E: 2030.3 0 9.24.3:O9 F8 0 9.9-.209F801002-00990 0. 5E748 54.F. .247O  F8 ./ 50/ ..3:O 30.9E94.09--5F39 F820335F33880803-0 1  F8J98Q3 2:9.314. . 8E2 .E3.240.249 0 9..9 E94.   /499 0-020309 E42E3-.E748.. 5E748J9E89  .9O .F9 .147..  .3 .O:.24.89499.314.9 -..3 54.9E89 0 20309 E42E3-. 2E8 2 1v.43 478E47O F8 1v.-- /E4 F8 20009 .3:O.9E89 0 20309 E42E3-. E73.. 489E100v8 89EE9  7:  .  .9499.24.314.314.33847 147.27.9.  / F8   0F79F~-9009 10.4  F8 ..3. 03 . 8E28474...9-0 23/039. 09.77O  4 .0 84347F8%Q3/05E748.94.9: 77803 .79..--. 8E28474.:99  .O8J98:20 ..9O.9948J9E84.008 E42E3-.0 F8 00 489E1v30  F8J98Q3 2:9.83E:..F9 F8 E7E9  .F8-F . 3 9. 008 9.080--09 /  0 9. ./.E39. 2E84/2802F 30. 01.E748E9  .3 3 .  09.9 F8  4 20 489E-.9 50/ 4--7./.2:2  9.9E .314. 8E24 -08v E-7E4E8.314.314.2 30. .. 2E84/ . .-07.3    /499 F9 -020309 E42E3   0 9..94. .00.  .09--9.3 2 9.9E.24.807FQ2.E7489 F8 .0  .2.9 F39 -08v E-7E4E8: F58v F9 -9F9 ..2. 009v 09-- .9. 3 478E 30.O8 8E2  %948J98: ./ .949   4 .F9F88Q09F8F.-92Q. .0E94.F9 F8 1v.3 0 9E3.9O7O   F8J98Q3 2:9.E-- 010330--/E8Q8F08  .F8200. -E9.79.8 F8 :8.9E89 0 20309 E42E3-.314. 8E2E9  F8J98Q3 2:9.72..

E94O   1084749 .7942E3  !F/E: 0 .4348J9O  .3 0F8 4389.9 F79FF39   03:2 9J5:8 80J98FF.F8.8:94794 50390 842-.0  %0E9.49 .108474E89J5:87O 03:23.942 10  203 F79F009 .7942E3E3.4 394: .5  0F79 ...0 F3 2.7 48 90 <0.OE-.8 3.8.F 908  82-4:8 0F8 4389. .9E74.8. /0130/709J.9 . 03:2  .E94O   F8  99 0F8009 . E9903909v-- O/49 070/2F30  .2.73.009 10 0 03 9J5:8 . /0.. .9 .E8.8.E--5F/E-O8423/03/07Q.384 /013EE8E9  . 20  203 F79F009 ..5 <3.5 0. 23/03 F79F0 30.5 950/0103:2  9.239 E93 14:  .E94O  9J5:8.2 8474. .2...38 30.43892O/48J9O0v 20099 .57 2.   0// 2082079 0807~ 9J5:84 0809F-03 25..0 .  108474E89J5:8 03:2   .: 8059 49 34.7 . F79F9. < 03:23.009 10 0 ....3 10. 03:29J5:88009v. 03:2 9J5:8 F79F9. :3 : ..548:09083../.09 .54  0914 0// 807/.7 .5..

 .

7 448  5:98 . 1 43.743.5  .

 .

550390 . 3.

 .

 .4 ....

 .

: ..4... .

 .

 3.5  .

 $.F79FQ .4348J9O3.03:2.8-.33.

 5:98 0914  .

 .907E3.7.4348J9O 302.  $09140F8.

E94O03:23.003:29J5:830.73. 9-- 50/ 00 3.8.2.v   25...9 F79F009 10Q 009 -J7E3 05.  00F80   3.34E-F.  ./E88. .5.509..5.8.9 239 .-09~9 .79.4348J9O .EE809 9. 0v990 F.4--.  ..8.9E F83020/v/09308E200     .8..F3087E:.5  9. 108474E8-.3.9 F79F.E94O0.8..3 /0.4.9J5:8 .90 .5 F50/08    .73.0...4348J9O  0914 .4348J9O807050300F79F7.0 8:09083.8.549J5:8..8E20009F8.209F8  4..8030   08v .F8 F8 3.  !F/E: 0914 F79F0 0// F 50390 F  .3 25.  F79F09 .0     1084749 ..    .108474E8-.O8E-.3 0F8 F79F009 F5..8 90  .40.

E9 108474E8.3..7 3. Q3-8F0  445.5  5:98 //20. 897:.J20(108474E8<.3.5< 57391 03.5  503  -0..03:29J5:8.4348J9O .E94O 9E70 F30 8041 39   14. .2847  E7 2~/30 .3.0980. 209F8  4 .3F79020 -E7302/013E9:3039J5:8./499 Q09 -0.8.88:3 7E  803 .503-0. ./. 1084749 . 08F8 085747. 39 9.3../ 03:2 /013J..E94O .E94O89...8Q979  5F390  842-.5E3 .9  .0 0F8 F79F0  . 1084749 .7942E3 7F8..31 /  3  5:98 7/-0.503 393.542.5 < :3830/43-0./O/ .090(2.73.9     03:2 ..58 3.4 0F8 F79F70 .94.83E..28474 8 .5.5F3880009  147 3   8.9O -E74 .  ..5-0.8 399.28474.009 10  .43E8 23/.O3.5( 503 < 2.09v03 . .9  .(    03:2 .54.F.  08 F8  8 5747.72.733 J8F709F-03 0039F9-03E3. 03:2.23.3. 8.090(2.8E73.FE.08vF79F08070500930   0.0903./O/O..4348J9O9 .50914 147 0//.0900914(2.3 8Q8F  --v. . F9 20 3.8.9O 2390F80 E8/.88:-0    03:2  0914 0// 807/.5E-..31 /:  3.9O 10 239 .3.8 5747. 03.5 <  F91v  0//  807/. 8 .8E73.E94O89.8:94794 50390 842-.54( .5   1 -0..4-- 0 . 03:2 108474E84-.2.3..5(      .77O  4 .  .5 3 2.5 8478E2E9 F91v    ..7942E3-.  --v ..503-0.5   F8 .3.3 .     03:2 9J5:89 .3 /013E: 239 .J20 23/.9 49  ..9E89 .E94O9 F830.0 .. .503  2.843O.73.9F8./9:330  4 F8v-- ..9 F8J98Q3 0 2:9.548E2E9  8.F9094. .83E.8.4--147.4348J9O .3.090( < 503 2.F900   -039~097v 3 3.

-039~097v .E--F509 80J98FF.94307089Q14:F7F09093.9 F8J7: ..3002~.83E.O3./703/~42-3E. 3F8  A3 9072F809088E24.0 .88:-0.F30.8E2E9 .0v309   0.F30 10. 3  3.1Q.    Q.  ./.F5073v70 ./.9 .9E3..2.

3 5:98 7/-0..F30.F79FF9  8.2.   3     04/E8 1Q.3FQ  393   :3830/4313 1 13* .E8.31 //  3    ..3 F8.

.38E2J9E8. .

 1 3 13 080147 13 3 13  .

 .8E2J9E8. .

 1  1 080147 1  1  .

 . . 3  8E2J9E8.

 1  3  13* 080147 13* 3  13*  .

3  8E2J9E8. .. .

313. .

9.8348 0330 0 4. 3  F79F0: .0     .3     '0Q F870  4 .3 20  /0 . 1Q. 1039 204/E8-.F39  009 0F503  239 0 8J3/.  .F30   1Q. 009v8F09 .7.93  2E8 2E8 F79F070  770 -948J9./.9204/E8. F8 3  7. 1.F380J98FF. 0807 003 20J73  /0 .9O3.10. 1 13*  57391 .29 0807 J73.3 009v8F  4 .3.F70 008803 .3 Q3-v8J3907003 2E8 2E88J3F800    20.E7E3847 .E7E3847 0 009 E98.- 147. :.8.947E8 8E2J9E8 O/E9  3 70   7.1Q.F9  .3  E742847 J79: 0 .

:/089/4   .3.

F3. . 1Q.947E88E2J9E87.1.

 .

1Q. 1. :3830/39.850/.0 .F395:8.30.947.

  :3830/431.947.8 393 .

7.2F907 . 3 1472E85.

  39:3830/431.

F8 1 4E8.E94O .

 1 3 1 080147 1 3 1  709:731.

.J.F330070/2F3F39.9F79099F79F .88.O1Q.

3   393 :3830/43.  <  2.3.

E94O .3 . 3 F8.34E8.2.

. 5:98 7/-0.31 //  3     .3 F8.F79FF9  8.

 .. . 3  8E2J9E8.

 .

5. 3   3  .9:E8.2F9070 .0109.7..

8 3 .  .31.947.

947.8  1.947.8 3  . 1.

 .

3. 1 F79FF9 #.2F90730  ./E8. 2. 1Q.81Q. 4E8 .E94O  F8 . .9O/.. !.:0  F970330 . 3  F79F0: .F39    085747.2  3/03 5747.8J9E8.E8979F38E2E7.7.9E8E7.:0  F8 108E24O/3.947.3 50/ . E8/. 2. 2.1.0 1.8  09.F3J.9E8E.-.F308v. 00/v/. 0 239 .9.9F7J9 . 3 1472E8 5.7.947.947. 08v   2E84/ J.7. 2.2F907 . .F330 .3.3 2.  F8 .F3J. 3 F79F0   709:73 :9.81Q.9E8.31Q.E84 ..$% 0307089Q .2.F3 :9.9E8E7.F70. F9703 . 1Q.7.F3.  F8149.2F9070 3 0330. 1.E8-.81Q.9O/.3  709:73  <  4.907Q09    .014.920247.81Q. 1.F70.28473E 101Q089v/ .3 .2F907F8 20.10395747.  57391 . 3  F79FF9   014.5.8 3  1Q.F09F79. 342E3  1 -03 F5v/ .72.3 -0   .9E8..2 .9E8.F70.  . 2.J2~. 1472E85.7.3 -0 3 30  239 .E94O   1  F8 .8J9E8 .88.F3  003 0809-03   84714. .72.947./847 8 20J. 31472E85.3 1Q.947.8E2E7.  2E84/847 F8 . 1. 1.F3 .2F907E9.F3 .F70.3.F39  0 .3 1Q.9E8. F79FF9 #.1000909  08.  F8 1 4E8 ./-.3 .843O 2O/43 -434O/3. 1...E8 .3 1Q.F70.9:E8 5.F70. 20J.947.8 3   J.947.E84 ./:. 0/v/   2.

 ..947.3 80705v 100F8 9J5:8. .2F9070 .F70.F70. 1.9F7F85439.9-80003. 20100v .. 1Q. .  .53.2F907030 0vJ79 8070509  .. J.0099 7F8F3  F8 .3 8Q0930 20  .9:E8 5.7.F3 20J. $9.O F8 .9.7. 202O7.9:E8 5.3 1Q. 80705v30  .2F9070 F8 . .0 208~330 F903  %0E9 . 709:73E9. 8 20J.2F9070 3.947.F3 -01009F. 31472E.7.   00F80   49.O E9.8 1Q.7.8J3/.F330 30.9F7J9099100F8302 08Q8F807~03 .0 425.9O  4 .9.7.0 . 20.9E8E3.2F9070 8E2.947. 1472E8 5.88. 3F.F3 2.1. 5.     1472E8 5.9E8E3.2F907 F79FF9  0F79 9J5:8.F39J5:8E..239 E93 14:  0 1Q.F30 . 4E8 .  .9243/: 4 9--..F330 070/2F3F39 . 8J3F8030 10030 20   143948 7F809  4 . 1Q..9:E8 5.25.3 -. 1Q.F3 9J5:8.O 1Q.2F9070 930 -0  F8 E988E 0  .--./E8. 8 .88.3 009v8F  4 1Q.F39 J.E94O 99 .8J9E8-.0Q  %072F8090803 0 20J.8.E 3/70970:7O     1Q.3 .3 Q3-30  4 . F79F.. .7.F30 02E89J.43E8  4 .F3 99  23/F9 7E3-. 1472E8 5.3. . 1472E8 5.2F9070 802./E8 8025439E-O425. 4E8 .E9 8 70:7O  77.E94O./O/ .9-8000030     0v-- 5F/E-.030/30  20 239 ..92O/430/vF79F09    %072F8090803 ..     709:73:9.3 F79F 80739 979F3  --v .7. .9:E8 5. 1472E8 80705v  F8 .2030 .9.  F79 30.8J9E8.8439302.E94O 003  E7203 20100v 9J5:8 100F8 009  .:0 9F7J9.0 09 .3  !F/E: :3830/431.  F79 .2F907E9. 20J.F3E9.F39 50/ 20J.F3-039--003880705009 709:73 0347.EO/3.070/2F3 F79FF9 #.0  .9 2E8 1Q.9:E8 5.9E8 /0F3 F9030  8.:0    1Q.5E . 1472E8 5... 802F909F89 .F70.1Q.2F907 F79FF..7.7.O8: 20  4 703/70 ..81Q.F3.--.7. 2..9F7J903/v F79F 9J5:8./E83. 3    3   F79F0 07Q30 8E2J9E87.7. /0F70 302 .21F0 /:-v70  2E84. 30 30.O  ... 1472E8 5. . 8  4 802 . 1Q.88..7. F790243/.F79F0 #.2F9070 20.499 1Q.7.2F9070 00..: . 20100v .2F9070 50/ .32:89 F79F807395./E87. J.9E-. ..499 1Q.7.9:E8 8J3F80  5.9:E8 5. 32.5.. 20 0 0003  8v9  2. 20   . 709:73 :9.7.F3009  $v9  .8 393   39:3830/431   8J3F890080090-0300908J9v80705v   . . F79F.F3 .499 1Q. 8 .302 2.2F9070 .88. .  .

 0088FF9  8Q8F08  4 09 200v0 . 9J5:81Q.947.1 3 709:73 147 1 3 709:731 < 1  9.88.4/ 1Q.O1Q.   .F3J. E9903909v-- O/4 J7.O3.F3-v   009v8F .F30 ..29 F809070/2F3F39. 709:73 :9.2F9070 30.24/:E785747..7E.8.1Q.4/1Q.9.88. 1472E8*5.F3 /013J.8 .2.9:E8*5.E8E3. 0. 1472E8 5.O 1Q.7.03   /0.F003 . F8 /0.9O 20 E8/ .79.8.F3574949J5:8.2391Q.81Q.     30.F39J5:83.O.9F7F8 543949 807093F3 . 9.09 .00E7.F30-03 8 80705009 .O.88.7.E8 839.8J9E8 Q708  709:73 F39  .F3 302 0 . .7E. 302 ..O. Q3-8F09 908 0 1Q.8 84E8 30. 08090 . 302 143948  9. F5503 00 8Q8F08 31472E.2F907*89.F3J./E8    1Q..F30 0E7E84  . .9   1Q.E348839.24E8. . 5.8J9E84 709:73100F8(( <    1Q.F3/013EE8E3.. :3830/431.5080  .9F7J9803 80229.  2F0Q3  4 ..2F9070*9J5:8..8. 147/J9O 003v73 9:/.9F7J903/v 100F8 3FQ  .8.247 . 9-- ..F30. 1472E8*5.F3/0..3.F3*3F.F3/0. 9J5:81Q.0039F80  433. 0 0 . .J280739 5.O.9 9--87 0J7:  .947.7E.4/8O3.3. J.F3 /013J.3  .F308E2J9.3..F330  '..8 39   4  4 .3.O9 9.7.2.2.3 .43-.8. 0 1Q.79.88.8:5E3.1Q..7.2F907 89E3 07089Q .E9.29 0 .9J5:8. 1Q. 1Q.E-- /0.7EE8.O8J9.1Q.   4E8*/013EE84 :9.10009   1Q..2.8.7.33.  .E8:.9O   1Q.F3*3F.F310F.8.88. .9F7vF79F     .0 .2F907 E9.9F7J9.7. J. 8  4 1Q.7EE8839.20 .F3Q3 9-- 070/2F39 9F7J9803 .F3574949J5:8E3.E-. 0v30  4 302 0 :.  .77.E8839. 1Q.2F907*89.88. 99   1Q.F3*3F. 1Q.  /0 0 ..   1. 84.F330  . .

 - ..8E2J9.8070 39 39  2.   -     . 0v--4-O14O.3 ./ F79F807395. 30  0F79 .807FQ .7E.9..7E.43.  -  14200033. <     . .7. -00320  .3   39.99O  4 00 9./07 E42E34 9.0  F8  .E--20.F8 -2F.:/089/4  . F8 .F5073v3 E7.2F907E9.  - .4/.O8E-.79.:/089/4  :3830/431.2.947..949204/O5747.090v8009099./.204/E8  .8070 39  39  2. .3   .32.8 39  2.9.947.2010.3E3 4.:/089/4  .3     709:73  < :3830/431. - .O-087E8:   -0.43008 0.E.J2807395./E8  0.2E9 10.E94O9.3.7..E94. 3./ -/ .7.4/.79.9E7 1Q./E8  .2E9   '.009v10.:/0/709J.8:5E3 2E84.. .E  F8 F5503 .8070 . 0..O8J9E8 3.F39 .28070090.3..4/.2F907E9. . 57391 .. .2F907E9.79../E8  20.8Q8F080030.77.F30 /0.807FF9. 3.2..008204/E8 3.8070 39 39   39.7.8 393     <    J2807395.9.9 7:301Q. 709:73  < .O9 ./.

E94O  8070500930  803 0030.O1Q. <  4. F8 - .F8-.7..93   10.3 .008. 39.J2F9 ..3  4 .10395747.F3./4995.88. 9 F8 - 9 F79F 80739 E9.2   F8  39 5439070  239 1472E8 5..    .J2F9./34/v09 .  F8  543907030   00F80   J2 80739 E9.2F907009 .E-- -08F/08 5747.. 2:9.249  .7.J.24 39.F79FQ . 09v 1Q.4991Q.39.20J.2F9070  .O8J9499: 20 .E94O3. ..E94O . .:0    2J9099Q  4 20979F309  4 0 1Q../E8E9  4 .  09.9.47.v09 302 0 20. 4E9.E94O.F 908 ./499 5.9.32~/.8. - 5..8.. 709:73  < .F8  - .4/.J2Q090E9.38.9O20 !F/.2F907003 07089Q .88. 7. 09v . 20.8070 39  39    39./34/  J.J2807390E9.E949.J280739E9.J2009 . .807Fv/   F8  .0 - 70 143. .9. .F330  0F709v.  F8 J ..2F90789E-.O8J9. - 5.7.F3990398Q.9 . - 58..9:E85.4/8./. - .F330 .J280739 E9.E949.39 58 39 5 39 58 39 5   58.F3 20.. 57391 . ./ -/ .3-..E94O   8 849E 243/.. 1Q..F3 8E2E7.32:8 :.8070 .. 807093F/  4 .O1Q. 09F7J9030..5E 239 F79F09  0F79 .J2Q ./9: .F330 9-- 070/2F39 8 .8 .7.

F807~ 009 0v3-03 7F808J903  .--.F79002-03 4.  . :43-80 847.. :43-80 847.-.F79F807395.F0903Q   ./48  57391 //// 8:22. :43-80 847.2F907E9.8:22..9 ./E83. 0F79 3..J280739239.3.F32F.E-./48  709:73  <   'E94O0809F-03. .8439 -9438E48./48 8.7.-../E8 .7F48. 8:22.2F907E9.3 0 0v30 F8 0 E97E3.7.24 . 9.4991Q.3   39.E94O 0809F-03 .3 202O7.3.-< 2.9 .3.J280739 5.3...9 . 8./E8 E9.   .31 //  .7.2033-03 0098F08   F79F80739 5. .2F907E9.20J.2F709~ .

95439070.2:8.E94O .E.090 20 10009903 .3  2F39 .. F79FQ09 .J2F9  .8 39 53 39 5..-03.93.F3 .0.8.7 . -0 .3 50/ 2E9749 9E74:3  .9 0028E2E9 09.9 2  ( 395 396     < 2..97 ( ( .    . 302 .20 .92( ( 395 396     < 2.F807~E9. 5747. 07439.J2 80739.8474F8484548E2E98 . 20   247 .92.0947.. .9O 1Q.7. 204/E8 4E./499 E42E3-O   1Q.2:8.. .7 5439079  ./ 002F70 2:9.9- ( (    1 .2F907F39 ./. 92- 3:. 2.4/1 39 .5 6     709:73  < -  . .E-- 5F/.9 92-907Q09 .F3 807050  4 F970443 /3.F3030  . .7../E8.  950/0139.F330.1Q.4/1 . .J2 80739 8E9. 393 2..3.3   393 5 6 39.   -04.. .43.94O. 20 .47 . 3 .97-    1 ./O/3.92- 30.3  .O 1Q.1Q.( 393 14..8843-0000F88E28474.972 395 396     < 2.949  F9/203O8-./.5 6     709:73  < .3 .E94O F79F 80739 F8 . 92- .9- ( (    1 .O8E-. 393 14.0 0/203O8 92--03 703/80739 8474.0020 09.92- 23/. 3 .8.947. J.F9239. 014.3   393 5 6 39.5.7. 0 0 9E743.J280739E9. 5.E-- 5F/E 9-- 009v8F09 8 -02:9.2 ..909.43 39 .9. 0 0/39030 20 802543949 7F808J90v3-03     30..5.30.E42E330.F330.3 E9. 8E28474.0947 ( 950/0114./3.E9  803 .20 5. ( 14.4/1 39./O/ E9  .0 .E94O9  803 .4/-04. .  .949 0 .0 .J2F9  &..802 9:/.9     .5 6     709:73  <    897:.77.0..9:3E9 0  F8 F9/203O8 92-09 1Q.. 92:9.3   393 5 6 .8 1Q.0 :3439J5:8 ./E89  .F3 5./.2F907F39 . ( 14.300/203O892-9 F84.F3030    434808090-038Q8F088F. 3 .24O3.4.2F907E9.239 39 543907 .J20  0 543907  . /3.

:3. 09-- 147/J9O 0809F-03 1Q.5: .7E.. 70  9 802F909 . ..070/09...J2030 .J280739 .$%  0307089Q    J.7../E847 ./E8 F79F 80739 979F3   .3/O. .2F907E9.J280739 5.31 1 / 5.7.20009 . .E9 !F/E:..J20 F79F80739.20     !.480 1   393  . .J280739 8 F79F80739  .9:E8 5.3     .009./9:F79F80739.47 0 F55030./.. 70  %0E9 .5: 0 .E4 .3 .$9..9  .7../.F3 ..070/098 . .2F907E9.J202E84.F79 07v80-. 20J. . 8. .F3J.O 1Q.9 4 0F709v8E2:37.0Q1002-0 4.2F9070 F79FF9  . 10892F39 v7  .7. F79FF9  908 10 .31 1Q.7. ./O/3. 7  18.F  4 2.F9.E94O .         < 2.8E9.2F9070  2.3     < 39 1 114503 .33. .8E847 2F790807~03.9 .7.8 3  .31 1 / 53  5.F3 0809F-03  .F330 .   1.5: 20 003 07089Q0F709Q.2F9070 4--7O -. 70 908 10 ../9:E9.90792-30.E847 .J2009  ..J280739 5.   2E8 8025439  . E9. .J209E9. 03020039.  2F79 0 . 2E84.J230  .J2807393F 50/ .7.88:8 F79F80739 5. 39 2.7..9E.10892F30 239. $9.--.2003 .E-- 5F/E .. F79F80739 5. F79002-03  4./E847 . . .2E84.499 1Q..5..94. F79F0v/30   F8 F79F0 0--03 . 20.30.J20 F79FF9.943.F3 703/00F8F70 8070930 -4.80701Q.9:E8 5.. 5.9.7./E8.3   .2F907E9.033  4 . 9F8- 9 4E9.4. 53 8041 39 147   53   18.09v03 .7. .9.703/00Q3 010892F3 2E84.4. $9.  -0 99         .907E3.2F907E9.7./E8 20F79F80 202.2F907E9.2009 143948 1002-0 .7. 9F8 - 9   . 1472E8 5.2F907E9.5. . .J201003v  391 39 5  709:73 5 < 2. $9.9 $02F909F8Q.9:E8 5.E94O4 4E1F7Q3  /0 .4. ..8.8439 20.2F9070 .9E9 . . -04.J220703/003F3  %0E9 .J2807393F50/ ./3 F8.7. 2079 ./../E8 . 847703/-03 07Q30 10 .E94O F79FF9  0 2F 302 908 009v..

1Q. 1Q.   39  57391 5 5 53  .  . /0F70 330 F970 ..31 3.E--7.F3-0 J7E84 .4E8.9 0F7910.3 1Q.F303 J.2.. 034.F30 .8 .J2099 - .F3 4E8 .    4-E8 .E8.F30 302 9:/3. 4-E8.3     .F309422:3E.4-E8.3-.2.2F907E9.:9E3.3  .  ./.$9../. 1 ..9E7 1Q.3 1Q. 02E88.9O.93 203 8801QF80 E3.3 E7O.  4 23/03 1Q. 2.F30 803 . 147/J9E8 /v8.E94O9   1Q.88.E94O43 07089Q .2F90709 0v87.090v09J7.4E8.$9.7.  089F8 ..39.7. .7.9E8E3.E94O 0 2E8 1Q.. - 8041 39   . F9002E88. 39.F3-v 0F709v  .4/ 39.F3 0709F3 -0Q /013E:  F8 .  1Q.E94O   0// 5747.E94O.9F7J9F8 E9.F. 8. 422:3E.89 089 1Q.E-.2F9070.J20 09. - ..980203803  F8 F9030. $9.E94O. .F3J. 1Q. $9. 5747.83EE .00/F80     .F70.O8J9499: 20  !F/E:  J 422:3E9 23/03 5747./F970.3 1Q.0 .:3 J79 1.2.F330 E794. 03  4 . 2F39 .8.E94OE9./O/  4 . 7E  0 .F3:. 4E8 3F.J20     709:73 <    10395747.F5073v70    $%           . 09v1Q.9:E85.99  4-E8 3F.802. 5.39.Q /013E:  0 .F70. 1472E85.1Q.9 23/03 1Q.F3 .0 .  . .2.. -02:9.9E8E3. 8041 39  . 1033 . 070/2F3 . E9.7. 8 :9.2:3 2. :9.83E.3.9E8 /00.F3-v 302 F709v 0  --v .O9 23/0/E .F3 ..77. 4E8 .   8041 39      4-E8F84E8.E944.O-. 422:3E3  9 . 200/F80 0v99 8Q0930 20  2F .FQ.9008 5747.83E9:3  009 ..0./E8  09.F330  .3  .0.8..E94O.947./499 1Q.9 .F3 10908 .v < 2..    2.  .F70. 1 .81Q.  57391 5 5      3. 70 . 1Q.2 . 4E8 . . 3. 57391 / / / 709:73  < 1 .F309422:3EE8 1v2O/.

F3-v 302 08 0F709v . ..E3 Q3-v1Q.47  .7.~ 4-E8 .E--5F/. . 0 1Q.EJ9.F3030 00930 .F3-03 4.4--. 09v 1Q.320.E94O 2390 09. 009 .4348 30. 4E8 .3 147O 4-E8 . 4-E89  F8 J  .E94O9 /013E:3  .E94O 0 2 .3 4E8 ..E94O 2E7 F90  03 0809-03 . . .E94O   . 8O-.23/09 39.203 30.~ 4E8 .

-F8. .E94O .4-E8.

  .4/1 39 39 .

 .9939.  14.

9  .     <  391 14.

9.  399 -14. .

    1 9 . .

.     1 .  .

3   14.     <  2.99 .399 .

9  .     1 .

    91 9  .

    709:73  <  .1 -03  .7.11472E85.2F9070 4E8.

.E94O . 9 .14E8.

7.  . 11472E85.2F9070 4E81 -03  .

 9 -F8. 14E8. .E94O .

 4E8 9F8 - .

 4E8 -F84-E8. .

E94O .F89 .  9 .34E8.2.

 4-E8.F84E89 .

 4E89F8 9 .

5F/.7.7.  .F8 - 4-E8 .7. 1472E85.. 9 09.  O 1 -030F709v.239 .4E8. 4-E8.239. 4-E8-F8. 909.4E8 .  F8  1472E8 5.820J....F70.3.2F9070  ..  00F80. .4E8. F8 -  O 2.4E89 .320J.9O/.4-E8 .2F907 .7..   4...1 9F81 9 12.239.5F/E4 O 2.F98071 9  O 1 -03 0F709v ..F89 ..4-E8 . 4-E8.4E8 9 -F8 .2   .-05747..7. 4E8 9 F8 . 9F8- 909.....3 -030F709v.

14E8.  F8 20.$% 03.F3     08E24O/3.F70.  08E24O/3.11Q.F3  F970330 .$% 03.5.2F9070 .9O/.4-E8.F3.E94O9 .1.E94O    .1.101Q089v/.11Q.239.11Q.3F970330.9E8.F3  F970330 . 2.9E8.4-E8.14E8.11Q..1.F70./.2F9070 .E94OF81472E85. 149.E94O9 ...    08E24O/3..F3     08E24O/3.E94OF81472E85. F8 20.F70..3 4E89 F30F79FF9  F970330.9O/.F70.11Q.3.F3.9O/.F3  F970330.14E8..9E8.2.  F970330.2.$% 03. 30F79F09  F970330.11472E85.$% 7v.1.1 1472E8 5.2F9070  0100v/. 149.31Q.14E89 F30F8- F30F79F09  F970330.9E8.2F9070  0100v/..E94O9 .F70.7.7.14E8- F30F8. 7.2.$% 7v.34E8.5E . 4-E8. 1 1472E8 5. 101Q089v/.    0/v/.7..E94OF81472E85.F70. 7.$% 03.2.9E8.14E8. 149..7.$% 7v.F3  F970330 .2F9070.34E89 F30F79F09  F970330.14E8.31Q.14E8.F34E8.F70. 9    0/v/.F70.31Q. 147/J9E81E8E-.7.2..F3.31Q.11Q.F70.2.7. $% 03 .$% 7v. 149. F8 20.98020387v. ..14E8../.2.14E8.2.11Q.5E . .$% 7v.F3     0/v/.9E8.$% 03.101Q089v/.    08E24O/3.980203803.E94OF81472E85.E94O9 .5E .F3.2F9070  0100v/.$% 03 .    08E24O/3.9O/.7.31Q.2F9070.4-E8.9E8. 101Q089v/.9E8.F3     0/v/. 1 1472E8 5. $% 03 .E94O9 .2.$% 03.F3.E94O  0/v/.7.9E8.31Q.9E8.F70.11Q.2F9070  0100v/.E94O  0100v/.    F8 20...

2907.F370-J:     2E97 J7E8E7. 14.0F8479--099. 3  .. 3 F8 2 .31Q./.9   2.807F03/v002009  3.. 2. 7E8  847*703/00809.7.54992E9749J7:. -04.9  2./499 847 703/0F8F90489:0847*703/0081Q./499847E3. F7/F8070  0.   !747.2E970 ..3 .83EE  0F79 0009 4-E83. 4E8.F38Q8F807~03.3.80701Q.F3-03 14:3 .J..10./ .F330     703/0F80 8Q8F08 . F9/203O8 92--0 0 -04. 20309 E42E3-. 48454 8E2.F3-034/499:320     1Q.8-03   !747.F3 20 14 J.~1Q.E94O4307089Q   0..239 0 3L2 08 2E97 0020  #03/0Q Q3 Q3 .3 239 ./..8E8E9 .31Q.090vF7/F80207Q3010   9 4/:3 20 .. 847*703/0081Q.8 F8 847*703/008 1Q.E94O-.. ./. 0 1Q. 2.F3-03  F8 29 488:3 0 2E8 1Q. .2F907009.8.  . 2.2907. 0830 .8./E8 E9.F3 F79F 80739 E9.239.F39    .F3030 //23/039.F30-03     2.2F907E9. 3 .8. 0830 . 3  2 F8 .090v 10.30 .2F907 E9./E84 8Q8F08  .8. 847*703/008 1Q..9 204/E8E3E 2057O-E:3 0 0098F08 . .0090 .97 8.E94O.E94O 4E8.O-.E94O  :.0F8.7.:/089/4  393 2 .F30 0 4 . F8294-E8.2.F2033  /0 0 . 847.J7E848Q8F08F8  .3 29 .0 ..8     2E97 847.   05.E.239 .94 -04. 8474 8E2. 2E97438477O 8477.0F8    -0203v .3 1Q.97 -0 8.F330.8  7. /013E:     -04.830..008E42E3-.F330 4208479703/00     847*703/0081Q..02. ( (   .F30 9 422:3E.:8.   !747.O8J98:3 20 5./499 .3 1Q./3 0070 .0..8070 1Q.F8.9  ./499 5.O .J28073904E9.8 1Q.F39 J7:3  003.F3-03 . 2.3 1Q.8.J280739   .7.008 E42E3-.F82004E8.E94O00304-E8.2907.3. 2  .89 .8070 2~..843O2O/43. -04./:E9F79F80739 F820009.3 .. .8E84 8Q8F08  F8  .07./. :.703/0F8F08Q8F08 F8  09...30.

.2F90703 07089Q .0 .E94O4307089Q:93..888Q8F     103900 0039F9-03  2.4/..31 1  /  .. 00--03.4/-04.802E97. 20 .2.7. 703/0F8F70 ..8.480 1  < .31 1  //  3  2  147  3  147  2  18.4/.480 1  < .4/7.8  709:73  < .3.10.4/7.8070 39 5 39 5  39. 847*703/008 5.3  39 -04.   .8.0.O -04. 4  0F79 0.E348.97     147  3   147  2  157391 1  / ..8  39  1 114503 2..2.8  .F3 302 0330 .(( . 5 5 5 5.((. -04..  !F/E: .4E3 0 2 0F8 .8070 39 39  2. <  10395747. 703/003/v 847 3/0F9  0F79 ../.8070 ..F304-E8.2907. 92- -E720 847E3.1Q.8  39  1 114503 2. .3077033.8 F807708Q8F8.8  147  3  847*703/008   7.((  < .E94O-.((  157391 1  3  < 1.5...8 1Q.9-.97 -0  7  18.4/847*703/008 39  .4/847*703/008 39  39  147  2   147  2  1 .0F83/4E8.8E8E7.9.((  1.8.3    . ..8  .F8-F E9.((  . 5 847  6 4845 F8 - 0020 .8.4/-04./.

3  7  18.8 39 39 39  ( .((  1. 5.8..8 39 53 39 52 39 .2F907E9. 57409 1Q.  7.. 5747.9 .243 9.4/-04.E8-.8.  $Q8F9003 099 .8.F3302.83E. F3020830 9~3  E9.7  . 8473/009 ..8.3 8Q8F0  0 0039F9-03 .7.31 1  /  . 0 .42.9  43000323/031Q.O:84 .42.F30 E7O.47.O 20.  F8  .92:3E.F3  .E94OE9 07439499.3  39  1 114503 .7E: .8 39 39 39  ( .8 3  2 ..10..3    147  3   147  2  157391 1  / .9 8 2.. .4/7.F3-03Q3/0.3 1Q.83E..  2. F79FF70 .  4 90088F0 07QF . /013E9:3 .97   709:73  < .24O .4/7.E-.3 F79F08J909v  %4.J9E8E4 .8.9..E-. 574090 .8070 1Q.50..9204/E8. 4-E8 .200 -E720 .2F90789E3 07089Q 422:3E3.42.O8J9E8E7. 14.8 3 2 .009  .847*703/0081Q.:8.5. 5.43. 2.8..090F8F5503  -E7 .002070.31 1  // 53 52  147   53  147   52  18.:7.   .8070 39 39  2.43.97 -0  147  3  847*703/008  2 .  2..E94O3FQ   3. F3002-v -E8. 847*703/008 1Q.3  4-E83. ( (  -04.4-E8. .9.7 .42.92:3..2.:/089/4  .4E8.31Q.8.480 1  < . 4-E8 ./.0  4 ../E89 F8 .7 .10.F3009 J7:3  .((  157391 1  3    .43.8 393 392 39 ./3 .E94O.3:O3.09003E9.E--E 10F8J9 3.E3E . .807FF8Q    .3  39  1 114503 .  . ..  ( .  5747.  ( .F330  803 ....J2 80739 E9.3  393 2 .83E3. 4E8 .F3    . .E94O .5.3 07Q03/v  F807~ 0v3-0 003 .4/847*703/008 39 39 39( (  .9  $v9 008 50/.7  . F8..9E9   0 0F88F08 5747.E94O .4/.24O 89J:8 ..20 9--0 99 .  4 4.E94O..7.38Q8F0.4/-04.E94O.

J2 80739 0099 E9.    8243/.9:-.< 1.F3 39 ./E8 E9. 2.E94O.949 8 489. 3 8041 39 709:7395 <  4.-03 .8 1Q.9: 01Q. .J280739. . E9-4.7.30.239 02J9099Q ./E8E9  2079  .8F8847*703/0F81Q.2./E8.. <  00F800032E84/204/E84    -04.2F907E9.9 803..8.J2 80739 .3 807093F3 009 14.93E3 4.F3 2489 2E7 .92-. -04.. .. -04.83E.8 0330 0 2E97 .E9   7.4/.8070 .F330   09704* 03002~0/203O8 399J5:892-94F970  39 09704* 393   39 95 95 39 2..8 F8 847*703/008 1Q.9O. 3  2 F8 .8. 7.F330 3. 10./.3 0 92-30  09 .90.31Q.. .8.F3. 2E8099v30. 5 5 5 5./..8E9.4/..49 3 F8 2 F79F80739E9.4.E9 3 F9  2 F9F8 ..2E84.  &./O/3.-04. /3.~ 202O7.F30708     -04.F900803 25.  -E7203 30.((.8.(( .8E800-0009920979F303F8302.J280739 5.8:5E3 3F8 2F79FF9.   .  F79 302 0099 Q3 003 .O E9.30.4/847*703/008 39 392 39.2:8. .8E8E7.09704* 3 .( (  39  147  2   147  2  1 .((  .E94O-.3. 92- .3. .F30 0809F-03 0F8F08 .9././3:3 .((  < .8 1Q..8 1Q.8070 39 5 39 5  39.~ E42E3-O  -E7203 30.480 1  < .10391Q. .F3 703/00F8F70  2J .E3 .

..92- /002F70.( .94E8.O..

3 0 3 002~ 14.9 543907 92-9 4 F970  .9 95539   .9 92-702:9. 009 !43948.99J5:892-30 14.--.9 09704* 393 392   14.2030 23/03 0020 0 2 002~ 14.9  14.   09704*  0 32 08 14.

9 2.9 - -0974* 3 2 .4.9 2.0 14. 2 8041 14.09704*80J98FF. 3 8041 14..9  709:73955 < F9/203O892-F9704E8.4.955 14.9  147  3  955( 14.

92-  /847E3.  /0020 . -(( .

 <    Q.F35439079 !F/E:J 39 15 .O 391 .7 14. 5.2F907~39 1Q. .7E.47 0 2.  !F/. 950/0114.39 .95..F3  19J5:8.E-- 1Q.9   15 . .  2J .3  ./.F3/0..E-.0J7. 1Q.F3 543907 9J5:83.F3 543907  159J5:8.83E.9:3 0 1Q. .  .7 14..090v1Q.  :9.. .9 .95. 0F803 543948.7.88. 30..0J7.7(  950/0139 '*!%#*%!  39 39  '*%!1:.09 . .8J9E88..7. ..9F7F8 F79FF30 9J5:8E9 F79099Q  43-.7:3 033  .9   950/01 09 .F39J5:83.2F90708E2E9F89J5:8E98   003.7.. 1700 .F3 ..9'*%! /4:-0 39 ...// - 97F8F9 .393   39 147  3 1700 -(  1700 .3/013E:301Q.7F814. 2F .4/9474* 14..F3 9J5:8.7 14.7F8 14.2F907~39 1Q.20 .99 0// .9   4.. 39 .O8J.7 14.F35439070    1Q... 14. . 92- 9709v .9   1 ..

O 5749495:8 .7E.F3/0. 1Q.

 '*!%#*%!1*597 .

F3543907/013EE8 . 1Q.

     .

383. .38F39 81014.E7.9  %0E9 1 0 39 ...3 39.F330 ..9.9O ..8903909v F79.    . 1Q.9-   1 .94E84 8 003F79F~0    11Q.20 2..9   .. ..7 14.7.090v2O/44300920J..9  9J5:8 1Q. .2070 2:9. -E720 .0 .9O .F3 543907 1014. 15 F8 15 . 09v 1Q.F3 30.F3 9J5:8 543907 4389. 1Q.  4 -E720 1Q. 30.7 F8 39 5.33.F3 .. .5.F3 543907 4389.J2F9  !F/E: 15 1 000.038 151   F702 2E8 4/. 1Q.2F907~ 39 1Q. .0 1.7.14.0F39  .F39.109.F370 2:9.94E84003F79F~0   15 543907 20.          15 1 .

. .88:81472.

 .

F3 2395439070307089Q .30. .

 .

54390703 23930.F307089Q .

    . . .

5439070307089Q .

   15 ./E8./. 20 O/E3.F3 9J5:8. 1Q. .F35439070 302 .F3543907070 302 F7.9O  02E8-O     Q.79209. . .2F907F39.  .4348 9J5:8 1Q.OE9.1Q.F35./.J2. ./.F330  1Q.J280739979F3   0.F3080 .9E74.99J5:84.20703/0 092-002091Q0903Q 009J5:8E9O  04/E8   .F3E9..9O 4E 0 0F8 8E2  .F35439070 302 .F39 .9 7:3 0 4..2F709F9  0F79 .7. 0039F9-03  302 .0090 !F/E: 0 1Q. 202O7.43.0 0 1Q. 2~. .3703/0v1Q./E823/.    00F8 O .

25 .F39 14.9*.:/08/9-  3.9 5 709:73  0801  14.4/ 5  1  14.4/ 5  709:73  39 5   39 5<  3914.4/  39 .F330   703/0v 1Q.2.4/8479 .F39  .4/ 5 .4/ .843J9O 3.  5  5 5.843J9O 1Q.53  F79  4 .:/08973  3939*.843J9O 1Q./ E9.0 . 703/0v 1Q.F3 5.4389./:3 .9 5  14.4/ 5 . 3937 3980 39 5*..9 5  14.2F907F39 .4389.J2F9  002030 8E2E9 F8 2F709F9  . 80 .4/ .4/ 5. 703/0F80 8Q8F08 880.2009 2.4389.239 ..4389. 92- .25 .9 5 709:73  080709:73<   . 20. J7:3 0 880.7.843J9E8 9J5:81Qv  0F79 23/03 9J5:87.4.4389. Q3-v 880.4389. .25 . 880.

.-09903 . .0/0780705F914.

25 5 5     202. 80   < < < 1700 5.. 5 80   202.  < 2.37   . 147  5.5 5 5 80   202.5 5.7 5 80   1 5*..3  ..7 5 80   147   5 .7 5 8037 .5 5 5.

9499.4700.79.92-03002~398474..090vF5503703/009v.2. -50/02002~ 14.F330  . 84791Q.949 . ..9 8474..

25  8479 .9*.F3 3.25 . 1Q. 0030  .F3 !74949J5:8.3/O 0020 .843O.~ .25  709:73  < 1Q. 880.4/ 942-*.2   39002*8.3 F90 68479 30..2   39002*20709   39 .4389.843J9.E9. 3 8041 39 39*.4348 9J5:8.4/68479 .J209 239 .9 14.2 8041 14.4/    .F30 .9F43 92-703/0v 1Q.9E7E-. 8479 .:3J798479574949J5:8E4  .53   00F8 O   30.4/ .4/ 54390700914E20.4389.

.7.3   4880              .239 2.7.33 5.F30-0370   437F95F/E314:-02:9.9 7:3 0 4880 30. 880.47./.9:E8 5. 8.9E71Q. 20J.9309.49 0 002.F5073v70   48801Q.F30330 ..9O  ..3.8 ./. .F395F/E: .43E8: 23/ :./.3 2.-3. 880.200 -E7203  5.2F9078E21Q.3/O 8E2E9 .O8 8E24  F8 J7.7. 57391F8 .31  .20 5.2F9070 8E2.1472E8 F8 .3 0 /.9 .3 3. 20 0 0003   802F909F8Q3-03 8 0 9Q7v/99 .7.7.:.F300 239 . 009 .F3489E9   0. ...  'E94O5.2F9078E22.E94O 5..E3 80705v0 ..3 8Q8F .5.2F9078E21Q.  .. 4.2F907F39 20.F30   0// J79 1Q.9: 20 9072F80908309~38  8. .E.7.~ 1Q.9 .F39  .7. 0E98E8E4  0 E9 2 .9 243/9: 4..E--2O/443807093F320J. 88009.33 8J3F870 .2F90770J.Q30081Q.3/O.

.F5073v320003  .

 4880       .

.F5073v320003  .

3979F30031Q.0/013EE8. 09.4/4880 393    . .7EE8.F3/0. 709:73  <  4.

7E. /0.O .

4/4880 393    . .

O . /013J.

147/J9O9     :.310809F-03. 1Q.  /4:-0 5 8  5 /4:-0 3   147 33   8  55 < 57391  13 8  < 00F80   0..F3 /0.7EE8.2F907 .090030  .O9 0 9.2F907030 :9  :.2F9070 5F/E: 20243/. 57391F8.E-- 0 1 5.F7908J9Q7O:.7.7. 8..0 8E2: F8 9J5:8: 82070903 .7.E94O 5.7.2:9.2F9070 .200 .2. .20. 2000330 . 5...38 00 0003/v 31472E.7..7.2F90770 0 703/00030 .2F9077v   4880 1Q.7.7.15.F308 !F/E:.2F9070  .47 0F79    .3. 1 5.  E3 /4:-0 5.09 2F 4880  0 10009903    . 1 5. 302  .1472EO8477.4389 . .9    4 .2F9070 :9E3 0 .79.7 9J5:8543907 .F3 3 5.7.880705 . 9-- 5.2F9078E2 1Q.

 202O7.9E8.F3 147 .2F907009 ./07 E42E3-.3 880. 94.5/4:-05439079    %0E9 .10391Q.7.E-- 5.2F9070 80J9030 . 70080-03 0830 09E74. 1 5.- /4:-0 F79F09  . 0 5.7  .7.8.F3 .7O:     48801Q.7.9O  20.2F9070 0F709v  0F79 3303 20.31 F8 . 57391 1472EO847E-O 302. $v994.:9E3 0/v/ .7.F330   $% 03 00 .200.2F907 E9.E--3.33.2F9078E21Q.. 3 /. 202O7E-.E--31472E.:8E-.9E74E8E-.J270EJ9499:. 1Q.093 09. E9 .$% 03   F302080--F9009. .7  0..F30 /0.3 F7Q 0 0009 .2F9070  F8 4 E3.3  .E94O5.0 .3  4 4 .*89..E.80J98FQ0 .7.7.E-- 5. 2E8  . 5. 9--0 .7.F3.F3-03 2F0Q3  4 5. 20. 1Q.E-- 5.O .8    4./E847 .7. 94.7E..*. .7.4.  4 -0100v/ .0903 ./: . 89/.2F907  .3. /0F3  . 94. :948O 1 5..9E74...9E7 1Q.4/4880 393    .39..33.F30 .2F90708E2. 1Q.79  . $% 03 07089Q .F30J7E8E9.O9847/4.33.9J5:8..302.9O .2F907 :9E3  770 ./O/3.7.8.. 1 5. F79F0 02E8 :9E3 202O7.93./4:-0 880..9 .F70./O   8.7.2F9070 F79F0 .*03/  03 1Q.9O  4 0/v/30 .

O . /013J.

5439079    ..7597  57391  13 8  <    00F80   .*89.7. 89/.  039J5:85439079/013E9:3 .-948J9. :948O 1 5.E8.*.7.J27v F8F5909 9J5:839 .*89. .. .*03/ .7597 3  147 33    /.7597 ..2F90770    . 3  ..9O9J5:8  .20 .79 .*89..79 7EEJ9.*89 0 2:9../4999J5:8F79F09 0030809-03 /4:-0 9 .7597 /4:-0  8 / < ...7 4.3 /013E..  /4:-0/ 8  ..7  E42E3-. ..2F9079 003 0809-03 .*...7 .7597 9 . .$%7043897:EE8E9      .. .09v08v5.8 0.3 .7597 9    .*03/20J.7597 .

 10.7*597 39 -70.7.7 -70.907E3.7 ..3   .7 39  43 14.7*597  < 2.7*597 43   080   57391 1 ../O/3.9J5:8F79F009 .7 .9/  257391 .20 F508 J73 .80 1 57391 1 . . E9  .7 18    .F39  ..*... ..9  7:3 0 257391 30. 57391 09   3.7  3. .*./    .2F9078E2 1Q.  43-14.. 14.../O/3.9070  1Q0903Q . .E94O 5.*03/ .80 .2.7 .7*597 39 -70. 57391 ..7.3/3/313138  ..7*597 /4:-0  < 18  < 0805:9. .4389.80 / 57391 / .7*597 ..843OF5503 .7 .7*597 .7*597 18  0 18   1 18    18  89.*89. .83E.. .4/257391 .9-9E8 F7/0F-03  .7..  .*.07O..384 . . 18   .:/089/4  ..80  18  1 18 /  57391 / .~ .O 425.*.*.9 /4:-0F8..7 .9 4 /4:-0 F39..*89.0807~8F 0/.80 8 57391 8 .7 .*.7./..7*597 /4:-0 -70.E94O  39 F39 .FF7920030/Q 4...  709:73  <  002  7F0-- .79 .99O  4 4389.:/089/..E9        .7 18 18 < < .

 .8847.2F907009 .8 03  F8 0009 30.9F88E2:.F5073v3.E-- 0 85.2F9070 80J98FF. 2.3 9039.907E3.9  ..9  2.7*. 08090 ..7:2039:248E2. .9F7J9099 F79F09  /.O8 703/807 .8847.3 39.31Q.7:2039:248E2E99.7. 4790/45747. 5747.   . 9089 .205439070099.F9 /0 3020-0J73   4.2:3.0  239 .7.(   00F80   09F900.F330  .3.3 -0F50Q . .7543907 92. / ./.O8 703/807 .7. 4389.3 1Q. .F3 20J. 2.9 2. 2.F9 F8 03907 9 Q9Q3    5747.2*30. 5747.09 .. 2.  247 5.  !.F7/F8J.3. 9.E.2F9070   0207Q.47 E9. 4507E.2:3.7:2039:24 .2 30.2.F3 F9 5.3  .79.5.7.23.7.7:2039:248E2./:  .2.E-. 5747. 5747.8847-O 3/J9: 0 . 4507E. 2.3 .- . .209078 .7.7:2039:283 709:73  < .7.E--5747.20 20.7.O8703/807 803 . 30..3 1Q.0   08v 5.7:2039:243.5.8847.F394507E.23/J9E8839.0Q5.23/J9E8342E3 .8847.7:2039:2/4   ..9 0 E9 5.090v00320 . .  73009-v 3/J9: .7*   .7.7:2039:24790  .7.3F709Q0.38410F   .F5073v70.0909 5.7.7:2039:24  $v9 2.-. .7:2039:24 ..7:2039:24./3 147  .8847. . 5.7. 30.43-. 2E84/50/ 0 .3.2.9 0. 5747. .0 8  .7.7.88.31Q.3.E8.7:2039:2.(   39 57391 .7.2 03/J9E8E9  &.  .9  .0  4 5747.5.7:2039:2   .7.8.47 . .  .8.3.  .2:33..7.3 1Q.2J7.-.89: 0 02E89O   5747. 30.  57391 / .3. . 5.2.31Q.0 0  .8847-O 5747.F3-03.7.9O 20 .7 .7:2039:24..3 E9.7:2039:24.2F907 39 9J5:8 F8 .10FQ 239.E.79.7.F35. 0039 . ...7:20398 5E7-08F/.20.2 30.7*3  .3.2.3. 9089 .5.7:2039:29089  .2F9070 ..F9 .E3.

O-0E7E8E.7.4:3907  F8 . ( - ( ( 1  114503 .9E87O . 709:73 < 18.  302 0 . .2F7090 709:73 < 147  3  1 .83E3 -E700.7.F3 32.7.9 /499F9-020309E42E3003002~8E28474..247 0 1Q.7.8847-. 5.3/70970:7O7O.7.947 5.5..9 8 9.0F80    .7.F39 . -.20.0 ..838 .F30  #0:7.(  1.7. 2.31   /  2  147  2  147  2    18.8 009 20/:5E3 ..E3..8.009 .47 -08FQ3 ./.3 1Q.7 ..7:2039 .F330 5.31 1  /  3  147  3   18.1Q.7 .47. 09 .088QE9  2.  %072F8090803 302 900v .0  0F79 .3./:3 E9 ..2F90730.(  7  5:98 -.9:8.7:2039:243 07089Q  .    ... 00 0F7F8 :9.79.    1   39  3 2 ..7:2039 . .7. 709:73 < 1  14503 ..2084499030.9O.3 20979F3.2. 0 .. . /709 70:7O  .(-((  709:73 < 5:98 02u % 5:98 u %  709:73  <    #0:7J. 2E97 1vE9OE3..949 .:942. 20J.v9 .3.480 1  18.E9 J..3  803 0 . 20 370:7O . 0 1Q.7.(  7  5:98 -.7.7.7 543907 92- 30.5. 8E28474.09v03 0 .. -020309E42E3430..7.7.2F907E9.2E850/0 3 L3 2F709~ 2E9749 9.0 908 20  .4348 0 .3.3 E42E330..009.8847 . .480   1 32  5:98 029.3 39.09. .9E320J.095../E847   0.8847-O .31   /  -((  1.2.31 1  /  .7.7  9J5:8  F8J8/013E.10397v0100 .3..79..38O    .  03v7Q  4 .0.9 .

43.4/1..9E9 . 393   1 3 3 709:733 080709:731-43.8090 #0:7O 0807~03 F8 F7/00803  .32:8E9 99.5-...9.J209 .0 .02.1Q0F-0320. .8:5E3F95F/E307089Q2:9.090v .. 3  1-43. 7F8090803 -02:9.942-0   391-43.200/E.3003920 F8 . . 39  ...70:7O20. 3   <  950/01...

1Q. .F309J5:8. .

1. 1.*.1.*- .

 . .1Q.F30574949J5:8.

*. 39      1  1.*.. .4/1.

*.88.20.F39 .0QE9     00908J98/  ./E8 89-  3/03 10. 1Q.3.802  3.F30 20907./.    709:73  < .5.20-0330207Q8470090325..  F99072F809088E23.5499 .94 08 10.20.8E200   . 8E20009  F8 .E9 4703/0. 3:.07O7. 2..  9072F809088E27O0/39 457J2 0 ..2.39      1  1.94 0809F-03 8Q8F08 009 .03.9E74.7.147/J9499E9 . .<    7:31Q.3. - ..9E74.88.     < .0F80  !F/E: 2 0030 .  709:73.E42E330.:/089/4   43.7.9F7J9 . 979 8E2008E2E9 1  9072F809088E249.3 .2 003 . 9072F809088E23.7..J9.080--89--878F9 0  9072F80908 8E2-O 97 .       <  9~9910.0095.9..2.3 979F303 . F7/v0009   4 839.9-.2F907F39.2. 5.2F9070  4.99J5:8 43./..7.3   57391 1 .8847-O. 5.4--8489OE9 /  F99072F809088E23.2F907E9.*.9F7J9.3  .9.4/1./.00030. 008  2Q/vF508 5747.20. .2033-0307708Q8F.

-O 0 .8-0 .7.205.2F907F39 20.7.2.9   703/0 E9  4 .9  09.54342F7F9F9..3 F9704 5.F39    7:3 4.F39  .7.7.907E3.49  .9822097:8E9 ..9F7J9.907E3.J2F9 5.2F907F39 20./499 3907.J2F9    7:3 1Q.907E3..F39  .7.-09~99./5.E74830.2:8.9-.2F907F39.7.:2-O 2..88.2F907F39 20./499003    7:3 1Q. 5.F3009 .7.F0903 0F800 0 5.0 4845  10.F847703/-03  /499 3 802F 30.2F907F39 20.F3.O8J9E20 89703 897./.0.9 897.5499F79F09.2:8.200.0020:948O8E20080739  /  970.25 897.88.20 5.2F907F3920.F39  .9    7:31Q. -0330 9E749 8E28474...F39 . 1  8E24.F9 ..200 F9 2E973.F39    .E748  :9.3 0 4.2030.200 5.33.843J9O1Q.  8E2  0 8.30.7./. -087E8E9 0 2E8 .703/00998E28474.2:8..5 . F9.7.3 .843J9O1Q.3 F9704 0 4.3/7428EE9  E3 802F .5 0 5434249 F8 0 F79F09  F8 .49F80/39 402E8.9079   7:3 1Q.2F907F39 20.20 97 0 .2F907F39.3 0708v 1Q.807FF8F0.9E9   7:3 1Q.E--3.9 E3.7.:9.3.907E3.20 0 2E97 847.7.3/742 0 .20 -E7203 9J5:8 92--03 200708 0 00209 5.3  '.9F7J9.E-F./499 07v  .7.F39    7:3 1Q.2F907F39 20.20 /3.7.  7:3 1Q./499 2F709~ 0/203O8 92-9  1099 ..49F80/395.v 0020 3.2F907F39 20. 1vE9O3 F.0147/J9499./48F82.J2F9    7:3 1Q.F39  ./499 8E2 .3 F9704 5.7.9E74E .5430880.F39  .5430880.90020308E2E9 F8 ..79.   7:3 1Q.92-.72.v 847703/-03 0030  F9 847  09.F3009  .3802F ./499070    7:3 1Q.20 .703/00998E28474.0.703/00998E28474.8E28474.0.F39  .F0903 0F800 0 5.F0F80009-08:7..20 /3.72..5499F79F09.9E71Q.7.7./499 3907.9-O 0  -0870.88.F39  . .F39  ./F543424.F330 003v7/08E27O 457J2 0    7:3 4.2F907F39.8E28474.20 /3.5.7..7.907E3.880 Q3-8F 847.F330003v7/. F9 5434249  F8 20.-.v847703/-03. 0 92- .20 .947.94.20 20. 20.7.900203.7.O8J9.9F7J9 -E7203 9J5:8 92- 080-- 002F30.8E28474.88.7.83E:380F/1Q.907E3.9E74E. 880F9  Q3-8FF9 847.7 897897   7:3 1Q.E91Q. 0 .J20 ./5.0 F8 .9-.20 5.  703/0.99 1Q.F39  .J2F9 F8 .008 E42E3-.:2-O 2.3 0708v 1Q.9F7J9.22E 0   7:38.0 4845.  0..907E3. 0 . 57J2 8E2 .0.F39  .34E-F. 1Q.F3009  . F50.F3009.5 897.2F907F39.  003v7 4.7.53./499 2F709~ F9/203O8 92-9  1099 .92-.

 .F0  2.7.8 -0 .F39    7:3 1Q.J2  8Q09F8 /E9:2 .2F907F39 .F39  . .  8Q09F8 /E9:2  7:  .0 .:948O38E249147/J9499847703/-03    7:370:7J.  8E20030880F9 .9E74.4--002054J.. 0 5.907E3. -04.  002030880F9 .28. 3F.79E8.F39  .7..-04.F39 . 3 802F .9./.20009 0 897:. 080--0020F79FF9 .1Q.9549J.9./.F0 2.2. 0 8E28474.F393FE39J5:87.5E7.OE9 /  549J.9E74.20 20.20 J7.843J9O1Q.1Q.9147/J9499847703/-03    7:370:7J.E748 8Q09F8F.08E28474.  0/39 49.9./J7.9E74.200F88E24.:20.8E84F8J7E848.F39  .9 .9.9 4 ..-04. ...5499 9072F809088E2 .7.  ..-04.83E:31Q.20 0 -3E78 8E28474..9..5430880.8E8 847703/F-03 F8. -04.20 J7. 8Q09F8/E9:2   /499.1Q.080--8E20F9 1  .F39 .38478E28..950/.79.  ..E:.F39  . 3F..9147/J9499847703/-03    .9  68479 . 1Q..311Q.9 00209 147/J9499 847703/-03    7:370:7J.9 4.1Q.4--8E20F9   .E748  8Q09F8 F.543907009 68479 .803v847703/-030030  /499.20 0F8 8E24. 3802F .30.54998E28474.8E8 847703/F-03 ..F39    7:20.98474.5E7.00808E2. 088E2008E2E9 0  .9 543907 9J5:8 92- 00209 EJ98: 7E . 20.. 0 88E2009 /  20.9 .20 -E7203 9J5:8 2E97 00209 703/0 8471494348 -0E7E880739 5.J2099 897:.8-03:.    7:3 70:7J. 703/0099.79. #03/0Q 68479 .99J5:8 92--03 9E74:3   897:. 897:.090v 20v 80739 3F.03. . 1Q.F39  3:.20-087O703/0F880703/008E28474.5E7488478E2.3 8478E2.147/J9499E9   7:370:7J.J2  8Q09F8 /E9:2  #03/0Q .9   4 .43 J7:3 0 03 -04.8O 1Q.2.93.949    7:3 70:7J.1Q.F39 ..5E7.9.090v79F7:24807393F.3 0030v0809-03    7:370:7J.2F907F39.8E8147/J9499847703/F-03    7:3 70:7J./.9 ./ J7..0020308E2E9 0  9../...94.00209. 1Q. 8E20030847. 0 F9/203O8 92- 847.  . 1Q.8E8847703/F-03 F8.9J..E:.9 92-002070 #03/0Q. 05E74800209   7:3 70:7J.E9.79E8E9 5. 5. .9E74. 08v 4845 0020 .F39  ..2F907F39.. .F39 20.F39 .7.05.20J7..  03.9E9 .94.5E7488478E2.

88080098F082O/43    7:3 70:7J.    9 J7  . 8801F8Qv .94..9E7 1Q.3802F. 802F009 .F39 6:.009F3F.9.9F7J9.807393.1Q. 8Q09F8/E9:2 F.   . 43.4.F39  .  709:73  <  8. 1Q.3.9E74:20.99 . 11 .89.20.9 .4792:87. 897.F3 543907 92-9  ...F39 6:.5 5.99E7428F-03 .802F009.  .20./.9F7J9.880F9  .J2 .F3070 2:9.88..  $E24:20..949J7:020309E42E3-.20 0020 .3 014./.7.F39.992--0  .249 .9490/3. #03/0Q 68479 .3FQ . #03/0Q 68479 .4. 709:731 .  .-4 0 F8 F9 2F907087:/.20 20v 80739  .F03.3/742  8.008E42E3-O4. 08.20 0 3 2F907 488 7:/.2:8.1000909   /499.008E42E3-.E-- 5747.8 .7. 3 0/1-43.  /4993  09.E748 :9. 709:731 .3. 20v 80739 880.992--0  . 703/0v 1Q. 57391 /3/3/3/ 1 ..9E7 1Q. E8/ . 1Q. < 2.0.  .9 2E971vE9O.7. .. $E24: 20 .E.9E3...1vE9O.v 847703/-030030703/00998E28474.  .F39 .9 .20Q3-v8E24E82Q. 8479  .84:3  4 01:99.8E248E200847.9.249  391 39.8E24.9 92--03 9E74: 0  7 0 4.25 3.3 1Q.  3  F79FF9    7:3 70:7J.2F907F39  ..8E24.803v 847703/-030030703/00998E28474.3  9.F3    7:370:7J.9490/3.27F809 ..8:303002~0F88E28474.0 F89001438E2.9 48E200847. E8E2  75747.99O1Qv032031Q.9 0 33 2F709~ F9/203O8 897:.8E249    7:370:7J.3:O .20 :.F39  F8 F8J98Q3 0 1Q. 709:73 .E4. 709:73 .5 3.9.F9/203O892--03 09E749897:.3:O 30.. 20 239 .2:8. 9001438E2.843J9O 1Q.9. 1vE9O . 5.30 .   .8:303002~0F88E28474.88.30.3   39. < 39 39. E8/ .93E3 ..F39  .03F8. 8479  . 68479 3.5 . 070893F.  7:3 70:7J. 703/0v 1Q.9 .83E: .1Q.F39 .0 3 39.949J7:020309E42E3-.008E42E3-O4..F39 .4792:87. .O8J9.8E24080--8E20030..9O.3 703/0.3 014.9 4080--8E20080739.E.20203~-v.9E74:20.9 10/.1000909    7:3 70:7J.88.880F9  .99  . 5747./.9E8 . < 39 39 .< 3911 39 .0090099:/.. 8F9.  .

4348 .~.731. 08v00280739 ./.0  ..880803E3. 03v7Q 4.3:O ..9 92--039E74:0  704.3:O 30.00830.903002~0/203O8897:.3802F.5E.55.F03 . E3.  7:02E8E42E3-..0  68479  .31Q.  03v7Q 4.20-E7200029J5:8F80028E292-002098F9. F8 00 0708930.3FQ 4703/03F.008 E42E3-.0 F8 9001438E2. 0 8.3     .73..90708E280739.9443 ../.30.F39  .0F8 .99O1Qv032031Q.  F8J9889..3 04./.73.0.989E9 4. 0708930.0 3 9.F39.20 Q3-v 0037F8 2Q.3 .v847703/-03.0.73 .30. 070.3   9.0708930.5.3 04.9.3802F.803v847703/-0 703/0.1vE9O10099 .009F30. 8E2003.5E3.1vE9O10099 . /499 3  09.008 E42E3-.2F907F39  .0902E89   701Q.9.009009 9:/ .F39 .92-9   /499 0 8. 0/203O8 92--03 09E749 .9.7.9001438E2.3 3 .0  0700 8E2.. .E4.

:/0F8./  F 23/03 $0v870.3.2.9:3  239 .2-..3 .E  0 .E--5F/E-O/07Q 4. 5747.  .8.F  8O3.O90.3843.9   /0130 /0130 /0130 /0130 /0130 /0130 /0130 /0130 /0130 /0130  $ %#& $ $ -44 &  &  ## &#  &$     %#& 39     &  ##  &#  &    00F80    08v E742 5F/E-.2J ./23/03 %#&0.548.E 5F/E: .20 09 .3.  .83E.OE9903909v5747. 570574. /0130 /709J. 33./:34389.--.8 2E7 .9.    . 9.0  F79  4 Q3.0099 .9:3 0  .83E:  430.839.2-.29 0:9E3 9072F8090803 F55 .82-O:2/013J.0Q39J5:84.084E8J73   0v10/44E8 9--0 99 .3.3 .. /0130  . 0v10/44O E9.09. %#& 80J98FF.  E9.202E70807009908J9.F099   . 4.3 ...E.249807093F3J73     $ 9 .83E9 .0099 2~./0130/709J.8.8E.90770 0/v/30  03 /709J.  30.7O   247147/J9:305747.3 /013E9 82-O:249  .  .E.--./499 847-.E 2.24 00F3 20003v  30.9 4.807Fv/  70    E7 . 570425EE83.0 /013E9:  0F79 099v8 009908J9F880 .F900370:7O007QF80.14:3.E-...  8 30.E930.. 5747.090v-03. 2.3 .7.9078474.7.83E....2 1477E8O/E3.E.83E9: .-03 33.807F . 47E--..--O E  4 .3 80705v 82-4:8 4389.99.009   0v10/44O3.32082070/3   .. -44 9  . 23/03 847E9  4 9..3847. .4348J9O9O  .807Fv/ %#& 7. 5747.3.249 . .  .3 82-O:2 .200092E7.8 05. 9J5:8  2 F9704. 8390 23/03  5747.9E3. /013082-4:2009908J903/v*8.77.0099 /709J.7.58O9  .-09~.// 82F9v/ .E  . 0 .08847  .79.3 . 82-O:24. 009908J903/v . .8O80739147/J9E89 425EE89 703/80739 200v  0 0v10/44E83.8:5.38Q8F.

47 &$ 08v F5F8-03  302 &  ##  &  7.4&$ 9. 18008 E7O0009 0.    .090vF550314.E7.384.7.7.009908J903/v5.E39   0099  9 070/2F303023/03Q99 . .807Fv/30.1008008E7O00-.--.2F907070   !F/E:.9O  .E8. .7.O-. Q3-v -~.F70.F/03 .8.0 0E9.0009908J9F87v .83E.F/v E7O0009 0. 008 .58O 00 .O. 302 . .53.9E8. 009908J9v 100F89 143948 E7O000.43-.83E9 907Q09F9 2:9..9:   .3 .-01472E8. -.4389.270 3..9  3F.807Fv/30 0  ..83E9:3033F.302 &  ##  &  7.9     :948O F9 5F/E-O .9E..2 .43 4/. .E8.1.        2..43.E48.E8-0.9 8 020  4 302.:3 F-070  2.7. 07Q 239.1.3 .1.1.302.  ..--E9F.7. E98O.02O/48J9E8:.3 .O . /013J.F070/2F3F39 .47.7O009v.2F9070098   .7OJ.2F90700.3 8O  .1.-8    :9.9O/3  F5F8:9E3 .380705v100F8009E10E7O00Q   2. . .0.82-O:23E8-09~9     94.E3920F.0009908J9F85. F7/0F-03. 010Q3  . 84: 20 4. 8 /07Q  203 143948 802 0v99 9.7OJ.2F907009v003 !F/E /0130 /0130 /0130 .F908 4. 9.2. ..O 009908J9v 7F8F-03 .807Fv/.J./013.9:.83E.3E3  .9: . .9:E85.070/09 39 09 803 8 .33. 3009           .83E9:3    .7.9F82033J9.           1039 5F/E . /0130 /013J.  .77.384E8..807Fv/ 0  /0 .E84F9F5F8-03.. .E94O 80705F9 4--. J. 0 070 ~9Q 880  .E-- /013J.79.3 /42-47J9.-8   23 .F70   0.               F5F8:9E3 .3  4 8... . .47.9E -0 ..F79FQ    F .  09 .74J.93. F79F0  ..8J9E8-.OE-O .8. &#  /013J.0.9O/3.00930    ..9302 44.1472E85. 82-O:24 0. 302J.

7.000908J9F87v. 302 9.43.2.2. 9 .0099Q .  4 . 2.7O /013J.  703/807-03 84 3.O8J9E84 23/ 478.2F9070F39 .7O3.2005F/.9. 3009 091Q. 82-O:2 2.47.499 2.. Q8v 2. 2.23       .:  .9E8 .7E.090909F8F39 0243/.3 .3  .9.O8 7F8F-03 F.9.0v147/J9E8.9009Q20  9 .7O/013J.7. 2.09v03 . .8J9E8 .7OJ.7OJ.08300 2J.94E84 .9 . 3F0970020F89  .O0809F3.  4 .7OF9F5F8-03.9O.F300802-03. 2. 1Q.:3.7O /013J.82:9.9O  4 ..2..4.:   .9  /0 .7O 109F80 . 1Q.. 7.43./J9.   'F.  :9.7O  94. 20  .. 0 82-O:2 .E3.83E:3  !F/E: 3.8J9E88.9: 09 .7O .F30 . 0v-- 574-F2E. 2..7O 0809F-03 0807~8.7  .83E.  4 . 2. . .  330 .807Fv/30  F79 .E39 20F.7O8 20. 9J5:81Q09038F  !F/E:  . -09.090vF5503143F3 -09.1Q.-- O/49 070/2F3030 239 . 1Q.   302 J.82-O:2498   00F80    2.7O E9.E--5F/.43.7  2E80v30.3009 . .. .O8E-.8J9E88....E94O9 .7 .83E.E80.00807~--0307Q09v0 42.E84.2F907.E89 200vv03  4.9.E9: .-E7202.47    2.89E8E7.'#    8.7O9.. 802-0 2.7.807Fv/300 ..8. .9 .O8 7F8F-03  F9 839.F3J.7OJ. .948  /0 10209F30   .   .907E3.7O109F847 .7:2039:20F 9J7:3 .-- /0130:9. :3/0182-O:2 :9.3 ..E85.47 0030 J73:3 Q3 39 3F0970020v9  14.38O 0F79 :3..0 .7O.9.  !F/E:..E94O F9807 07Q 3.0F870   03 703/003088F0. 5./0130'#     2. 009908J9v/30     2.7O 109F8047979F320 30250/.9.83E. .F3F39 807093F3 204/..7OJ.9 3F0970020v9  89-  .7O 5F/E:. 0v10/44O .v -0E. 2.99 0..E-- 0v147/:E8 009 302 J8F7 100220 %072F8090803 0 .807FF80:9E3 .109F8:9E3    .1:9E8/v-v..0-v08.E.32. 09.F3F39 J79: .. 014. 08F 8801477.4348J9O9 10 807093F3 8./013E. 03 J. .2.F3  . /09.-.9E7 1Q.. .E842E7.7.00320J./013EE8.07E8.

 .(.7.0   8v..  709:73.(.O8J98:202. -./. --.8070 .( . .    2E84/F5F8:9E3            0.2 -.( < < E84/..807F9.94   4.( ...943 ..8070 % ..E94.907709--847-.:/089/4   /0130/01*13 3.4507. /09. <  /01*13 5:8  /01*13 23:8   2.. .97/009v.F39  .8070 .9 7:3 0 1Q.32Q/.--.7O80J98FF.8..E--5747.20 39. 39.8.20 4507./.%.( . .943- 57391 /8 8 //3 .  39.E94.<  .9  /0130.08vF5F8:9E3 /09.8070 39 .20 0 5.943  393.949 703/0   703/0F808Q8F08.(  39  147  3  147  3  1 . .(  <  9~9910. -  .3    .( .9  /0130. 3.5499 8E28474.4/703/0 393 39.4/703/0 393 39.7.. /01308474   3.2F907F39 ..(  39  147  3  147  3  1 .20 4507.

5F79FF99.38..:/089/4  /013007:09 7  *! 7 /4:-0907:09 /4:-07 709:73*! 7 7< 2.3   57391 131 07:09   907:09    709:73  <    . 10. 5:8    23:8    709:73  <    9J7.949 10-034/:20  3.E--5747.79../.2.2*!4389..

  42E300F8 35:9.

 0 E42E3-.   E99F79E7.2.9O7.8.9  .009 0098F08 35:9. J7E8 2~.8E8  239 .8./. 07Q30 J7E87. -039~097v .7.9O E42E3-. 4. F5073v F8 .239 . J79 .9.2.9 -0203v ..79.. :95:92~.  ..79.. 89-  9E749 E42E34 0809F-03  . 4.20-v .3 E42E3  . F5073v70  . 020    2E30808 8.0090    5747.9O 8 1014. 0 E42E3-O 4.7. J73 009 4:95:9 10  F8 . 3429.2  . :95:9   -039~09  .907009 9... -0 35:9   070/2F30 . 3429.43 1455  2070./.. -0F509 ..  0 802-03 . F5073v  09.0 3429..20 10.. .88..907009 9..9O E42E3F39   -039~09 0 4.83 009 35:9 10  F8 .

7.99E74E8 2O/.. 0 . 8474.09v03 01472E .9O .3 .35:9 4:95:9..1:8 .433.09v1.201.35:9. 850..08F00009088F09  .845479-.43 841FF 00930  23/0330 20F.9-. 020    09.4.08F03F90vE42E3F  2J.F0903 1455  2070.20-0F0v/ .84. 8970.:43.0 ..E42E342.2 009 1::8  8970.8970.0 80.3022.  8 243/. 08F .8970.03.8970.E8 2E30808 8..93E3 4. 0709F80 F7/0F-03 ../499 E42E33.5747..2F8..5.  0F7F8~0   1.  330 .8 0F7923/03E42E3901472E3.2 03 07089Q F5 .2 23/ 0 8970.94 330  09. -0203v . F3020903 841F08F30 . 070/2F30 20330  3.4:95:9 10   E99F79E7./.0099F -0  -03 .5747.80.2. 8 F9 .E42E343.2 -0J7 09.0 33034.204.3.91::89    5747. 08F0 90E9  .2 0.9  4.5. .2 0900F50323907E3J9499./.F3 .O8E-.././20.0.E9 %072F809080303020039.

83E3E3 .3.33.  1Q.09E74.F30 -  E42E33  0330 .F300 J7:3 -E7203 E42E3-.99O  4 .47..2    E42E3 E42E3  5747.4 4  .F38477. . 205071F7E3. Q3-v 9J5:8 E42E34 00F8F0 Q3 Q3 1Q.O8 703/807 E42E3 E42E3  5747.    .3.9 . . -  E-7.4.  E-7.83.F38479 .2 $%#    E42E33 . 1Q..  1Q0903Q . 1Q. .  -E7203 E42E39 0009Q3 :... 0099  4 .4:95:9000  507E.  !F/E: :.

 E42E300F8  -4348 .9033F30920  .2 0 01472E  2F8 0 -4348 8025439-OF9.4-- 2F709~ 009 9-- ./07 E42E3-. E42E3 3.  3E78 8970..3979F3 2031Q.3.  Q3-v 488 8474-.2-O.7E. 8.5747.F30 .9 .9078479  .7.009 9.907 . 8.839..9 9J5:8  .-3E78E9. 703/0099 .83E. 05747.008 8970.907 .20 .008 8970..O J7E847  09.J7E8  4.3 8O  .2 -0979F3.2 0 0809F3 802203 43.E7 . 4.3429.2 0  --v . F91F08F .2.9070 -0J7E8E7O 23/03 847 .  9.  !F/E: 157391 10 703/80739 8.008 8970.F91F08F09.3 302 .3429../O/O.8.9:8.845479-.2.3 00F 43.9 243/9:  4 .3 0   9J5:8 30.9 E9  03 0809-03 4.7.E42E39 239..7.F30 0 88F 2E8F39 2~/30  .79. E42E32F709023/2000.3 F5073v3.320003J903 .7.2.77O .770 709:73 #  F8 30 100/   .008 8970.E42E34 0 F9.79.7.79. -3E7843 07089Q 50/ 239 0 -90 8479   . 1790 49 84E8 .9E847 .0 ..3..008 8970.E42E300F8     42E300v1Q.7.7.3/013E.  30.7.47 3. # F8  .8474.83E -E7203 9J5:8 E42E3 00F8F0  8:5E3 . 89/4  0.9O8EE3.8.8.20 8.9078479  .  E42E3*543907   .2 03 07089Q 979F3 ..2 09 .2 0F8-3E788970. -3E784F7. 0809F3 .  03-03 .7.3 E42E37O .9.  2E84 50/ .3 E42E3-.845479-. 3  .2-.008 E42E34 00F8F70 .F807~-3E78E42E3F39003  &.2 03 07089Q J7:3 0 4.9070 .9E8E7.FE-O.24O2:3EE3.43-.9O '.3390039 4J7E847 09.8E847 .E949.9E8-.04.0088970. .O :7E8 .3 8O  4 -4348 1Q.-00J79..79. 3030  3  .079EO/  2033-03 0 E42E3 302 8..8474.93  .2 03 07089Q 14: 003 F79 0v38 0  F5073v70 .9079 9.9075E77E .2033-038. F5073v3 .3 0 E42E39 F91F0F5503 009 3F3  $.2 0 .  F8 302 E 8E3/F:3-.7....8309v.20 . 4 008 1Q. 8970.90708E2.2 03 07089Q  E9: 239 0 .907 43. 8..2009 9.. .  .0099F-0  ..5747.2.7.F3 F80909 .83E3 .2033-03-3E788970.8E847 . 147/J9499 7E3 43.80    9J5:8 0 897:.43 .2033J9F80.07O7.E3 20 807093F3 003J903 .:.F30E9.8.E3 8. 00903 1Q.0099 E42E3543907 F5. 979F3 20  ..2 03 07089Q 00Q. 302 07Q 847  F8 0F79 .9O  4 8.9 239.008 8970..  E42E3543907/013EE8E3.  807093F3 3429.009 9.30. 2F39 . 07Q 847 #    3   2.83E:3  302 0 30Q3 43/484/3:3 003 .--.33. 9F303  4 .2:3E9.09v03 0 8.009 9. 07Q09 847  !F/E:  J7E847 .FF70  803 .F30   E42E39 0  5747.008 8970.07O7.2.5.  847-.:942.-00J79-90 48E2E.07O7.

 E42E39  20. E42E3 7F8F70    4 2F39 39: 20 .9E74. .  4 203 .-.3.F03  0v87 20 0 393:3  47 979F3 0 8970.E42E35439079 15 .2 0F80 .014:03   4  4 0 E42E343 2~.E--.009009 9:/:3 .

 2~..F70 7.8E8 J7E8.9..0090 .FF70 J7E8.9. J7E8 4.9O .

FF70 -3E782O/ 4. 2O/   2O/009 79 7 8.99: . .0090   .0082O/ J7E8.8E8 9  .FF70 8.--10 2~.0082O/ 4.8E8.0143948.9 .E-- 1Q. .00900....- 7 9 7   9   .0082O/ F9704E8F8J7E8 8. 9 .239E9.FF8F9-948J9E   42E32039E8.8E8 098970.29J5:8.F70 .0082O/ 4..4. 02J9099 2~. - 8.F30.. 7- - ..  4 2F39 .8E8 -3E782O/ F9704E8F8J7E8 -3E782O/ J7E8.  7 -  - .9O/3. 1514503 E42E3*3F.9 -014E84.

J7E8 8.0082O/ F9704E8F8J7E8.

F9704E8F8J7E8.0082O/ J7E8....FF70.8E8 8.4.

8E8 -3E782O/ 4.4.8E8...

J7E8 -3E782O/ F9704E8F8J7E8.

.F9704E8F8J7E8.4.FF70...8E8 -3E782O/ J7E8.

 $0790038F 0809F3 & 5439079   42E3-0E7E8.4. 2O/4 109F900  4 .  2O/-. 2039E847  .8E8   7 F8 .0.480  15   7E8. E42E3 F9003 . 2039E8 . E42E354390799F7J9 . 14503 . 391.339:3200E42E39F82E7F90099 9..F8 .2.79.88.807Q9.

.8E8E42E3-..

8E8E42E3-O   . .89F7J9 ...-O  .  15  0J7.O425.7.. . F8.907J7E8E42E3-.9079. 3915:9.F099.88.. 39.07O.7.9074.7.9-9E8.E42E3-..  7F0--.7.907399J5:8   .

. ..9079  2.J2030/v/v.807Q9 .88.4 .31  .7.8..8499 ..3 8... . 9.7 8 39  15  4.4389..3.7.9E.907E3.9-9E8 2.  .8E8.9-4J7E8.E42E3-.4/ 5 80*92 80*937  15  04.9079 39 9J5:8F39 9F7J9 .E42E3-O. 8 .88.8070803J79-448E2E9   /4998E2./ .E. 89/4  0.4/ 5 80*92 80*937  15  5...31 15 1472EO847 . .0809F3  099F7J9.008 E42E34 0809F-03 ..E42E3-OF8070/2F3F39.J7E8 8070803J79100F808E2E99F7J9.23FF79F0703/80739    .7.J27v37/.O 425.8E8.9F7J9.7.E-..302 &5439079   7E81472. .9E. 098 0 0039F9-03 0 8-007Q.  -.. E9.J2F99F7J9..E42E3-. .F00  .9F7J9   7F0-- .907E3.80.9079.  15  4.8E81472...8439 10009903 -3E7843E   80*9 9J5:8 .008 979F3.9-4-04.7.8..907E3.8499-448E2E9     . 4.E94O.907E3.    0v-- 1Q.E-.8070803-04.2-902F709~-449J7.843O.. 80*91790 .84992E7  .   .9F7J9.07O.3 8.. 8. E42E3.E-- 099v9 .F3009 E9.F09 .008  979F3 ..8E8   8070803 -04.J27037/.83E:  ..39109.8./.3 8.8./07 E42E3-.   .88..7..7..5. .4389.843O. J7E8E42E3-.8 0 .3/013E.2J 847.7.907E3. 15 E42E3-O E9.88. 2-902F709~-449  '88.49.7./0E7.J2*89.E-. 4..  .3 2~/ 239 .  '88.47    9F7J9.-.88.7 8  15  0J7. 39157391 15 1472EO847 100F8*89.907E3.E42E3-. 57391  . 15 E42E3-.49.88.7.7....F8703/807390v03FQ0F8   /4998E2.8E8E42E3-O .J270  .3 2~/ 239 .E42E3-O 80*9170.F04..7.7 1098 .99 .E42E3-O 3918..88. 3915:98 ./. 4.E94O 8E2E9 9F7J9 .4 .907E3..E42E3-.

. E42E3.9  3/03 J7E89 .9:8. . .9O .9 802F909  2F39 24/: 0 . .E.. E42E3.83     .9079 .0F7/0F8 39107747  15  .:942. .:942. .F0F7F0F80 391041  15  :E9O Q3-v F79F09 4.9  . .O7.8E87.008 E42E39 .  . E42E3. .8.020 89-  .31 1 8 30.10009-03    . 54J.9O  ..730.2. E42E3. 02E89 .09v03 0 .  .20 .FF70 979F3v J7E8 8 .O 2:9. -04.9 9F7J9 . . . ( 390.5. E42E3-.9E8  42E3.84O/ 0 54J. 09v 802F 8Q09F8 F. 114503 8020 99 7  18.O 2:9. E42E3 2039E847 2E7 F90  ..5.5.0   3.     8 9 .31 1 8 .3 2~/ .0090 23/ 099v .009F F8 07089 30. E 3 #       1 . .O 2:9..09v 4.:.9O0/09-03.8499 .20 .009 .8. 39:3 20 0 E42E39  2O/  ..        !4J.9O .O 2039E847 7 2O/  .94.-.30.9:8. 54J.9O .4 0 0809-03 . ( .F09 57O-E9:4.  . 2E84/ 847E-. F8 J7E87.3.  .  9F7J9 .F0903 4E1F7F8 1455  2070.O9 . 54J.8.88.O9O 0/v/v03 979F330   54J.O 2:9.. E42E3 08v 847E-.79.  18.0 9.3 .09v03 . F9704E87.  F8 ..9 . .3  0 802F ..E-- 2O/43 F5009Q3 0 109F9009Q  4 .0090 E9.89.843O.200 0098F08 .  18..907847  .F070  .O 2:9.F3 2~/F8F9 7F80908039E7..E--F5 .7.9:E8 54J. E42E3 . ..88.E42E300F702:9. 0 E42E32~.47 0/09-03 .3 979F3 ..09v 54J.F09 9.31 1Q.F070 2:9.31 1 / 0.8E8 2~.30.9  !F/E: 0 8. E42E3 2:9. -90 49  0   J7E8  F8 4. 2O/  .28   3/03 4. 54J./.7.9O 8O0 0. .3 50/ .3 94..9O0F7/0F8F824.. 18.9O /0 2:9.8E3 -./O/499  030v 0809-03F79F0 .8439 :.8E8 2~.9O F5909F80 .O 2:9.3 E42E34  .O 2:9.E.. J79 . 54J.

88 .88./.84.E99F79E7.9O.   E99F731472E.9-.7.O 2:9..54J.9.5.9:E854J..OE9 -.O.843J9E8*54395.83EE8.9O. .O 2:9.9O9 . .88. F8.843J9E8*5439  24/J9.843J9E8*5439 4F5089  .37-90 .O 2:9.2F9070098F08F79F0 $*$% E42E3000  $*&# 54J.E42E300F880.0809F3  099F7J9.3 -08v 202O7.99.9O0F7/0F80 43190  15   '88.9O-0EJ9E8 391800  15 4337 39.4/703/  15   54J. .3.-- .O 2:9. 0 5:110709 703/8079 .O.9F43.F0  :E99F79.98J3 .807082~.O 2:9.9F7J9.54J.  $* E42E3.9O3./.E42E300F70EJ9E8.9:E854J.0090809F3   54J.8070 9:/499.O 2:9.54J. F7/0F-0  /449.

 E42E3-.. 5747.5:1107 .843O979F34. .83 009 -0v0  F5.3E .  2~.0 09.. E42E34..  F8 3303 4.98J39 . . E42E3 2039E8./.3 .205071F7E7.80 5F/E: . .2-O003v709Q 4247979F303.E3847 1090 ..79.5:1107Q7J9F8   02O7..:942.47 E9. 2.  2033-03 15  J7E87. 1Q. . 003 5:1107-0 J7E -0  F8 . 330007QF80 F7/0F-0 ..2. . 979F39     .5:110790089./ .  !F/E:  E42E3-. 1...E42E3-. 202O7E-. 5:1107 Q7J9F80 :9E3  :9 0 01109J. . 5:1107  .9:8 5:1107 Q7J9F870 07Q 847 ./.8E8478 E99F79E77O.F30   2F39 10.Q 014. .3 0 20F.. 5:1107Q7J9F80 3911:8  15  . 4.79.2..47 0807~03 97v/ . F90.F30 ..5:1107-0  080770 0 0F8 5:11073 .2 -01009F.29 J7:3 .E49 20. 5:1107 9.F3  .32:83. '.009 0809F3  F8   9  .203 -..83.9 00v70 .23/03-90 .4801Q.301Q..47080770 00903E99F79E7 4E1F7F880 . 5:1107    2~/ 239 0 7. 15 -020309 E42E39 .E-./.8E87.0992039. J7O 1Q.. .  . J7O/.  09 .F3J.79.0. E42E3 7F8F70 0 30.2.43-.9E7   E42E3-. ./3E3.0090 0-434J9E8E7. . 10909.O J7E847  703/J.F33:E9 9F7J9 .3 F9703 . F8v--  .E8.0099 202O7..E42E3-.8. 80708 2~.9 07Q -04.8O1Q.. E99F79E77.-0J7O/.88. -039~0909  .9E8E7.0 5747.8.203080J98FF..8..5:11079.2.003F398.94.9E8.

02 5:110709 .

O J7E8 .O 302 5:110709 4. -039~097v .  09. 1  1 1041 1 .    1  11:8 1  .-09~9 9.008 E42E3 .8E8 09. 99  7 9  0 1041 1  .0090 0809F3 5F/E: F5073v70 .3  !F/. 114503 . &  1800 1   $%*&# 15:9. ..  .9E89.. 11:8 ....F 3.  2~.7.79.34 E-F.0  .E3. .109. .-..  .  .F847703/-03 3/032.3O9J7:3E98-09~70   1. %0Q 10  4 0 084748 8..  .E-F.2.

2E9.480 1  .7.907E9J7E8:9E3-0J7: .5:11079.79.E42E3-.88. .J7:   < < 1. 23/03.

 .88. 1800 .OJ7E87. F79F0 009.9E9 8 .43 1Q. 10411Q. 107747  .9F7J9099  08 0039F8F-03  .47 2 ..249 . .:3  F79  4 -948.   . 009 .3.F300  .3   1039 5F/.003v7F870 . .E42E3. F5073v 8  01472E3.3 :.0 0F- 4..807082~.9  4 E42E3. .-.F03F . 0Q3 ../O/O.  :E99F7J9..0 E42E3*3F.F0F7F0F8F7050/.807082~..F5073v70.F3009   0E79E42E3409709v 09.20 002F30 F79F0 8  0 008 1Q.4720EJ9. E98  F8 0--v .88. -039~097v. 11:8. -E9 .F3F80909 .009v05747.E7 . *E42E3*3F.0903 ..480 0v99  2F 802203 .. -.9 8 202:9.9.200 10009903 .31  09.83E: -E7203 E42E3 00F8F70  .9F7J9F8F.0090809F3   42E3E930. -039~09 F8 .0090809F3   F 0 F7/F8 989EE87. 1.F8.5747. .0F80 39703. E42E3.O4.3 .88.O/-..E94E8 302 0330 F8009v .2 003 07089Q 23/03 E42E3 .88.8E87.3 1Q.84E3. 57391 F8 8.83E: . 5:110709E42E300F8908009v.  4 .F30 .20 7F*E42E3*3F. 99 E42E3-.83E.2-O   42E397F80 397024.   .. 8970.. .0 0 .  :E99F7J9.0E930.F   00F8 O 3E78E42E340809F3.30280705030. F79F .

7  F79 .0099F.F380J98FF.83E.0 89/4:9 49 .7/ 20309  703/0970   -039~09 E42E3  09. 23/03 00 .3/. 89.7  09.F3009  5747..00990  . .24O F302FF79    2E8 F7/008 9:.0    $970.2  1::8 E97E3J9E8  1704503 E42E3*3F.31       157391 89/4:9   15:98 89/4:9  1098 89/3  15:9. -039~0970  09./438E  .3 979F3 .0 .21:9E8 0/09047  09. F5073v E42E3 2039E8.090F8F5503 .v 1Q.5.31 89/3   8. $  -03 E742 0v/013E9 E42E3543907 8970...3/.2 0 0809F-03 . 2O/  8970. 5747. .F3-03 ..9  89/4:9 F8 89/077 50/  .E.47 -0.7/ 8970.2  89/3  89/4:9F8 89/077 89/3.0  -E720E42E300v1Q.9:8.2   F90v8970.2 0 E42E35439070 E42E39703/0  !F/.F90 .E42E3543907F39 89/3 9  09.3/.:942. 2E84/ 4845-.948 1Q.17045031Q..43.0 -0E7E8. 89/3  57391  5:98  098  5:9.907E3.47 .943  .83E:3  .7.E84 900803 003F79F~0  18. 89/4:9  109.49 098 8  57391 8 8  . F5073v 89.0 -01009F. .84O/O 2~.9O .78 ( 1704503  99   89/4:9  57391 7/-0.20 . F5073v70 14 .7/-020309 703/098970.3 F.2 702:9.  4 89/3 89/4:9  89/077 E97E3J9.F3J.  09..9O.-039~090 89.0 .E-- .

 99 -0J7 .

 .

.8 . -039~097v4.

 .

 99 -0J7 .

J7     8.57391.  99 E42E37.  1039 5F/E-.230.2 09 .31.09vE42E3-. . F5073v7v .. 89/4:9 8970.0909F-03.3 E97E3J9499: .

3109.18.057391..

5.F300.3 2Q/30   .84.93 803 .8O-. .9-.F30 00--7v  8.3  8.3147O1Q. 8.31 F8 .O 0F8J9 . 157391 .2 .1573911Q.2...E-- 31472E.843O..311Q.79. 18.31 F8 .9 ...   100099.F3009 14: -02:9.F3    . 57391 1Q.

5.398.   (20v8F088F(. 8Q8F088FF9 . -0F509 .88.F0 .8   4.30 09E743 v09   8.$39..... 202O7E-..7.8499F809E749F79F0 8E2E9   1472EO847  . 20100v -08v E-7E4E8-.9079F8. 20.31 1Q.2.3  A5503 0 3/44.  .E348.009099 1472EO .83E.  %0E9 .9F7J9.O8E-.3 . 1472E9:20J7O .9070 8 8070500930 .9070 (1472E9:20J7O (  $v9E9. 1472EO847-.7. .31 3303 4. 20100v202O7.3 ./ ../499 . . 8.E94O 7F8F70 0 0 1472EO ..9499.  ..E348 0809-03 .E94O F79F030 ..7.   0-434J9.94  /0 .F3 1472EO847.7.-04.7.8.9079   .7.7.009F8F70  %0E9 .9079  9./.9 239 0807Q03 .7.9E3..31 1472EO847 ..9 0039  4 .8..2.38Q8F 803. -039Q097v .8E8E9 .3 .09v03 .7.07O7.79.8439 0F- -E7203  .E348 .7. 202O7E-.  . .090v 0F-.907E3.907 .90770 -0.1472EO.90770 -0. . -0 v09 .J2070 F8070/2F3F39.8E89 . 8. 5:1107-v 4. 09v ...J2*89. -04.311Q. %# -039~ 0Q9F8047 .7.F3  0// 5F/E3-./.32Q/.7..E94O 95:8E3.499  23/03 .88.31 .009099 1472EO .79..3 F7030.. 1472E9:20J7O 89-- .9070 0  4 203 43.E94O. 8..2 .. -09~09 5:1107F-0 07Q30 0v87  2..1472EE-.8.907009 9.31 5:110709 -04.7.9070 (1472E9:20J7O (0F-.. .9070 -0.94 .-039Q097v./. . 1472EO847 E9..

.

.8O/ .. 302 .311Q.3 . 9E74O/   .. -039Q09 5:1107F-v .907  .7.E94OF79F0F39   0.31 //3  .94 302 8E24O/3.302 ..E94O-. ..(1472EO.   8 243/. 09v F79F09  %072F8090803 .7.9  /0 302 07Q 09E74E87.47 :. 807050 . 20100v .9F7J9099F79F-0   20v8F088F0 .93E3  4 E9:47: .09v. .907009 .31 1Q.31 30  4 010330-- 033 .  /    :  4    1  8  5  -02:9.90794.8.907 ./. 1472E9:20J7O-.   3 1472EO .F3 E9.88.  ..  57391 //3 ./. 5:1107-v 08 F79F 4.83E9 1472EO .907  .8843-0.7.7.7..8. .3 . 05 -03  F9 5F/E3 07089Q2002J9Q3F9Q3008080909  31472EO..9070 8E2.9E8E7.9 0009Q .F3E9.7..7..907  39. ..3 4.// -04.   10009-03  9008 89E9 50/ 209.8499 .. 20247E-. 8. E9:7499 .  . 20100v .99: . 8.7. .  . 8.-00.E: ..--.

7.7..907 . 00F70 2:9...9078479F509Q-0 .0 .83E..1.7.31 )3( 243/.0.8.7..3809  2O/43 .5:1107.907..99O 1Qv03 4.3809 30   8..9  0/09-03 23/F9 3 .. 0 .31 1Q.99 -02030970.....7.9908  2.907-04.8O/ -0 2.79 200 0020.7./90 .9  &. 10390809-03.7..9 (8.   -02030970 .907F8302.20.31 8 243/. 8..31 .4723/F93E9F5.3.7.F 908 9-- 8.8E8..7. 8.E-- ..).O 4.9070 F79Q3   E9 ..200 302 0020 .2.8.8 243/.7.5.1472EO847-. 8.1472EO847.31 0 9..907  10F7.4792:8 80739 -434J9.8E8E98..907E3.907E3.907 0  .83E..8E8 -0100v/ ..7.E--5F/E .. 8 92--0 .7.49  -039Q095:1107F-0-0F509.311Q.47.3809.3030.F.31 /.3./9 . 8..4F5009-03703/0Q30 3.7.7..0.470.90708 -00830-04.3809.9079 3   8.9E   .9 (8.09v .9070:..9. !F/E: .9 5439079 .83E:3 .8E847 8.//9.7. 8 1472EO .F3 2Q/F8F30 543948 20F79F80F7/0F-090398Q.311Q.907144.3809 09 .8:5E3.-.9   .243/.3809 30 30.....7.. .0 9 302 0020 . ..2.7.3. -04.E94OF79F0099   8.0Q  ..9  8.907E3. . ..9:E8.7.83  .8.7.49  8...0 -0330   1039 5F/E-.907009 14..90770 2:9.907  30210F7 .47..9:E8.9079 4.8314.-0203097000809-03.7.7243/.7.9079    .  39.09v.907F8302. 009v. 4.F31472EO847E9 3/F9.3 .. 10332.3.7.1...7..7243/.9.-. 20309    08  . F5073v3  .247 .78 8 ( 8.. 9 .7.8.9:E8. 3 20003F80 5.2. 8.7.9E-0.2. 8O 4.90794.9:E8 .907E3.O .2..9 0 .31  ...3.907 0099  .. .907030210F7 .907 ..09v03 E742 Q022O/-./01(8   8 8  57391 /88  8 8   80908 E7O00 F J79 .7.3.992-9.-..2..907700/v/ .3  /44 .907  .8E89  01009v  4 ..08v10F7.90792--0 . 20100v .94-04...992--0 ./ 90 14 200033  .31.7.E-- F9../43 0  .243/..77..7...F330  4 .8.7.3809 30  .8.9   %# -039~ 0Q9F8047 .3123/03.03.O 4.-039Q095:1107-0.009v8F092:9.470037 4..8499 -0     $!        0F79..0.7.79.

7. 00903 . 1472EO ../499 .7.7..93  .907 ..7.090v . -04.7.99O 410F7 .9079 0 -04.7.9:E8..9070 .8E8 F8 . 84743.47..7. .7....7.09v . 95:87..47.907F9 1Q0903Q. 302 .9070 0F803 . 8808 9E-. 1472E9:20J7O 839.09v.  .J9.47 -04.  .949 0-04. .7. 9E-. .47 ..93.9F7J9 ..50/ .907E3...8499F79F009 .90708-04.90770142:9.7. 1472E9:20J7O9 . 8. 0009 .907 07Q -04.v 10F7 .7.88.. 08v 0E8  .. 08v ./ F8 .  .9070 5F/E: .  5:11073. 1472E9:20J7O9. .907 E8/ 10330-.20100v03E70 420395:8.907E3.30224/:  .907  .7.47 208. 3F. ..8E87.9070 2010030 0 .09030 239 ..30210030 20 .8E8 2039. .907010F7 . 09 .47 23/F9 3 E9F5 .88..7.     .9079  .7..J270 0 02.47 0037  4 .9:E8../ 09E74.907.3 F. :948O 4. -04.9070  8v9 34. F8 09E74. 20100v03 2.09v 08v 302 10F7 . ..7.. 208. ..8E87.9070..83 . 07Q30 .7../9:3 . ..0  0E8  .4 802 9.  .09v .   5:1107 3.. 20v8F088F-03 20../ .8499 . 802  F8 0330 $ O/E9 09E74.7.5:1107..7.90770 ./ -04. .1472EO847...7.7. 8.54/3.7. 09v .E94O 9J5:8E3.79.9078E2 ..907 F8v-- .8.. 5:1107 3. .8E3..83 0F8  .90770  .09v ..31 .31 .  E9. 302 8E20 . 20100v . 10F7 .  E88O../.33.7. .2. 1472EO847F 50/ .O8  .7./ .8. .8F8 088E2008 89- .31 0 -04.7.47010330-- 033 .7.7.J9.090v . 8.7.20v8F088F3.83 . 10F7 .90703 E.. 1472E9:20J7O-. .09v .E94O-.8499F809E749F7F908E2E99F79..3 EO 089008 10F7 .8499 .3 20v8F088F098 20. 1472E9:20J7O-.7907  .7.3 807050 .7..7. 5:1107-03 30210F7.7.907009  .// 8070803-04.907900 239.8. . 3:207:8 95:8 0809F3 .31 E9.88.1472EO8473.907009  2.8.// 8070803 -04.7.907  03 0E8 .090099 .93  .47 . 200v9 20247.475::1073.9078479 .90770 14 2:9.9:E8 .9079 .. ..7.1472EO847.8.88E2703/8070809F3. E9:47.9079  F8 ..E94O F79F0F39   -04.E720 302 10F7. 0F-95:8 F79F09 0 -04.2010030. 0009 .7.47. 20  .907 802 099 -04.8499 .

 80J909 2F 989E--....1  . 5888886 . /   88.  .. 8 .31 1Q. 11:8 89/3  1Q.83E: 5:1107 Q7J9F870 .31 . -  . 3957391 1472EO847 100F8*89.  ..5F79F09  14..3 E93 .8E8099     .  . -0939~097v 5:110709 -04.  -  .31 /  .4992. 5 -   8.90770 09Q 1472EO847-.31 .2Q/F8Q09  330 007QF80 F7/0F-0 ./4:-0-43/4:-0.8E89 -948J9O 1Q.. -  8.31 / //  .F3 2Q/F8F9   5:1107-03 9.9O $! .  . -39.8.7. - 8.2.79..    8 8  .F7 8 . 5 - 6  8.7....F3J.E8923/03-04..    .31 .7.31  09.  .7. 'E94OF79F0 39.31 1  ..   .:9E3 F8020.9.33472E88O9.83E9:3    !:11079.9.E..  .E348.   .  ..  .7  098  302 9.907009 1F.. .F30 8.7.00F8 0979F309  4 .8E8 8020909 .   -  /    573911Q.. - 8.  88   .  .14..9070 (1472E9:20J7O(0F-. 8.  8.. 8.3:2E34E8.31 11  . 5888886 ..F3  $39...EE Q70803 .31 111  . .E348. 8.E-- 5F/E 9.302.   1472EO847E9.   .  8.  ./. 0F-..7.  -    . .. -039~09 5:11079 2079 00vv-04.88     .9/ 8...31 11  .7..31 .  ..9070 (1472E9:20J7O (   1472E9:20J7OE9.     .  ..

.J9E8 0v0(20v8F088F( 5439488E(.

.

.

 08   8 8.-. 3:207:8 F79F0 0809F32000303 0.F5073v320003v$!.7.2E8 20v8F088F09 0039 . 10332.OE9O 0/v/v03 979F3   20v8F088F 0 232E8 8E2 . -.E4/3.F78 009Q.7.31F..907E3.-   . 20v8F088F F79FF9 200v 0 3:.7.47 003 -0Q ./.  !F/.9O  4 549J. 0809F3 .888.3  .7. 20003J9F8 20979F309  488.90784700320..200 302 0990 F739.-- .E--.J9E8 0v020v./0-- 10203 .  57391 8 8  8  8 84 84 84 84  20309.3/O.9079 908  239 . 0v0  . .0v0   $! 549J.9E8.080-- ./9 54.7 84 .  .O8:  .9 20003J903  25.-.0 .7.7.9481472E-. J7.907 .J9E8 979F3 F8 4--7O $! 00 5494O/    20v8F088F  549J. .20003J9F8 25./.3:207:8F79F0809F3.J9499..   -.-E4.(1472EO. .9E847 . 5:8 . 80254394.-.94.O  /0 . 20 4 E39J0/08543948E.99J0/08543948E./ .. 20v8F088F  .4. .7. 1099v ..7.9.7.E--08 .995:8E9O1Qv03 O '.9 . 2.9E-E.98070/2F30  888   8   5439488E 20v. 57391 1  1      .J7.47FQ300.907009    .009v8F0 .Q 2.  .O895:840809F3.47 8E24 4--7. 88. .3 03E--.9070 0.907E3.F5073v3   8  O .3:207:8F79F0809F3820003.   10009-03   J7E8 23/ .907  8. .2003 .J9E8.0v0009$!00320 !F/. .979F303 . 5439488E F7F90  !F/.O9 0039  . .3807093F3. 3:.7.9E8 979F309 4--7. 0809F3 .9:E8 54.907E3. .2003 . .9 $! 00 99v/30 10 .E94. 57391 /  /  /  / /       J7.90754. ..7.9 14: -02:9.9E74.7.5F/E-.3/O 100F8 F79F0 0.7.9E8. F5073v .7. J7. J7E8 20. 7. J7.

7.47302081002-0.F79F0  . .2003 ..9.200033  O /4:-0 F7F90 9:/42E348 .7.3/O F79F 239 .09.090v088    0F8J9F80.83E: . 57391 /  / /  /  / .2..47 . .0. 100F889..F.9--8E20~.3 .2O/48J9O9.49EF79F050/ 57010143.89.: . 8E2 20003J9F870 07Q  0.  . 39..O .232E88E20090039  .0  !F/..O J7.090v F79F09 14.9E8E4 .47..F3 20v8F088F F8 5439488EF79FF39F790203  !F/.20. .7... 57391 1Q.90700v99.. 8E2 00F0 3:E08307.90700909v03 O . .83E: . 57391  1      20309.200F895:87...041472EO.090v0033020   888  8    20v8F088F F8 ./4995439488E . . 84743. 0..-.1472EO.907  0347 .J7.. ..080-- 8E20~ 0F80 0809F3 .  F5073v3. 5439488E 0099 80705009 .

907009  O '.7.O8 F79F0 0809F3 . . 1472EO.

E.9070 . 1472EO. . 1 09.9E8E7.7. 57391 .00.89 .

7.9.E--. .49  !F/.31472EO.9070 8E2E9  .0033020.J20  . - 57391 /38E2 57391 /8E20~   .7.090v00320 8E28E20~   .43 .83E./0--.907  . .9 109F900 4 .9.. J7.20009.E94O . 57391 09E74. .5E3 420-948J97. -   F5073v3..4.3 8 80705009 .  /4:-01  147 1 1 0  1  57391  1   .  .F5073v3       0 0 0 0  O  57391 1472EO847E-..3/O 100F80 99 .99.9....83E.3 9200vv03J79  !F/. 39. 20100v 003 00303 20 0 0F8 .

 9.~ 8.0 9930.0 99 30..9 /.0 . 1  < 1.F0 . 002009 39 9J5:8 F79F009  F8 F9704 -0vQ 0 .  'FQ J7.20 .008E42E3:9E31~    7:3 5747. 8474.79..  99 8.7. 0 8E28474. -0 99 30. .0Q .249  .9 E930.20 8478E24.0 9930.~ 8..9  2. 84.0 99 30...~8.    7:3 5747.7. 84.97 F8-0J7.9 002030 8E2E9  09.. 070/09 E42E39 097Q  F8 .2.9   1. 84.0. O/4. 1  114503 84.~ 8.008 E42E39  ..-039~097vE42E3.43./. 84. 070/09 30.    7:3 5747. -3E78 E42E39   4 23/03 -9F9 9.   10./.09.20 J7.F5073v70    7:3 5747.249  . .20 .008E42E3-.2E9 . . .9 ./. 709:73 < 0 1041 89/3   .79.9 8478E24.9070094./.88.v09084.94   7:35747.~8.0 9930.249 ..930.480 1        .008 E42E3 9.~ -3E78E42E39  :9E3 O/4.~ 8.  C909 F9704:3 0 2E8 E42E39  .008 E42E3-O -04.7  1 1041 89/3 15:9.0 99   5:98 -.20 .249  .8-0.20. .249  .008E42E3-.F70   149Q33239.008 E42E3 847../ .070/09E42E392O/48J9499:.

 1  114503 84.0 99 5:98 -. 709:73 < 0 1041 1  .480           .7. 709:73 < 1  14503 84. 1  114503 84.  < 1./.7 .20 9025 99  84.480 9  7024.0 99  703.0 99    10./. . 709:73 < 0 1041 1    1098 8 8041 8 1  1 1041 1 157391 9  / 8  8  < 1.109.0 99  7  5:98 -.7. 5:98 -.9   1.0 99  7 5:98 -...0 99  . 1  1 1041 1 5:9.  10./. < 1..480 1    7   10.9   1  . 1  1 1041 1 15:9. 709:73 < 0 1041 1  ..480 1 1.78 (39  1  114503 84.0 84.9   1  9.480 1  1.109. 709:73 < 1  914503 9025 99    5:98 -.

 39 2.4.   709:73  < ..7  2.   157391   /3  <  1..     1  114503 8  .7 8 39 53 39 5.14503 8     147     1 170. 10.480   <    .  1790 . 3 8041 39 1   1.4/-0*99 ..9 -3   99   1700 .7 39 39    .4/*-3 ./.31 1  /  5..7 .7  .480 1  < .  147     1 170.9 -3   -3*94*99 .7 8     1  39  114503 8  7..4/99489 .   99489 ../.   1800 1  8041 39 $*&#    =   1790   8041 39 1 <  1..9 -3 3 .     139  114503 8  7   18..  147   53    18.7 8 .4/-3*94*99 .  -0*99 -0 99  3  .4/*-3 ...4/99489 ./..480 1  < .7 8 393 39 .480 1  < .7 39 39  ./   8041 39 1 -70.     1./.7 8     139  114503 8  7 .4/-0*99 .9 .31 1  / 53  53  8041 39   5.3    393  .480 1 1./   8041 39 1 -70..4/-3*94*99 .   *-3 .

843 839~ 1000F8 302 5:110709  .-..E384720J.83E .79..E 099 43/4.O/3.843839~ 1000F8 1v-- 1Q. 84 2502039E... 70./07 E42E3-.. & 4507E.--.202O7E-O4. 5747..79.F309  !74949J5:8.7/  . 0 2E84/ E42E300v 703/8079 8  .3.O.  ./.F30 E8/ 0330-.E--.239 2E7 02J9099Q  .  *#   .  E7 .  .30 9. .. .3 88014.. 1.5747.70. 4  0.2009 &3 0 1000v 703/80730 .2. E42E34 . ./ F8 790 1Q. .33. . 23/03 2502039E. & 0 703/807 302 $ 89.39 0....843839~ 1000F8 302  5439079  .9O 20  080 QQ F3 .3 ..39  0.47.. 302 030/ 20 . 30./07 E42E398   E42E3F9704E8./07 E42E3-. -0F5J9099 5:1107009    5F/E: ... 09.030   .3/... .E-- 2.0903Q. 39.3 ..843 839~1000F83030. 23/03  147/J9O 014.83E./013E.0 .O8 703/807 .8 839~ 1000F89v 09F7v03  .2.8E8 *#   7E8  .843839~E42E300F8 . .2-. 392O/    2O/  .75947  .3 9. 1..9.F30 0Q9908 . $ F8 & 1Q.E.4389.7 E42E33F.47.83.90 .0/0J73..  30.: . . 070/090 .  30.8E8.9.7O 00 009 .O..  '8439 . 703/807 302 9.3   2.. .4348J9E8E7.20709F3-0Q   .9E9 :.302 39 9J5:8 10 0J7O9 1/  10 /08.

3.88. 392O/  *##  &.F3080239.4389.F30809F3  !F/.4.0090809F3  09   F90vE42E32039E8. . 7E8 ..4. $0790032~.7 E42E33F. .8E8.90 1Q.0v--1Q. E42E30J7O9 1/ 9F7J9. E42E39  .70.. 394503 .47 .F330 807Q F97043 .200F80F7.

.J7E87. 391/ 1 1/4503  5:98 -0 /. 39.OE42E32039E87.9  *##    029:/4220393.480 391/     .E42E39 709:73<  42E3-0E7E8..

 1/ 100J7O.J270   42E397F80 39:33 . 5:1107. 1/ 100J7O..4389.F0   54J.4389.009 0809F3  030v 0809-03  09     .9O.E42E34 43800 391/ 4337 390/09   24/J9.O 2:9.7.4389. .9O9 0/09 0F5089  0/095.J27v   . 8E2 /.9:E854J. 37-90 .4/ 5:1107 :3830/8E2   J7 ./ 391/ . 80708 2~.O 2:9.2F9070098F08F79F0 $*$% E42E3000  $*&# 54J.- -E949  .7. 39790 391/ . 5:1107 .9:E8 F79FF9 9F7J9 .- -E949 ..88.8E8E42E3-O 3970.4348J9499 E42E3-..  $* E42E3..4348J9499 E42E3-O 8E2 /.8 .9O .O.7.4/ 5:1107 :3830/8E2   04..54J. ..O 2:9.7E8E42E3-.7 E42E33F.   'F09034E1F7F8.

24E8 ..49.3..8J9E8480.8J9E84.9.493.0902E89    0E.79  F8 00903 .30.E8.84392E7302 0F79E9.24E8-4348907Q09070     $97:9:7E95747.F9 09.5747.9F43.4792:8  ..307Q03/v   v147/J9E8 47/J9E8 C880 807089F8 :99.24O 10.8J9E84.2030 00903 -0203090 89. 1F8.03.33.4393:0:7O:9.F5439.4792:80708F8F.00980. 89.3.3:9 F80E9.3:9:30.9E8 . 30.3  10F5J909v .9 002F80:9E3.3 0 10.-70.50.. 10.24E8  . .4--7EE9E893073. E914OF5.8E.. -J7 ..03.8O3..9E8 1477E8 O/ 9E7 O/ 1:99.9O O/   .F.4792:89O. 9008 2F79F-03 .E3847 8E2J9OF550 807093F3 204/... 009908J9Q 897:9:7E95747.E-- E742 .494 F...1F0200/323/..8E2J9OF5.9.24E8 .83E.3.902.949  .1000930.9204/E80..5E3 009./.O8J9E8.0 . . O .0 9Q7v/30./.3.F. 480J9803.24E8. 1039 02J9099E74280700980J98FF.E8/39F80   'F02F30280739.020100v--09   4. .E9.4792:8 '.9 0039  4 .9OO/  !747.2F88.9O    80. 1477E8O/ 0F8J9F80  330 20. 0v79 2~.009009  :9.9.  4 -E720 . 5747.9.   9-- F5F89 147/J9E8  880807089F8 1:99.09--0E.453 J708 9F900 2.290//9. 8945  .E8 /39F8897:97. ..8J9E8 F809F-038 O 02E8:9E3100F8:9.4792:8  03 F5F80 Q 08v/008 1439488E. 897:9:7E95747.F70.4792:8:3 .4792:8 8 703/00F870 E  /v  F8 9E70 F3 ..E.03.7v  330.3..87.4792:8 E9./.5:9.E-.  !747.    82F9F8 0v 90890v.24E8.:8  2 F8 . F9.F 5.F8.50.5897:97E-OF5Q10 00-E7442-3E.7.10..0  2033-03 9-- .3-./.00/v/   897:9:7E9 5747.89.9O 8v902E8-.4..9--2~.9.24E847 .

  8 243/.7.2:3 00903 E42E3-.0 147 09..F3-03  0F79 .F3/0..  03 24/:4 E42E34  Q3 147/J9.3 2502039E: .10.20098F088070090 570574.0847/709J.E /0130/709J.247 9--5747.E94O/013EE84 8.0Q3 0 .O 2.79.O . 1v24/: 14.8348..947.F 1Q.F309  -4348 8025439 80739 .. .2.9O F80330.4-- 2F709~ 5747.O 8F9-439E8E7.33. .E9.84547948J9.F3 /013EE8E9 1Q.20    .   4E8*/013EE84 :9.7. 1472E8*5.F32009J. 302 908 009v.E 3.50.24E8   5747.93E3 0 24/:-O E9  009v8F .83903 .E 4-E8/013EE84 9J5:8/013EE84 950/01  . 07.F30 99 .31Q.9490489:7F810.2F907*89.3.0 /4 0.:8:9.F3 8.5E3  4 201Q.9009035747.22E  24/:43 -0Q F90 0 30.F3-44 23/ :.9 204/O 1Q.94.24E8. 30.3 07Q9 2502039EE87. .O8J9E8E3  24/:E785747...3..  4 1Q./.  30./.7EE84 574949J5:84  1Q.  .8J9E84 <  4/:4 -44   // 23/03  5747. 1Q.  330 003F70 F90 01.E91Q..F39 O 880807089Q.  8F9489: 9-- E42E3-.27F89   08v 83903 .5. 1Q.4--2F709~5740920.2 9-- 24/:7.E91Q.0 .E703/098F .9.2.0099 -4 07..F3/013J. 7F810.:/0/709J.43 .F30  1Q./. 1Q.0 O .0909F-03Q39089009v8 Q3803.. O Q3 24/:4-.3 0 3.31Q.  43.F30 978F9 F50v -44 .24O/440Q99 03.33.F38070090  9J5:83F.9..33.7.8J9E84     4/:E785747. .848 E7O00 F E79 5747.24/:4.F3009 .

 8025439E-O 4-09:23. 5747.  4 19F903/013E. 100F8 8 :9. 0009 .F70.F30F8.E7O 2002J9Q 2F  4 009v. -447.   24/:7./07  10  E42E34-.F3 -4443 -0Q 00930 .F3 3F.O8 /0147/J9.-00039Q.9.1Q.1Q.8 .O9 .:/0/709J.F5J9-0. ..43-. 99 .OF8/0.79.2 O E9903909v F8 . -.49 8Q8F .7E.E44992E7.090v F79020F8 0 5747.0F7F8:9.E7 0 0F88F08 02-07   030 5747. .4348J9499202O7./   3. 30.7E.04E8/013EE8450/...9E7 1Q.907009 20/:5E3 . 0809-03 ..F9 /Fv00F9088Q 239.9E8.F3.F303 J.O99  003 .. .9O.0 4-E8 /013EE84 23/03 1Q.OE..E--.2:3-.F3 O/E99.0 703/00v 202O7..0Q303F.907Q0909  1Q..  4 ...2.907Q09 . 147/J9O3.O .9F43  .:/0 /709J.7..9E8E7..4.7EE847.7.  5747.83E9:3  4  4 .8439 .8J9E843.247 9E7009 14./:3  302 0 .39 02-07     013J.-44  . /0.E94.F 908 -E7203 E42E3 4. 07.3E7O.9  47 -08FQ3 0 4-09:2 /013EE8E7O  .147/J9O-0F790.3 0 900v. 0.  3.943 9:/:3 0 1Q.003.7E.E94O034-09:24  O 3/03 1Q.32.1477E8O/-.570574.0.943 9:/:3 7E  %072F8090803 23/03 /013J. 3F.2 .7..49    .7E. 0 202O7..   1Q.3840809F-0384E8 .79.200 9. 24/:4  ..F30 /0.  0F79 8Q8F08 . 30.2-.O 574949J5:8  F8 /013J.8.49 -4348 0. .7E.F320J7E8.0 703/00 F8 -948J9.O 30..  -E720 -43.09v-400F3     1039 002F8 .8. 8.33.9 8 20.-4.2 .09Q3  4 0770 .4 . 3.Q 979F330  .8E3 0// 8 Q3-8F09 9099Q3 /0..9200vv03 . E42E3 30.77..843OF5503  .302.0 . 0F799:/9:3-08F3 0 1Q.9.843J9.3 8E2E7. 1Q./07E42E34.2  2F .E94O0809F-03.5.3 009 239 0 -090 74. 2~/vF508 8 4.8 .F30 . .OF8/0.0090   90899.E94. 02-07 807... . 0.O .4389.E94O 8 3F.F30   O 20J79 5747.20.907Q090  .  --03 . 1477E8O/:3-.84547948J9.3F. 0093094.090v 802F909F870 09 0  5747.  .7E./013J.. 1Q.0847.J2F7v  O .:3 30 F8 20.9E74:-4348002v9 0.Q3-8F09908/013J.907E3.7..1477E8O/.20009 8809099 :9.09v4-09:249 .O 0-03 /0.F3000039F9-03 .. -0F0F8F9 .F370  302 .49O 8090 50/ ./07 E42E34 -0F0F80 .1Q. 90E9.2.9.

E94O14.47 . 1477E8O/ 20 5747.7942E3.548.O9  ..   4E8F099.10   02O7.OF8/0. .  . 489E. .20 24/: 1Q.204/49910. .9:8./499 .2E..F3 ..E91Q. /00.Q3-8F09..009300 O 03202O7.79.E8 O 05747.08847. 03   E9. 014.7942E3  F8 F79F  %4.320082070/3Q3.30./.E--002v0.21:9E8.9802038-03   ..F30/0. .9:8F099.5747.3 8Q8F  4 .0 82070/9Q3 20 0// 3F.. .9E74.79.79... 2E84/ 24/:-.--.93 F8 . .33:E. . 8809099 :9.7E.3 10  ..9E74.  E8/. 202O7E-...20// 0 .8..3    0.43-.948 008 24/:44 F8J903 8.J2  9J5:8 2F709 F8 F79F9.2 .F807~. .2 . .202O7E-. ..E94O 94.20 708907F-03 979F3 .5 03330F970   .20708907F-03  .8J9E8  .31Q.E88E2:7.99F9030  /3.E94O F90 9E70 .20709F3-0Q    -4839~   24/: E42E3 839~   A099.28474-OF709v0 O 47330F970F82478E24O/3. 03 . ./07 E42E3E9 -0F0Q .8. 2.0 .E94O...-O F709v 0 . .EO/3.F30v9910847.7E.E94O .3 014.2 ..F9030.9802038-03979F39E7014. 9-- 24/:-O E ./499 -4 1Q.2E9..F30 /0.. 09v .3.9E74E8489E. .9E8E3.10009.2.9E74.20 4407Q/013EE87. /013J. .O9.200  .90085747..2847.49.77.E94O0809F-03E9E88:.88E 0 2E8 24/: 1Q.O 99 .3.08847 . ..907Q0903979F3.79. 09v 24/:-. /v8.. 20  4 4 07Q 09E74E87.E9 0. .E94OF099. 89.99 ./013J.9O8E 9. 08v 24/: 0...949.4  4 .20    89. 2./. 0.3 20J79 1Q. J 908Q3  .9 .3 :9E3 20J73  $v9  Q3803 .. 8E2E7.E94O3.2:8F099.202O7E-.7E.   .79..2:3  .79.274574..F309 ..F30 20J. .E-- F7/F80 207Q30 .5 03 .     .89.FF3  4 4.0...:942. .9 .E94O489E4E8. .O:./07 E42E39  .20 9. 5747.2 .014. 3F 002vF.F70. 274574./.E88E2:7.E3.

7942E3:90708909v2E824/:47.E94O O 89..7EE8E7.9O8E9.4.Q09433.92O/43.-.E8 F8 0108.E. .Q979F3.E./013EE8E9 .8.94.7942E3:90708909v.3...9.90085747.9O20 O 25./. .77.  1700   .. 4 . 09073 89.:942O/48J9O0vE9.989./013EE8: O F970330 2E7 ..38 .../J9E8 .20-03 /013E9: v09  F8 0F709v0-E74 .9E74.F30E9.E94O  090738O.E94OE742.F303J.24784707Q0. .  .9O8E 9.89499/0.980203803 F8 F9030 . 014.. O 05.2033-039--24/:-OE  O 23/031Q.3099/013E. O E9.E94O9:.33.79.21:9E8 .  1039002v.845479-./438E. 9008 5747.E94O2E824/:-.79.92O/43.8 4.2.9:3 4.9:8F099.99 979F3 850.  03/0.9:8.E42E3.27.2.E .93.:9.  E42E3  39. .E94O  4-E8.5E3.3  4-E8.E94O7. 24/: E42E3  ..3:E.2033-03-00039Q/0.9O8E9.FF  O E9./013EE8:0F9v0100.E81Q.  !F/. O 25.21:9E8 0v99 .E94O3.7EE8E9..99 O 25.E94O O 4E8.21:9E8..9O O 4-E8.8474.324/:4-.00903 009.7942E3: ...4.  708907F8. 2. 090739J5:8. 30.E94O2F39-02:9./013EE8E9OQ3.. 5747. 5747.7EE8839..9499002vF91F0F5503.200 3029.99O1Qv03 4407Q30/013EE87..59E 4E9.

O . /013.

 .9  .4/ 3429.

/0.7E.O .

 2.:/089/4  0907339..3    3429.9 709:73  <  E42E3  3.

/0.7E.O .

 .4/3429.9 .

O . /013.

 . E9. 0 .   .7942E3.  <  0207Q 0 F7/F8 .3  2047.   57391 / .9O8E9.E94O Q8v 09073  0 24/:-.

Q  .4-E8.8439 .247 . 89. 23/03 1Q.47 .21:9E8.21:9E8 0v99 . 5747.7E.9 200v .7942E3: ./0.20 -4 00F3 0 979F303  F8 E9./: ..7E. 89.. ..:94:.2E.E8./013E. 014.7942E3:30290708909v   . . 5747.88O /0 033084F79020 33.33.8O9 003.9 ./.21:9E8 -03 979F3 .7E.09v-4. O 9E7014.3FQ 490708909v0330 O /013EE8:.2009 .O 0F9v 0100 .9O8E 9.47. 108. .E94O9:.E949.9:  O F970330 2E7 .9:8.907Q09  !F/.2 F9  089 14 J73 .3 .8.E94O 108E24O/3.9O8E9.F3J.E-.E88E2:7. 4E8 . 8E2:7.3 /0./438E.FF3 . .. /0. 3..9 202O7. /013EE8:.E..O0F9v0100.0 108E24O/3.E94O/013EE80F4/. F5073v70  F79 E-.:942.7E.. E42E3 ... .--J..../438E.3:E.F3  803 23/03 1Q. /013EE8:4F70 O .08847 .9:88E. F8.3 ../3 1   57391 ..:942.F3 -4E3 J..-  709:73 .47 009v8F 80739 .7942E3: -4 839~ F8 302 90708909v .59E  4 E9.99O 1Q  4 4 .. 274574..2E84330F970   89.9:8 23/03 4.9O  O /013EE8: .9.. 9008 5747..E94O  . 1 1Q.980203803 F8 F9030 .E88E2:7. .FF E9. 5747. .3 .93.20 708907F-03 979F3014...9O8E 9.J7:.4E8  89.Q09 433.99 O 25.9:8 .. 09v -4 -01009F.49 F9807 20J.21:9E8.9 200v09. O E9.9  5747.88O .20 -443 -0Q /013E:3 O E9. 03 330 F970  /0 .20 -443 -0Q .FF   4E8 . 30./ 1   709:73  <  .E8 . 09v-4907Q090.-.E94O9:..3    57391 . < 2.:/089/4  391   39- .0.9O  . 708907 :.8 803 25.

9O8E 9.:/089/4  391  89.99 330 F970  802-03 ..7942E3.1 .  709:73  < 3.7942E3: 24/:839~ Q8v89.:/089/4  89. E9.9O8E 9./3 1  57391 . -4 .. -4443 -0Q /013E9 89.:/089/4  2.9 ..014.9:8.E94O.E7./. -E8  803 .9:8.7942E3.2:. 4-E8 .E./438E4 2..9O8E 9.20 -4 00F3 /013E9: v09  . F5073v70  43948 F870.7942E3: 2F .9.9F30 3./4:-0.79  -E7 E9. O .84E3.9O .2 /0243897E.E94O  E9. 4E8 ./9  -E7 F59Q3 .099  O  :948O 5747./013EE8E3  2079.  709:73  <  3.8./. 0 24/:839~ 8  30290708909v2E824/:47.39..  /0 E9.21:9E8 .9 09v03 Q3-30 009v  803 E9.  4 . 57391 .7942E3:. 2.7942E3: -08v89.E94O7F8F70.9.2:. 302 90708909v  2E8 24/:47..200 .E94O F099.3   89.7942E3: -4839~   5747.8 E. 099 3:E.F3-v  F79 302 .3   .21:9E8 .0 200030 .9O8E 9. 09v -443 -0Q  5F/E  3.E94O  O 9E74E8 489E:.E94O.< 2.9O8E 9. .79. . .47 E9.9.E94O9O  4 E9.9:8 . 4-E8 F8 89... 09  2..9:8  9039.8.E. .9O8E 9.--. 1Q.9 .79.  /0 9E74E8 489E:.E94O .9./ 1  709:73  <  .9:8 . F79F0 202.84  2F793.7E. 23/03 1Q. 4 . 4-E8.0 0E9. 9008 5747.E94OF79F00 8 5747.5.7942E3: 903909F-03 200030 .99..21:9E80v99979F3   10399:.99  /0 302 F709v 0  . .3/O.E94O0809F-03 5747.9 89./ ..9O8E 9.  . .9 .89.. 5747. 9 14 J73 .2  0914 J73.7E. 4E8 .9:8  09v03 Q3-30 009v F9030 .20-03/013E..7O  4 F9807 8 E92039Q3.7.2 839.79.47 -4839~ .F303 J. E9.9O8E9.  .033  4 .Q 0990 /013E.O . 57391 .9:8.77.< .21:9E80v99330F970     .9:8 .F5073v70 003v7.FF 9.E94O  O .2 .9802038  F8 F099. 4-E8 ..9 O 08v5747.9 89./4:-0.2.3 Q3- 0 0809-03 . 709:73 .3   57391 .   .E94O.  O  2E84/ 5747. 1 .9802038  F8 F099. 89.E8 .8.21:9E8 .E94O .. 0/vF79FF39 5747.93..

.O89J5:84 543907 03:2 92- ..E94O..9 8  247 F9 .    <   57391 .47 .~ 4-E8 F8 4E8 .E94O/0./ .3. 4E8 . E910/v/ 4-E8 F8 4E8 . .4-E8.9 /4:-0  .E94O  243/ 09.F0F7/F8009 0F9.8.434830.F70.~ .3    39.907E3. 80-- E9.4/ F89J5:84 '. F90 . 2.9O8E 9.9O8E9.7942E3 .0  F79F~ ..9E8.3     39.F30-03  8v9 . :948O 57391 3F 00/Q. 2E84/ 57391 3F2E7.   09.  'FQ .7O % !&$  .2  .4703 F799:/9:3..7E..E94O  .8F79F~.9O8E 9.E914OF50939./3 .E94O F9030  F8 .4348 30.7942E3.Q3-.3 .E94O.7.0 .2E.9 /013E3 2E8 2E8 1Q.  709:73  < 3.E30330.7942E3: .. F5073v70   2E84/ 5747.E9. 2.     30.  . 202O7E-.. 2E84/ 50/      09 J7  .~4E8 .3.   57391 .2-.7 39    14.30.   <  57391 ..9J.9  .F79F007QJ7E87./3 .E742 . 897:..9 9J5:8.9  08v 5747.F90 J3. 08v 57391 .59J5:84 807~ 9J5:84 C8809099 9J5:84 .30.   39.7.7942E39  3.E94O3.   709:73  < !F/E .E--E-7..E94O E9.4348 30./../ .  57391 .10Q3F09-v  .3 23/.9 :343 .:/089/4  39. .9 9J5:8.:.9O8E9.:/089/4  39.9J./.4--E9.

 . .. .F3009  .5499 9072F80908 8E249  .8..8.4. 4507E.4.Q 44-O 8  !F/E: . .47 00 030/F0Q  4 . F7/0F-03  3/F9 24/: 7F8F70 F8J98Q3 0 0 0.O8 703/807 20100v /v7:93E3. . 07Q9 003 100090709F3-0Q ..3 F79020  .2847   . ./9:3 .  50/ .E949.-E4. . . 09-- 1Q.90437F910.20   8..2.E94O F79F0 20.200 8E2003F39 /44E 10 .8E3  ./.3:9./.F30 /0.83E. . 1Q.90 2O/48J9O 0v9  . 5747.E94O9 .47E8.O8 /v9  09  .3 09E743 .20 ./.J28079 E9.  .72.99:. 0vv 1Q.2.2 0// -02:9.9E87.E94O3.7E.0 08E28474.200 08E28E2003 09.4389 F8 .7..F3 70:7J.. .4.E--.83E: ..39. .9E849:/.F090Q31F02~. .4../E4.9   .9 .99.4./ 24/:  10.F309 4/43200437F910.2F907F39 .3.47 .4.   .E949.900203.9E3.. . 2E84/ 8.79.. .9 .. 70:7O -0.9   F79  4 .9. 08v 8. 807093F3 0 4-E8 .20 9.   03 .83E.4389 .47. .3-02:9.930.548.E949./: ./.310.3F9 24/:9 .E49:34.3 .O 4E1F7F89 8.-.59J5:844830/ :3830/ 8479  43 O/48J9O0v.90  .83E.E94O-. 09v 1Q.E94O4 . 5.949    .9: 20  4 .9O .9 807093F3  4.  9.9  .E94O9  950/01 09. .243 J. /013EE847 0/vF79F09 .20.200 00203F39 14.  .. 09v .90 30 0 /013E3  Q99 8 .9E8E9 5747.2F907F39 .90  950/01  08v 099v .2.009009 F8J98Q3.O9 574949J5:8..79. .5499 8E28474.9O 003 .9..43..O8J9. .2-O  %072F8090803 .-- 003 23/.E94O 20./07 E42E39 10E42E3  8.Q8v..5.9.20100v10009-03      880909910.3 2502039E.%J5:82O/48J9O.9./.2847 .. 5.7. .4389 2O/48J9O 0v 20.7.94.8.:.

 8.     1 3 709:733   139  709:734880 3.8 39 35 43 .:/089/4  3.7 . 3. 8.20 .5 .2847 ...:/089/4    394880 433  39-04.

35 8041 43    1 3 709:733  147  3   709:73847.  7 709:73  <  18.9 433   .. 3   1  114503 .4.9 3.31 1 / 35  39847.5  43 2.

7 .. .200 3.200 433  <  397 393 43 . 3    18.480 1 709:73 398.   1 3 709:73   709:738.5   <  1.31 1 / ..

   709:73  14.9.480 1 709:73 <  14.    139 <  1  114503 .(    1.9.9 4880 3 . 433   157391 1 /3 3    147  3   709:73   157391 1 / .

2     923*8.20 433   89.9..200 3 .20 3.   1 3   399     1 3 709:733   :9484*147/9. 3 .     393 43 .4/:9484*147/9. 392 39  <  3923*8..8.

20 433  .(  <  709:739 3 9 3    < < < 392.4/-08:7 393 43 .3 (   1 3 709:733     92. 43     399  0 3  .*8.20 3.*8.    1 2 57391 / .

.4/703/0 393 43 .   1 3 709:73    1 3  709:73  1 3   709:73    .3*./499*8.3 (  709:739 3 9 3    3  < 39 .3*.20 43   <  ..20 3./499*8.3( 3 39  <  .    .3(.

     703/0 3  . 43   1 3 709:73    709:73  39      ./499*8.  < 39 .3 (    < 39  <  398./499*8. 39 .24 393 43 .200 43 3    -08:7 3  . .200 3.

4/147/9.  3  147  3    1 . 3...(     709:73 < < . 433    57391 / 3   1 3 147/9. .

  <    .

8 39 39 .2847  394880 43  39-04...7  .20  8.8.

5. 8E2J9..7.2F907 .

-04.00208E2E9 . 8E20030880F9 ..88..

 08v5.2E84/ .5499  . 39847.2F907F39.J270 00914.93.9 43  8E28474.. .7.

8E2J9.2F907F39..5.2F907 5.5499.7.9E9 .J270 8E20030847.7.

002009  .2F907F3920..92-../  -04.7.200 43  5. 09E74./499 ..72.J2F9 2..88./ 398.

. 8E2J9.2F907 E42E3-O .5.7.

 8E200308E2E9 .

   397 39 39 .7  14..9.9. 43  .

00208E2E9 08v . J7..

8E2J9.2F907 2. 8E20030E9.002009 .7./.7.2F907 5..E9 .5.

2F907 .5499 92--v .20.  3923*8.7.72. 2E84/5.20 43  ./5.7./499E42E3-.2F907F39.

 .

4/:9484*147/9.5. 080--8E20F9 ...7.9E74. 20.2F907  .

     39 39 39 39   .

9./4998E2 392. J7.8E28474..20 43  :948O002F9 .*8.

.2F907 08v5. 20.7.9E74.4--8E20F9 .2F90700208E2. 03.7.5.

 2E84/5.2F907E3.92-  .72..7./499*8.3*.9J7:3 39 .7.2F907./5.20 43   39  .

8E28474.9 08v002F303/00.7.E.2F907. 0027 4209.92--03 .9O 0 300/5.

 .2F907-03 .2F907239  8E20 .7.7.08v5.2E84/5.

4/-08:7 39 39 39   . .

200 43 39  F79FF9.2F907 39./499*8..7. -087.8E28474.:948O5.9-. .

92. 208E24.2F907 2E84/5. 4E3847 08v5.2E84/5.2F907.7.7. 147/:0v.2F90700208E2.7.

08v  . 2398E20 .2F907-03 .4/703/0 39 39  5.7.

 .

703/0.949  08v5. 43  .7.8E28474.2F90700208E2. ..4/147/9.

..7.5. J7.2F9079147/J9. .

92. 2E84/5.2F907.7.

24 39 39 39 39  .  398.

F3  .2F90701Q.09v 9:.7./438E 002009.7.2F907.9-.72.3 08v5./4999:./5.7./438E49 .92- ..2F90700208E2..8E28474. 2E84/5. 208E24.20003v7.

      .

 433  709:73.3*. .20   3. 433  709:73847.:/0 8./..4348   10.  99 E42E3-.:/089/4  3.2.9 .8E2009    08F8 8E200308E2.3:.3  7:  .20 3 <  39.  0./499*8. 433    709:73   .3 .9:948O 2002F9 O .F5073v70.20 3  <  39.9../.090v09 O .200709008Q 4   8E2003088005E748   8E20030847. 3.5E7.949 2.. 433  709:73 4880 3  <  39. 703/00998E28474.2847    39.3   8E20030E9.9..200 3 .9./499*8.200 3   <     .9 /499 0 8E28474.9 3 <  39. 433    399  9./..703/00998E28474. -0 99 E42E3-.:/0 8. 433  709:7323*8./499*8.923/03002F309Q7F8F9 O E30020.703/00998E28474. 3   709:73 39 99 <  39.9 .79.   9.0F8   080--8E2003:.

2.E94.05747.9O 0v . .  57391 /3 8.9 88014.  -04. .24 3 .24 3 . .9  0:9E3 003F39 0 0 147/J98:  2...  42507   147/J9O 80J98FF.24/: E42E342E70F8Q90   .090v 5.   7 3 .84.22E80708903 F90305.8.884747039E9147/J9O 0.9.9.3009.2:3 24/:. .99 . 3: .499147/J9O . .7.  57391 /3 8. 1:99..47 5747. .24:3 . 2   57391 3    147  3   57391 / 147/9.9O5747.  99   8. 24/:.88:8.0 .31 /  2   :9484*147/9.3.0807089v.3..7.9OO/ .20 .9 -0  .24 3 . 5. .  57391 /3 8. -0 99   703/0 3 .24 3 .F70.24 3 . 3 . .3.  57391 /3 8.24 3 ./ 880 0 807088Q v09  !F/E: . 2 43 .. .9: 0 5740..(  57391 3   57391 /3 8..  57391 /3 8.  709:73  <         4.47 0 Q3 8. EJ9.3.. /44:3  .8 3 .103924/:4.9 F85747...24E8 73009-0E. .24E873009-035747.8847 147/J9O.7.900903.3    393  .0 0 20807088Q .

147/J9E8070/2F30.8.20 49E7O/ .

2847 ..8. . . .

2847 49E7O/ . 147/J9E8070/2F30.8.

 .10../. . .9 .

10.2847 410././.9  .20 48. 147/J9E8070/2F30.9 49E7O/ ..8./.9 4 410.

000310. 807089F8./.9.1:99.9   .9OO/30.

/.9  .10.

 .

 .

 .

.    .9OO/.9E8.1:99.F70.9.

 .0 70:7J.8  90 080 3  8O 7 . 0770 .902.2J0:9:3    .  0 .  8 . E .30.F  .9.4 7  ..F8J94.9.88:85F/.499 J8F7090/09 147/J9499847703/-03 2J23/038Q8F08030/F9203028070  'FQ.O8J3~ 2. 4  9.99E2E7 2F8..3  .1.88.1. F5090 .3  4   E9 .3030/F0 302:98 .     3   847.947E870:7J.9.9 .3     . 009908J9Q  ..843O  /0 0807~-- 00 0.9O   08v 74/E-.  E9 F 0 F.3../.E7E4.3     9 . .//  2J 04.F79 30.2F79-0F59F. 1F-0.   247 -0F58 4/.  0F8  F09 0  E9 FE.70:7J..3    .470:9:3.O ..97.E-- 030/F -794E8E9  30:9E3./  149. F50909 .2009 0 2E8 74/E-.E9. :.F509F0     3     3  3    .3.9E931.843O99.902.3  .843O 2O/43 3 3  c3 3  c 3  c3  ccc c 3  c3ccc c 3  c3   . .00909v 3   7. 09 .2.20 20807F802E7302109F900 094.5..54/  239 . 1039 F509-03 .1039E. .9. 2079 .3 : E8  0  03 90 0 803   .5.080-- 847E89 109F900v  10. 9O   4 .9.947E83./3.00/-0. 0vv74/E-.08v74/E-.3 .E 4 3  42 03  : 8  #&# 0807~03F8F7/00803  %0Q 10  4 0 -4348 030/F9 807093F . 030/F 20807F80 109F900 0 2E8 030/F -794E8E9  .89 .E3   #0:7O.3 EJ9.E-.88.  %072F8090803 3   8 .70:7O14.3    .E49E 0v87 .3 E7. ..9:84 .9O/. .0F83 00  F79F02000F880739       3          3  3    .947E870:7J. .00/ 4.3..90 O7E39. 54E7208907 .9E-.949 3   .E9499. 3 8E2J9E8E9 3  089F3  .314E.E. 030/F9 .9. 8 4 .94/ .2E..89.8E3  .. F5090   2. 08v 3 3 9072F80908 8E2 847.3  A8 0 J149.009 3   8E2J9E8E7.Q0F        9.

7...F.E--2J0:94.    03 543948.2 . .843O7O. 8. 08v 3  847E8 0.. -09903    .08   4 4 9 003980 0  4 . F79FF9 .E3 . 10.0Q  1  ./.2.E.33. 1Q. 2F 3 5F/E39 2.0.090vF55034/. 10.OE-. 3 8E2J9E8E4 8Q8F08 . 70 . 3   F79FF9 0039  F8 394 30 0 9E.2F907F39 .949 .3 .8439 3 302..:8 80J98FF. .090vF55031440E73    97:E42 .E94O 14.9E. . 20  9.38O   A8./.070/2F39      9E.9 109F9003F  4 O34. . F509F-v .4748E37F8F92039.0 23/03 1  .89O03303002 3847E890..090vF550343/44/   ..   F509 ..F .O8J9:20 907..90039 40.31472...94F8.239E93144/..0 .:88.E9  ./..947E8 70:7J. v2./...9J.F3  1  F8 1  . 3  ./...9E-. . F8208. . 4/.  09   ...F3 9J5:8E.#0:7O.F03 ..E9  .20 391 393    1 3 709:73  080   395     147 393    5    709:735  < <   01009v 41 10.900810.38O  0 E9 0 0090903  803 0 .2O/8073030.4210.E9 9E. 3F79FF.5E3 E9 4E .E.27.942 4748E37F8F9 E97:E42 2.F: 9~   4 8E2J9E ./. .2-O   !0/...8./0:.  . 3  8E2J9E8E3E .. 80705F9 0  .949 91E7.947E8E3..31 713..2.3077v.2033 3 847E89   3  089-03 09 0 147 .  A824893.  F8.8J9E84 82F9F8F9 .. .843OF5503140E73239v 0F79.090v30  0F79 .8439 033F 84. 200J9F89 .47 F3 8 F88F0803 204/42 .2707E900.0F810.2.5499 3 1.. 10.8.5499 070/2F39 2F 2084742 3 30  F8 2E78 -Q8F0/090.3390039 4-0243/42.. 9E.3 %0Q 10  4 F9 1Q.F70 0 . F302080--   1.0  23/OF88F5 /0080.9E9  .00. F8J94.247 -4348 :9. .4348 9J5:8  4E8 8.949  0. 9E.. 90909 .27.FF8F30 10.. F79FF9  1  ..EE9 0 398. 5.

9E8E4 8Q8F08 /v9 3  0809F3 F8 9 .E84 147/J9499 847703/-03 100v/30 -0 239 .. .947E8 F79F09 .0 23/03 1Q.3 -434O/ 0 .3. 1/83970  -..E94O 0003    .3E8 0809  4 209.E8  .F70.47.100 .090909F80.E. 1  1Q. 70:7O 9E3  F8 0-03 2.7. F5.E-- E-7..79 . E99F7-03 979F3   70:7O F5F87v F5F870  7F8 50/  2390 F03 14.F3 391 393    399.F3 J.0  4..0   38E2J9E8E41 3  8070820J.1:8..F70.2 0 70:7J. .     1Q... 1   1Q.F70.F3 :9..32~/  %0Q 10  4 .0F-03.1 3     709:739.909v70.. 3 089F3 ..E-7.8v 2O/8079 .E8. 1Q...F3J.9  .F3J.F3 9..2.8v3  .0. F5073v70 .9E8. .80J98FF.47 .93 .0099 F5..99.  .E-7.9. 30.2-v  0809F3   9 9 /v70 10..F70.  9 9 /09..F8.E9 3 0 F8 9.E8 AA3  .. ..  7.1 1Q. 020098E2E. 23/. . 9 .3       1  F 3   1  F 3   1  F 3    1 F     3                          1 1Q.  0F79319F903QF79F80739E9.F3J.31Q089. 0200930  20100v 1.8J9E8.0    .F.. 8 84E.   F79FF9  O '88..3. 3  < <  9F3000E38/04.99.F3 80J98FF.3F79F0  .. .0 0Q .E83./4995. 8.20. 909v7v  2. 1Q.2F907  9.E-7E3 O 3/:.50/4E8.v8397v4499F79F09208474.F .31Q.F3J.20F79F8F0   2. 20 0 003 .3 E-7E4.  1 3 709:73  080     9.  O '88.09 23/03 83903 8E2J9.7E.009 .1  1Q..F3  O 020 ..  F79FF9 807093F3 J7...4 00/v/90    .

Q-434:9 70:7J..89. -434:9 100  '099 0 5 . E9. 907. 8.9J.E.3 14:  ./ 9. 2.. 1 F  .. 10.  F79FF9 :9E3 50/. 080E43 .E7. 200J9F8 0807~  00E38 F8 0F79 3303 5747.E9 7F89v  ..94..  . E9.20030907.. 1 F .E348 0809 3  00F8F3F  .9O  239 2./.F3.88:.E3 .E94O9  4 .31Q.F308  0 E9 . .22.20-0 0/09-03  09 9099  .1  J.33.:9E3  9 F8J94. 70:7J..E--2J0:9499 3   1  5439 147/J9. ./..204/E8. . 302 19F903Q 8Q8F08  803.. 1:9. 0v87 0-439499.0807~100  2.9.%F3  4 .E94O9  .9O  0 :9E3  .E48.F3 897.E. .-434:910F  F8-0.9 0v87  9. 70:7J.E.3 Q3. 2O/807 478.8439 03FE3847485747.0807~03J3F0930 080709:731 3  3  F8  .00/v/ .E94O-.F70.9FEE9  1   F5J90990 10 .E8 E9..70:7O  #&# A!A$#u A!A$#  08.0807~9v .9 40/v/.E94O .F79 ./.9..47 8O 0 . 907.  9v 3  .9J. 0vEJ9499.39 40/v/.....F8.11Q.703/J.070/0910..2. 3  8E2J9E8E3. 4-- 897.3.2 8 . .E97:E4994748E37F8 204/E8E9 .204/./9 .20 ./. F9 1Q. 5 . 9../50/10F5J90990.F70.8F39.9F.0099Q -0 . 9E. 204/E89  4 .. .9.5.-- F8 0.247 8 .3 8477.32:8. 0807~9v .F8-F 202O7./.7089F98071E7../ 000-- -0F58 .9E8.5499 F79F-v 10F5J9Q. J.83E...949 .9J.   70:7O 20... E9499 4E .9072F809088E24 1..243/E8280739.9204/E8E9  0100F8Q EJ98: 802-0 .  F79FF-v 3/:.E3 F98F9003Q  70:7J.E3  29 148 243/../  47 E9 20 .947E8.204/E89.4O/.94 0-v 30899 ...9E8.8J9E8080E.10.F3. 70:7O 4/.24..E87. 9.20 . ./. 02 30F E9E93  4 . 10. -434:99O.. 979F3  ./.

9:E8 5.208Q09.2F907F9 . 03  .E8 .9E8E9 . 3 1472E8 5.9 .11Q.F3 . 1Q..$9.7.F3330.2F907 20.5. .E9O J. .7.~1472E85.7.F70.2F9070.

.F70.208Q09. .9E8.:9.$9.30...~4E8.E94O.8J9E87F8.9. 03 .

9O/.F3.F70.0 .1Q.9E8. .1080EE3149.2.

.3  F8 .8J9E89 2039 .F3 0 -O .. 5439-. 1 1Q. 8  0--03 .E.20.1   :9.8.F70. .3 ..F3 . . 00/v/ . . 1   F790 E3E-.2E84/ .9.84. 1 1Q. 9.9E8.E87. 302 9:/: .F70.9E8.F70.3  F79 101Q089v/ . 1   J.

.2F9070.2E84/E9E7E88.$9. 03    .~1472E85.7.E9 330.208Q09.

 F79FF9 .E9O J.7.5.E8 . 003 .2F907F30 .9E89 . 3 20.F70. 9 . 0 . .9:E8 5.

~.30.208Q09..9E88.F70.2E84/E9E7E8:9..2E84/.9E8.F70. .E99.E94O. .8J9E87F8F30.

0 .2.F32E84/E9E7E8.1080EE3149.1Q.8 .9O/.

.422.1  :9.9.9. 1   F79F E3E-.F70.. .F3094.3 F8..1  J.. 22E7.E--E9E7E8.8F39.3029:/:./ .8J9E892039. 1 1Q.3  F79 101Q089v/ . 00/v/.8.E.3 0..1 1Q.F3 2E84/ E9E7E8.5439-.72.E87.8 0--03.

$9.72.~1472E85.E8 .E9330.2F907F30 . 003 . 03  0 .5.208Q09./E9E7E88.2F9070. 09 . .E9O J.9:E8 5. 3 20.9E89 . F79FF9 .7...7.F70.

.8J9E87F8F30.F70.72.9E8.E94O.30. .E99.F70.72.~..208Q09.9E88.. ././E9E7E8:9..

1080EE3149.1Q.F3.0 ./E9E7E8.9O/.8 .2.72.

.300/ . 5439-.E. . 8 0--03.8J9E89 2489 802 9:/: .72.8F39 .. 1 1Q.  00/v/ .1  :9.E--E9E7E8.3  F79 101Q089v/ . 1  J.E87. 9.F3 ..F70.3  F8 . 22E7. 1  F79F E3E-.F3094.422.9. ./ E9E7E8. 11Q.3  0 .

 3 20.2F907F30..E8.7.F70.300/E9E7E88.2F9070.~1472E85.5. 9 ..208Q09.003 .7.E9330.9E89.$9. F79FF9 .E9OJ. 03  0.9:E85.

.300/.E99.30.F70.9E88.~..208Q09. .E94O.

 1903EE314149.00 0809-03  ..F70. .9204/E8E. .3E810.9O/3.9E8. 2.1Q./.F3 003 300/.-.

.$9.~1472E85.E94O.F3300/E9E7E8. ..0 20../.  09~3.9 070/2F3F9 .3. 7v. 09 3O 20.9F7J903/v F79F09  .. 7v.7.5. F79F0 -0100v/.88.$9.300/E9E7E8330.300/E9E7E89.2F9070 .1Q.. 1Q.  09~3. . -.. .F3 30.3E8 10.

 .E94O-.33..3.2 302 2E8 239 ..72.~ .9O/.5439-.9F7J9099070/2F3 .3 .149. 2489 2E7 703/00F870 EO 1  F79F  . 300/ E9E7E8 E9.. -007Q .F3.11Q./ E9E7E8.88. .--. F79F0 .4. /0F3 101Q089v/99   9.8  . 30.

 7v.7.F3 30.. 7v.~1472E85..0 20. 3 0  J.E9.72.  09~3.72. ..F3.9F7J9099 F79F  08   302 2E8  239./E9E7E89./E9E7E8..88..1Q.9 F79F09  .72.... 9. .$9.. 3 847../E9E7E8330..5./ E9E7E83. 1Q.2F9070   .E94O.72. .  09~3.F7900  -0100v/.0 003 .$9.

.

5.8.E94O 20..F3 2E84/ E9E7E8. ./ E9E7E8 E9. 149.F79F0 .33. . /0F3 101Q089v/99   9.72.  .. . 30.9O/ .9F7J9099070/2F3 . 2489 2E7 703/00F870 EO 1   F79F09  .3  .4 .2 302 2E8 239 . 1 1Q.~ . 5439-.3 .88..--. .

9 F79009  .F3 30.. 9.$9.. .7...2E84/E9E7E89.  09~3. ..~1472E85. E9. .1Q. 3 0   J .88.$9.2F9070  . 7v.F79F0  -0100v/.0 20. 3 847.F32E84/E9E7E8.2E84/E9E7E8330.. .0 003 2E84/ E9E7E83.E94O.. 1Q. 7v.  09~3..9F7J9099 F79F   08   302 2E8  239.5.

 /0F3 101Q089v/99   9..E94O 20.9O/ .88.4 .9F7J9099 070/2F3  . 2E84/ E9E7E8E9.33.F3 08v E9E7E8. .2 302 2E8 239.--. 1 1Q. 30... . 2489 2E7 703/00F870 EO 1   F79F09 .~ . 5439-.5. F79F0 . . .3 .3  .8. 149.

2.  09~3.9./.2970:7J. 9008 10.F79F0 . 7v.F3 . 3 0   J . 1 -.3  ./.88.7.3E83.1  F79F .9  !7O-E:20E9.9O/ . .1Q.2910.3.3824892E7703/00F870E.F308v E9E7E8.10.E9.9E8109F900 -.E9.F3 30. 7v. 1Q.0 20.  09~3. .1 E97:E4997F85.08vE9E7E8 330. 3  .949 -.3 /847E8 .-4398070803 009.9 204/E8E9  030v 0809-03 ..9F790F9 . 5439-. 9.F30   0v--0-03 .E8 E9./.77O . J.9F7J9099070/2F3 .. 2.949 0 4748E37F870 .33.47 10./..1Q..3 9J5:81 .1Q. E97:E499 F808.49 8O  4 2F39 0J9 20 0 70:7J. 3   F79FF9 -948J9O 08v 3  847E8 ..~1472E85.E348J9.E.E94O.8439 3  F9 7F870 489499.3 .. . 10.2F9070   9J5:89.090v8./..1Q.. E9.5.88..2F9070    8.7.--.10.F308vE9E7E8..08vE9E7E8 9.0 003 08vE9E7E83.. 9.2F9070  49.E97F8  < <   .8    #0:7J.E97F870 ..3 1Q.23022E8239..3.95.1039200J9F82O/49 .E.$9. 3847.   F79F0  -0100v/.9E9 4.7.$9.3E8080900F80  080   9. .F3 .9F7J9099 F79F   08   302 2E8  239 .. 10. /0F3 101Q089v/99  :..:880  . . 38E2J9E8E3..4 ..

00909v.3 .8 .-439 F8 2E78 20 ./. 70:7J.3 0 14. E97:E499 7F8 070/2F3F9  4.  0/Q.E97F89v  %4.97.3E97:E3E3-0v0  .009vF7/F89  F7/F8 4. .E97F8204/E8./..E.83E.E.7.1v10.F3 $0J98F09. F7/F870 ...: .9O. 1Q.90.F39 . 10./.9E743 .E--E 3./.807~1Q.98./.F300809F303O.3 E97:E./...E.E3 20.E.3FQ 4.949 204/O 70:7J. 200J9F8 3./.2F90709   F7/F8 :9E3 9E. 1Q.8F7/F89   .E48.94 0809F-03  ..109088Q.88.900810.8   3 8E20030 880F30 8E2J9E8.E9..8.5: .E97:E49910.29870:7J.  4 900803 10.88..E742:. .08E28474.E 14. 3 9072F80908 8E2 8E200 880F30 8E2J9E8E7..9239.84:.09020   !F/E: 003.E. 9903 . 10.9 8.O./.900203F3910/44E8E9.337.949 .90--03 .-43 ./. 420.3 10.10398..E.  F7/F8 47 9039Q . 10.200 0 8E28E2003F39 . 204/E8E9.E3.3/O 4748E37F89 .3..090v10.10.  0770 .9O /00807~-- 10.10./499 . 8.090vE7427E.43 070/2F308  5F/E: 4. 9033 .300-09 802 0 9033  ./.. 3 . -.00909v .7.95.3 F5J909v 10 0--v.843OF5503204/.9070/2F30.3E83.9   7:3 70:7J.

/.2079 3.9  803 :.   .843O 10. 0 9072F80908 8E2 8E20030 880F30 8E2J9E8E90039 /00807~-. 3 8E2  . :948O 8E200 3FQ  8E20030 880F30 8E2J9E8E7.8.   0 .3.

3 E97:E. 3 . 000.080--8E20~8E2 239 3  %0E9 .3/O 4748E37F8 . 70:7J..

E97F8 50/ .09802F909 3028E20~9072F809088E2   3   .   8E20030 880F30 8E2J9E8. . 8.. 00F80   . 08  .E--E-7.2 .2   3. :948O 8E2030 3    .

 9. ..8  :9E3 .5: 3 .  3      .E94O-.3 20.E..

 3  F79FF9     . 880F9  0807~03./: 3:948O8E20F9 .   8E20030 .8:5E3 44E.3390 2F9033Q3.

  1 3 709:733  080     9..20*4880 393    399.. 2E84/0809-0350/  A82489.F3  398. 8E208  .47 .. 903909v 2E7 .247 014499  3  08v 0809-03 . 204/E8 2.09003.8   10.20*4880 3. . ./.3E83./.E.8..1Q.10....9 -.949204/O70:7J.47 8  . 3 08E20~ 3  .

  (   .E8 .E. 9008 10./. 3( 92- .309E74. 8. 34243 . .0.9E8E9  2.9.203000200.3  09F900Q  4 .-43.. .4748E37F8204/E8E9  2005F/. 3 (  E9..33. E742 :.E.9. 2.09 . ./. 8.3       3      3      3      3                          8..949  8Q8F90033F9F. J./..09E74.2.E. 4 0v87.79.92--03..84: .9 8.8E. .822097:8 0  0/Q 7.. 3 ( 7F892-.E348.( . 3( 0020-03.3 .94O. 54397...70:7J. . F79F09 9F7J9 .9 .E8 E9. F8 . . 3 (. 8.  54397.43.8    .9. 03:E9  .00E9.9 8  .00909v .2.79.  2.33..20 0 4. .247 .090v 10.    709:739. 204/.E97F8 .E-- E-7.F3J.E3.F39  .94748E37F8F94/: 20.3( 7. .E97F89  43-./J9. 3(. 8E28474.20*4880   1Q.9E7. 10.. 0 3:E9  . 9.10.8E3 .99O 1Qv03  40 3002~8E28474. 92- .F807~-- 0v87 20.E97F89  F79 F79  2079 -4348 08090-03 .9-.  4 20./.8E.E--2J .3 . .8E.   .    7:3 70:7J.9 ./ 50/ .9. 3 (7F892-F70 F8J94.10.F70. 1Q.3E88E3028:474/  .88.   .(  . . 4.:9E3 .3 08090  03 . 9. 3   < <   .88. (.8F7/F89 0v87 ./50/.

 8E28474.. 3(    ./.3   ..47 8Q8F08 .479. 3(. 3(.  .8  .. 070/2F3F9  J 43/44/.9-.E--E-7E. 0 002099.9...3 20.8E..28 0 302F90v8E28474..v 43/44/E82O/  2F8 10Q 20 .3.80v 002 3:.F79F04. .8EE8./.-43 .430090300220.. 4748E37F8 . .  3(   #0:7.9070/2F30   .2.  ( . 50/ .( . F8 302 8Q8F08 .   (  .E3E2.:.5: .E3.E348.070/2F32.E348.  E7 .3 E97:E.3 8.3 2E84/.3 3:. .E94O-.79.949204/O70:7J. 3(  E9.1Q. 8  8v9 00809-039008039v0141Q03.8   10. 3(92-8.  ( .E. 0v-- F9 2O/8079 035F/E:.9 0809F-038Q8F08.E97F89 F5.9 . .O  4 . .  ./. .47 3.. 3 (  E9.090v9  . .3/O7F8 7F8 E97:E. 9.83:.  .8-.090  4 9.002009 .(  2E84/-.80v 002 302 3:. .E97F89 F5. 20.   2E8009v8F . .9 . 8.9E-0 80300..8  :9E3 . . 5439. 8./.8E.. 43:..E.90030809-030v380-..8E28474.47 903909v -. . 3(.10. ..  .3 .0809F3  .3     ..(  3:.:08477. 3( 92-8.E..802  20.3 33.5E3 0 .Q .  3(    08 10.3E83.  ./.7.9. 009 802  . 202.9O3:. 4748E37F8 . 3(./499 8././9 002 08v 0809-03 .10.3 ...  .. . .9E3..  08v ..08vF92O/80792:9. ( .8 .  3(8..2079.3 .   .8439 .8 . 0.E94.900F7v. .10... .3 .9:3 .9. .E9O F7909v/v034. F0310.E9 8.9-. .8E.. . .9.94 9072F8090 20.E94. .. (.E94.E9 #0:7.3/O7F8     0809  7F8       0809   . . ( .. 9. 3 (.. 3  .F3F9.3  .  ..9-.( .5439.10. (.

 39  39.3*3:.. 39    .3*3:..39.

 3( . 003v7 4..

 03:E9 ...79.2.89. ( 92-8. 003v7 4.

 92-8.. 03:E9 .79.2.89.

 .

. .  399..

 .

. .  399..

.847703/F9 F79 0.9E8E9   08093 ..    <  < <  . 49. 1 .010.3                                0Q20 4..3*3:.E97F8204/E8E3.8.E97F8         .807F9Q./3F8.E-7E914:20..3*3:. ..F5..3*3:.F3J.--F79 .    080    <   709:73. -J...( 709:73    080.  3 1Q..8.3*3:.3:2E34.34243. (   <  2.E.9.     080709:73   080  080      1 .E8.8O7.( .F3009 .. (   .(  4748E37F8 8.3*3:.3*3:.4.F81Q.. .4748E37F8F8.   .2E84/5F/E-..  .F820F7980v09   ./. (    <  2.8  10.( 709:73 1  ..30.  .5439E4.F70.E--E-7.  1 3 1 .3.( .3                                                      08093 .843.09..   ( ..8v014.

39822097:8 39 39  39822097:8 39 39    .

. ( . 003v7 4.

.8822097:8 0 . 003v7 4.. ( 92-8.

8822097:8 0 . 92-8..

 .

 ...  399.

 .

..  399. .

-.0099 :. J. 8 1v 0009088F0  4 20J..F0 .3 .E87..F30  99 .(.7.003 .9F7J9  239 070/2F39  .   O3. 0E7E843.5: .2E850/302   .4/ 1Q.29  F8 09 .3 0 30.8  1 7F F5Q  . 70:7J./O/O.     <    080 O3.   1109F90      -O3.29   70:7J.9  %072F8090803 99 8 F7.O 8. 70:7J.   4E8/013EE84   .(.  14: 10 ..20 003 :. 70:7J.E83.4.F308 . 0E7E84 .88. 0E7E89  239 .2030 0 E.9E-O .5./:E8  --v ..4/70*0 5.:. J. 70:7J. 209F8  4 . 109F900 99930 0 0330  4 -948J9..F30 F8 ..0E7E84   .E-.E 32.( 709:73   1 .2F907*89.9. 99 07Q 847 .47.8J9E8  .E84 E3.090v.      70*0 5.3 8 E9.F3 8E2J9 .   <    .70:7J.E.7. 1Q.09v Q3-8F .( 709:73  080 080    709:73822097:8       709:73822097:8       < < < <   #0:7J.   O3.2F907*89. 1  82097:8  1  709:73  080 080     1 . 0E7E84-. 70:7J.  4 ..3 . . .. 0E7E8 50/ 0. J.O3.8 1 :9.. 1Q.

 008 907Q090 :9.E84147/J9499847703/F-03.33.00909 0  03 .  907Q09  803 .F70. 70*0 0E7E89  .980J909. 70:7O . 70:7J.9O/3.F70.F70 .E.:. 1039 8.3 .EE3.3  13  .9.0902F30F39  3 807 14 20J.J.9O/.F70 /0000../ E9E7E8E7O . 43/4.8J9E8.0:9.9E749 0 .3 01:99.  4 . 247  E3847 F8 203 847703/-03 .810v99907Q09  .$  .E80v99907Q09  .9E8. 70*0 0E7E8  .J.9O/ . 07Q847  907Q09.23920E9E7E84847E307Q30. 70:7J.:.E84147/J9499847703/F-03. 0E7E8 -E720 :9.080--807 239 .3 80J909  4 . 2E84/ E9E7E8-.E3E9E7E87.080--807 239. :.70:7J.33847 .3  . 1039 907Q090 .20F70 07Q09  .E84847703/F-03.8 130270:7J.  70:7J.07Q847  -907Q09.E84 847703/F-03 .70:7J..:..E3E9E7E87. .8 . . 143948 .8J9E8..    .3 8O  5F/E:  0039F80 847 07Q  .EE3.9E8E7. .:948OE9E7E8-.3.E.43 00807~8J9099 .33847.3 302 07Q 847 .313  3 3  3  3            1 109F90  . 0E7E8 E3.8J9E8.9E8.O/3  033807 08E9E7.E7 .F70.9O/.. 0 3.F70  3/0 .0:9.J. 3/00 0  4 .3 . 0E7E8-.109F90F79F04.8J9E89 0-4348907Q0970J7:3 %0Q10 41:99...090909F800 .0909Q  4 .109F90F79F04.J.9E8E7. :9.3:2E34E8:-.3  .3   239 201009v  . J.-43 .    1039 E-7.F70  /000 0.9..:.. .   .907Q09803.E48. 70:7J. 1 - .47 3303 34243 .8.847E3 . 0E7E843.90 4.9-. .:. 1 -  .907Q09.  O3.330207Q847.0902F30 08  .8 170:7J.9E87.8 1:9E3907Q09 - . Q3-v O3E  E3847  203 847703/-03 . .F70.J.--. .9.F70 .  907Q09.90 4.9E8E7.E8:9E3907Q09  .    . -02:9. :948O E9E7E8-.9: .  2F884.9O/.8J9E80-4348907Q097007Q  .3 E9E88: 203 .8170:7J.  .090v E-7.8 1 7J9F80 9 907Q0909 .

1039.907Q09.   .907009 4..8 -0 ..  !F/E: 84E43.204/E8  .v09  !F/E: .E.090v10.907 4./.7.0E7E84J7E8E7.8E8147/J9499847703/F-03J7.9: 0 437F9 10./.2J  .7.F70   .943  2F39 .:948OE9E7E8-..83E.F5073v7050/.9O/..20 . 0E7E89  ..   /    0    20.3.4/0    .090v 7F8-03 -02:9..9O 0 . 200J9F870:7J.// .9E7.83E..-020309   20309 ..8499F8.9    7:3 70:7J.-04.8.  ..43  .7..

23/03E9E7E83. 0 .E9.2008.8.

  . .09.

.O3E-.43..8E8. -04..3 .

  1 .. .7 . 0  5:9.

O3E-. J7E8.3 .

 <    .7.4/0    ...

E9.8. 0 .2008. 23/03E9E7E83.

  .09. .

O3E-. -04.43.8E8...3 ..

       0   5:9.  1 .. .7 .

J7E8.3 .O3E-.

.   < <  .7.4/0    ..

8. 23/03E9E7E83.2008.E9. 0 .

09.  . .

8E8.43.3 ...O3E-. -04..

.       5:9. .  1 .7 .

J7E8.3 .-O3E-.

   0   5:9. .7 ..

O3E-.3 . J7E8.

   < <     .

.7..4/0    ..

8. 23/03E9E7E83. 0 .2008.E9.

09. .  .

-04...O3E-..3 .8E8.43.

.  5:9.7 ..

O3E-.3 . J7E8..

7 . . 0  5:9..  1 .

J7E8.O3E-.3 .

4/0    ...7. <  .

8. 23/03E9E7E83. 0 .E9.2008.

09. .  .

..3 .O3E-. -04.43.8E8..

7 .       5:9.  1 .. .

3 .-O3E-. J7E8.

..   0   5:9.7 .

O3E-.3 . J7E8.

7 . .   < 0805:9..

O3E-. J7E8.3 .

  <     .

5089 ~8./O $%07-079 2.24E8 # -.3. %# .9 5747.:70 9  $3142.. %:7-4 :.3:.9.42509 :.03 :/.:70 9 %047.24E830.:70 9 %047..2g7L3 :...3   009 -20 :.3  !747.42   u%-473F uE8O % %079. :/.3   #&:.5089 425:907448 #7.3  #%0338   5747.. $ #%:/47 .005747.74/.$.24:330.3.

.9438.5:-.

0*-448.

5747.

.55     .