Upload
zsuzsa-bradacs
View
2
Download
1
Embed Size (px)
Citation preview
Juhsz Istvn
PROGRAMOZS 1
mobiDIK knyvtr
Juhsz Istvn
Programozs 1
mobiDIK knyvtr
SOROZATSZERKESZT Fazekas Istvn
Juhsz Istvn
Programozs 1
Egyetemi jegyzet Els kiads
mobiDIK knyvtr
Debreceni Egyetem Informatikai Intzet
Lektor Pnovics Jnos Debreceni Egyetem Copyright Juhsz Istvn 2003 Copyright elektronikus kzls mobiDIK knyvtr, 2003 mobiDIK knyvtr Debreceni Egyetem Informatikai Intzet 4010 Debrecen, Pf. 12 http://mobidiak.inf.unideb.hu A m egyni tanulmnyozs cljra szabadon letlthet. Minden egyb felhasznls csak a szerz elzetes rsbeli engedlyvel trtnhet. A m A mobiDIK nszervez mobil portl (IKTA, OMFB-00373/2003) s a GNU Itertor, a legjabb genercis portl szoftver (ITEM, 50/2003) projektek keretben kszlt.
7
TARTALOMJEGYZK
ELSZ.................................................................................................................................... 9
1. BEVEZETS ...................................................................................................................... 10 1.1. Modellezs ..................................................................................................................... 10 1.2. Alapfogalmak................................................................................................................. 11 1.3. A programnyelvek osztlyozsa .................................................................................... 13 1.4. A jegyzetben alkalmazott formlis jellsrendszer ....................................................... 14 1.5. A jegyzet trgya ............................................................................................................. 15
2. ALAPELEMEK.................................................................................................................. 17 2.1. Karakterkszlet............................................................................................................... 17 2.2. Lexiklis egysgek......................................................................................................... 18
2.2.1. Tbbkarakteres szimblumok .................................................................................. 18 2.2.2. Szimbolikus nevek .................................................................................................... 19 2.2.3. Cmke ....................................................................................................................... 20 2.2.4. Megjegyzs............................................................................................................... 20 2.2.6. Literlok (Konstansok) ............................................................................................ 21
2.3. A forrsszveg sszelltsnak ltalnos szablyai ..................................................... 27 2.4. Adattpusok .................................................................................................................... 28
2.4.1. Egyszer tpusok ...................................................................................................... 29 2.4.2. sszetett tpusok ...................................................................................................... 30 2.4.3. Mutat tpus ............................................................................................................. 33
2.5. A nevestett konstans ..................................................................................................... 34 2.6. A vltoz ........................................................................................................................ 35 2.7. Alapelemek az egyes nyelvekben .................................................................................. 39
3. KIFEJEZSEK .................................................................................................................. 46 3.1. Kifejezs a C-ben ........................................................................................................... 50
4. UTASTSOK.................................................................................................................... 56 4.1. rtkad utasts ............................................................................................................ 57 4.2. res utasts ................................................................................................................... 57 4.3. Ugr utasts .................................................................................................................. 57 4.4. Elgaztat utastsok...................................................................................................... 58
4.4.1. Ktirny elgaztat utasts (feltteles utasts)................................................... 58 4.4.2. Tbbirny elgaztat utasts ............................................................................... 59
4.5. Ciklusszervez utastsok .............................................................................................. 62 4.5.1. Feltteles ciklus ....................................................................................................... 63 4.5.2. Elrt lpsszm ciklus .......................................................................................... 64 4.5.3. Felsorolsos ciklus .................................................................................................. 67 4.5.4. Vgtelen ciklus ......................................................................................................... 67
8
4.5.5. sszetett ciklus ........................................................................................................ 67 4.6. Ciklusszervez utastsok az egyes nyelvekben ............................................................ 67 4.7. Vezrl utastsok a C-ben ............................................................................................ 71
5. A PROGRAMOK SZERKEZETE................................................................................... 73 5.1. Alprogramok .................................................................................................................. 74 5.2. Hvsi lnc, rekurzi ...................................................................................................... 78 5.3. Msodlagos belpsi pontok .......................................................................................... 78 5.4. Paramterkirtkels ...................................................................................................... 79 5.5. Paramtertads ............................................................................................................. 80 5.6. A blokk........................................................................................................................... 83 5.7. Hatskr ......................................................................................................................... 84 5.8. Fordtsi egysg ............................................................................................................. 86 5.9. Az egyes nyelvek eszkzei ............................................................................................ 87
6. ABSZTRAKT ADATTPUS ............................................................................................. 99
7. A CSOMAG ...................................................................................................................... 100
8. AZ ADA FORDTSRL............................................................................................... 106 8.1. Pragmk ....................................................................................................................... 106 8.2. Fordtsi egysgek........................................................................................................ 107
9. KIVTELKEZELS ....................................................................................................... 113 9.1. A PL/I kivtelkezelse ................................................................................................. 114 9.2. Az Ada kivtelkezelse................................................................................................ 118
10. GENERIKUS PROGRAMOZS ................................................................................. 122
11. PRHUZAMOS PROGRAMOZS ............................................................................ 125
12. A TASZK......................................................................................................................... 127
13. INPUT/OUTPUT............................................................................................................ 135 13.1. Az egyes nyelvek I/O eszkzei .................................................................................. 138
14. IMPLEMENTCIS KRDSEK ............................................................................. 140
IRODALOMJEGYZK ...................................................................................................... 142
9
ELSZ
Jelen jegyzet a Debreceni Egyetem Informatika tanr, Programoz matematikus s
Programtervez matematikus szakn alapoz trgy, a Programozs 1 elmleti anyagt
tartalmazza. A tantrgy elfelttele Az informatika alapjai trgy. Ez a jegyzet is sok helyen
tmaszkodik az ott elsajttott alapismeretekre. Az ajnlott tantervi hl szerint a trggyal
prhuzamosan kerl meghirdetsre az Opercis rendszerek 1 s az Adatszerkezetek s
algoritmusok cm trgy. Ezekkel nagyon szoros a kapcsolat, gyakoriak az thivatkozsok. A
Programozs 1 trgyhoz kzvetlenl kapcsoldik a Programozs 2 trgy, ezek egytt
alkotnak szerves egszet.
A jegyzet megrsnak idpontjban a trgy gyakorlatn a C a ktelez nyelv. Ez
magyarzza, hogy ezzel a nyelvvel rszletesebben foglalkozunk.
A tantrgy gyakorlatn Ksa Mrk s Pnovics Jnos Pldatr a Programozs 1 trgyhoz
cm elektronikus jegyzete hasznlhat.
10
1. BEVEZETS
1.1. Modellezs
Az ember mr igen rgta trekszik a vals vilg megismersre. A vals vilgban
mindenfle objektumok (szemlyek, trgyak, intzmnyek, szmtgpes programok) vannak
nevezzk ezeket egyedeknek. Az egyedeknek egyrszt rjuk jellemz tulajdonsgaik
vannak, msrszt kzttk bonyolult kapcsolatrendszer ll fenn. Az egyedek reaglnak a
krlttk lv ms egyedek hatsaira, kapcsolatba lpnek egymssal, informcit cserlnek
vagyis viselkednek. Az egyes konkrt egyedeket egymstl tulajdonsgaik eltr rtkei,
vagy eltr viselkedsk alapjn klnbztetjk meg. Ugyanakkor viszont a vals vilg
egyedei, kzs tulajdonsgaik s viselkedsmdjuk alapjn kategorizlhatk, osztlyozhatk.
A vals vilg tlsgosan sszetett ahhoz, hogy a maga teljessgben megragadjuk, ppen
ezrt a humn gondolkods az absztrakcin alapszik s ennek segtsgvel modellekben
gondolkodunk. Az absztrakci lnyege, hogy kiemeljk a kzs, lnyeges tulajdonsgokat s
viselkedsmdokat, az eltreket, lnyegteleneket pedig elhanyagoljuk. Ezltal ltrejn a
vals vilg modellje, amely mr nem az egyes egyedekkel, hanem az egyedek egy
csoportjval, osztlyval foglalkozik.
Az ember modelleket hasznl, amikor egy megoldand problmn gondolkodik, amikor
beszlget valakivel, amikor eszkzt tervez, amikor tant, amikor tanul s amikor megprblja
megrteni az itt lertakat.
A modellalkots kpessge velnk szletik. Amikor a gyermek megismerkedik a vilggal,
akkor igazban azt tanulja meg, hogy a szmtalan egyedi problmt hogyan lehet kezelhet
szm problmaosztlyra leszkteni.
Egy modellel szemben hrom kvetelmnyt szoktak tmasztani:
1. Lekpezs kvetelmnye: Lteznie kell olyan egyednek, amelynek a modellezst
vgezzk. Ez az eredeti egyed.
11
2. Leszkts kvetelmnye: Az eredeti egyed nem minden tulajdonsga jelenik meg a
modellben, csak bizonyosak.
3. Alkalmazhatsg kvetelmnye: A modellnek hasznlhatnak kell lennie, azaz a
benne levont kvetkeztetseknek igaznak kell lennik, ha azokat visszavettjk az
eredeti egyedre.
Az 1. kvetelmny nem jelenti szksgszeren az eredeti egyed aktulis ltezst, az lehet
megtervezett (pl. egy legyrtand gp), kitallt (pl. egy regnyalak), vagy felttelezett (pl. egy
baktrium a Marson).
A 2. kvetelmny miatt a modell mindig szegnyebb, viszont kezelhet (mg az eredeti egyed
gyakran nem).
A 3. kvetelmny az, amirt az egsz modellt egyltaln elksztjk. Az eredeti egyed igen
gyakran nem is elrhet szmunkra, ezrt vizsglatainkat csak a modellben vgezhetjk.
A szmtgpek megjelense lehetv tette az emberi gondolkods bizonyos elemeinek
automatizlst. Az informatika a modellezs tern is alapvet jelentsgre tett szert. Az
egyedek tulajdonsgait szmtgpen adatokkal, a viselkedsmdot pedig programokkal
tudjuk kezelni ezzel termszetesen szintn egyfajta modellt megadva. gy beszlhetnk
adatmodellrl s funkcionlis modellrl (eljrsmodellrl). Ez a megklnbztets azonban
csak szmtgpes krnyezetben lehetsges, hiszen a modell maga egy s oszthatatlan.
Ugyancsak ebben a kzeltsben emlthetjk az adatabsztrakcit s a procedurlis
absztrakcit, mint az absztrakci megjelensi formit az informatikban.
1.2. Alapfogalmak
A szmtgpek programozsra kialakult nyelveknek hrom szintjt klnbztetjk meg:
gpi nyelv
assembly szint nyelv
magasszint nyelv
12
A Programozs 1 s Programozs 2 trgyak a magasszint nyelvek eszkzeivel,
filozfijval, hasznlatval foglalkoznak. A magasszint nyelven megrt programot
forrsprogramnak, vagy forrsszvegnek nevezzk. A forrsszveg sszelltsra
vonatkoz formai, nyelvtani szablyok sszessgt szintaktikai szablyoknak hvjuk. A
tartalmi, rtelmezsi, jelentsbeli szablyok alkotjk a szemantikai szablyokat. Egy
magasszint programozsi nyelvet szintaktikai s szemantikai szablyainak egyttese hatroz
meg.
Minden processzor rendelkezik sajt gpi nyelvvel s csak az adott gpi nyelven rt
programokat tudja vgrehajtani. A magasszint nyelven megrt forrsszvegbl teht
valamilyen mdon gpi nyelv programokhoz kell eljutni. Erre ktfle technika ltezik, a
fordtprogramos s az interpreteres.
A fordtprogram egy specilis szoftver, amely a magasszint nyelven megrt
forrsprogrambl gpi kd trgyprogramot llt el. A fordtprogram a teljes
forrsprogramot egyetlen egysgknt kezeli s mkdse kzben a kvetkez lpseket hajtja
vgre:
lexiklis elemzs
szintaktikai elemzs
szemantikai elemzs
kdgenerls
A lexiklis elemzs sorn a forrsszveget feldarabolja lexiklis egysgekre (l. 2.2. alfejezet),
a szintaktikai elemzs folyamn ellenrzi, hogy teljeslnek-e az adott nyelv szintaktikai
szablyai. Trgyprogramot csak szintaktikailag helyes forrsprogrambl lehet ellltani. A
trgyprogram mr gpi nyelv, de mg nem futtathat. Belle futtathat programot a
szerkeszt vagy kapcsolatszerkeszt kszt. A futtathat programot a betlt helyezi el a
trban, s adja t neki a vezrlst. A fut program mkdst a futtat rendszer felgyeli. Az
ezekkel kapcsolatos rszletes ismereteket az Opercis rendszerek 1, a Nyelvek s
automatk 1 s a Fordtprogramok trgyak trgyaljk. Bennnket a tovbbiakban csak a
fordtprogram mkdse s a fordtsi idej esemnyek (a szintaktika miatt), tovbb a
futtat rendszer tevkenysge s a futsi idhz kapcsold esemnyek (a szemantika miatt)
rintenek.
13
A fordtprogramok ltalnosabb rtelemben tetszleges nyelvrl tetszleges nyelvre
fordtanak. A magasszint nyelvek kztt is ltezik olyan, amelyben olyan forrsprogramot
lehet rni, amely tartalmaz nem nyelvi elemeket is. Ilyenkor egy elfordt segtsgvel
elszr a forrsprogrambl egy adott nyelv forrsprogramot kell generlni, ami aztn mr
feldolgozhat a nyelv fordtjval. Ilyen nyelv pldul a C.
Az interpreteres technika esetn is megvan az els hrom lps, de az interpreter nem kszt
trgyprogramot. Utastsonknt (vagy egyb nyelvi egysgenknt) sorra veszi a
forrsprogramot, rtelmezi azt, s vgrehajtja. Rgtn kapjuk az eredmnyt, gy, hogy lefut
valamilyen gpi kd rutin.
Az egyes programnyelvek vagy fordtprogramosak, vagy interpreteresek, vagy egyttesen
alkalmazzk mindkt technikt.
Minden programnyelvnek megvan a sajt szabvnya, amit hivatkozsi nyelvnek hvunk.
Ebben pontosan definilva vannak a szintaktikai s a szemantikai szablyok. A szintaktika
lershoz valamilyen formalizmust alkalmaznak, a szemantikt pedig ltalban termszetes
emberi nyelven (pl. angolul) adjk meg. A hivatkozsi nyelv mellett (nha vele szemben)
lteznek az implementcik. Ezek egy adott platformon (processzor, opercis rendszer)
realizlt fordtprogramok vagy interpreterek. Sok van bellk. Gyakran ugyanazon
platformon is ltezik tbb implementci. A problma az, hogy az implementcik egymssal
s a hivatkozsi nyelvvel nem kompatibilisek. A magasszint programozsi nyelvek elmlt 50
ves trtnetben napjainkig nem sikerlt megoldani a hordozhatsg (ha egy adott
implementciban megrt programot tviszek egy msik implementciba, akkor az ott fut s
ugyanazt az eredmnyt szolgltatja) problmjt.
Napjainkban a programok rshoz grafikus integrlt fejleszti krnyezetek llnak
rendelkezsnkre. Ezek tartalmaznak szvegszerkesztt, fordtt (esetleg interpretert),
kapcsolatszerkesztt, betltt, futtat rendszert s belvt.
1.3. A programnyelvek osztlyozsa
Imperatv nyelvek:
14
Algoritmikus nyelvek: a programoz mikor egy programszveget ler, algoritmust kdol, s ez az algoritmus mkdteti a processzort.
A program utastsok sorozata. Legfbb programozi eszkz a vltoz, amely a tr kzvetlen elrst biztostja,
lehetsget ad az abban lv rtkek kzvetlen manipullsra. Az algoritmus a vltozk
rtkeit alaktja, teht a program a hatst a tr egyes terletein lv rtkeken fejti ki.
Szorosan ktdnek a Neumann-architektrhoz. Alcsoportjai:
Eljrsorientlt nyelvek Objektumorientlt nyelvek
Deklaratv nyelvek:
Nem algoritmikus nyelvek. Nem ktdnek olyan szorosan a Neumann-architektrhoz, mint az imperatv nyelvek. A programoz csak a problmt adja meg, a nyelvi implementcikba van beptve a
megolds megkeressnek mdja.
A programoznak nincs lehetsge memriamveletekre, vagy csak korltozott mdon. Alcsoportjai:
Funkcionlis (applikatv) nyelvek Logikai nyelvek
Mselv nyelvek:
Olyan nyelveket sorolunk ebbe a kategriba, amelyek mshov nem sorolhatk.
Nincs egysges jellemzjk. ltalban tagadjk valamelyik imperatv jellemzt.
1.4. A jegyzetben alkalmazott formlis jellsrendszer
A tovbbiakban a szintaktikai szablyok formlis lershoz az albbi jellsrendszert
hasznljuk:
Terminlis: rskp, ha a jelek betk, akkor nagybets alak.
15
Nem terminlis: kisbets kategrianevek, ha tbb szbl llnak, akkor a szavak kztt
alhzs jellel.
Alternatva: |
Opci: [ ]
Iterci: , mindig az eltte ll szintaktikai elem akrhnyszoros ismtldst jelenti.
A fenti elemekkel szintaktikai szablyok formalizlhatk. Ezek bal oldaln egy nem
terminlis ll, jobb oldaln pedig egy tetszleges elemsorozat. A kt oldalt kettspont
vlasztja el. A terminlisokat s nem terminlisokat Courier New bettpussal szedtk. Ezt alkalmazzuk a konkrt forrsprogramok megadsnl is. Amennyiben a formlis ler
karakterek rszei az adott nyelvnek, akkor azokat a formalizlsnl vastagon szedjk.
Plda:
szmjegy: { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }
egsz_szm: [{ + | - }] szmjegy
1.5. A jegyzet trgya
A Programozs 1 tantrgy az eljrsorientlt nyelvek eszkzeit, fogalmait, filozfijt,
szmtsi modelljt trgyalja (ezen a fogalmak tbbsge persze vltozatlan, vagy mdostott
formban megvan ms nyelvosztlyokban is). Konkrtan elemzi a legfontosabb, a
gyakorlatban szerepet jtsz nyelvek (FORTRAN, COBOL, PL/I, Pascal, Ada, C) egyes
elemeit. De a jegyzet nem nyelvlers! Az emltett nyelvek eszkzeinek csak egy rszt
trgyalja, gyakran azokat is leegyszerstett, nem teljes formban. A cl az, hogy a
programozsi nyelvekben hasznlhat eszkzkrl egy modellszint ttekintst, egy ltalnos
absztrakt fogalomrendszert kapjunk, amely keretek kztt aztn az egyes nyelvek konkrt
megvalstsai elhelyezhetk. A konkrt nyelvi ismeretek az adott nyelvet trgyal
knyvekbl s papralap illetve elektronikus dokumentcikbl sajtthatk el.
16
De brmely nyelven programozni megtanulni elmletben, papron nem lehet. Ehhez
sok-sok programot kell megrni s lefuttatni!
Jelentsgk miatt kiemelt figyelmet fordtunk a C s az Ada nyelvekre.
Vgl itt jegyezzk meg, hogy az eljrsorientlt programozsi nyelvek ltalban
fordtprogramosak, csak ritkn interpreteresek.
17
2. ALAPELEMEK
Ebben a fejezetben a programozsi nyelvek alapeszkzeit, alapfogalmait ismerjk meg.
2.1. Karakterkszlet
Minden program forrsszvegnek legkisebb alkotrszei a karakterek. A forrsszveg
sszelltsnl alapvet a karakterkszlet, ennek elemei jelenhetnek meg az adott nyelv
programjaiban, ezekbl llthatk ssze a bonyolultabb nyelvi elemek. Az eljrsorientlt
nyelvek esetn ezek a kvetkezk:
lexiklis egysgek
szintaktikai egysgek
utastsok
programegysgek
fordtsi egysgek
program
Minden nyelv definilja a sajt karakterkszlett. A karakterkszletek kztt lnyeges
eltrsek lehetnek, de a programnyelvek ltalban a karaktereket a kvetkez mdon
kategorizljk:
betk
szmjegyek
egyb karakterek
Minden programnyelvben bet az angol ABC 26 nagybetje. A nyelvek tovbb gyakran bet
kategrij karakternek tekintik az _ , $ , # , @ karaktereket is. Ez viszont sokszor implementcifgg. Abban mr eltrnek a nyelvek0, hogy hogyan kezelik az angol ABC
kisbetit. Egyes nyelvek (pl. FORTRAN, PL/I) szerint ezek nem tartoznak a bet kategriba,
msok (pl. Ada, C, Pascal) szerint igen. Ezen utbbi nyelvek klnbznek abban, hogy
azonosnak tekintik-e a kis- s nagybetket (Pascal), vagy klnbzeknek (C). A nyelvek
18
tlnyom tbbsge a nemzeti nyelvi betket nem sorolja a bet kategriba, nhny ksi
nyelv viszont igen. Teht ezekben pldul lehet magyarul rni a programot.
A szmjegyeket illeten egysges a nyelvek szemllete, mindegyik a decimlis szmjegyeket
tekinti szmjegy kategrij karakternek.
Az egyb karakterek kz tartoznak a mveleti jelek (pl. +, -, *, /), elhatrol jelek (pl. [, ], ., :, {, }, , ", ;), rsjelek (pl. ?, !) s a specilis karakterek (pl. ~). A program szvegben kitntetett szerepet jtszik a szkz, mint egyb karakter (l. 2.3. alfejezet).
A hivatkozsi nyelv s az implementcik karakterkszlete eltr is lehet. Minden
implementci mgtt egy-egy konkrt kdtbla (EBCDIC, ASCII, UNICODE) ll. Ez
meghatrozza egyrszt azt, hogy egy- vagy tbb-bjtos karakterek kezelse lehetsges-e,
msrszt rtelmezi a karakterek sorrendjt. Ugyanis nagyon kevs olyan hivatkozsi nyelv
van (pl. Ada), amely definilja a karakterek kztti sorrendet.
2.2. Lexiklis egysgek
A lexiklis egysgek a program szvegnek azon elemei, melyeket a fordt a lexiklis
elemzs sorn felismer s tokenizl (kzbens formra hoz). Fajti a kvetkezk:
tbbkarakteres szimblum
szimbolikus nevek
cmke
megjegyzs
literlok
2.2.1. Tbbkarakteres szimblumok
Olyan karaktersorozatok, amelyeknek a nyelv tulajdont jelentst s ezek csak ilyen
rtelemben hasznlhatk. Nagyon gyakran a nyelvben opertorok, elhatrolk lehetnek.
Pldul a C-ben tbbkarakteres szimblumok a kvetkezk: ++, --, &&, /*, */.
19
2.2.2. Szimbolikus nevek
Azonost: Olyan karaktersorozat, amely betvel kezddik, s betvel vagy szmjeggyel
folytatdhat. Arra val, hogy a program rja a sajt programozi eszkzeit megnevezze vele,
s ezutn ezzel hivatkozzon r a program szvegben brhol. A hivatkozsi nyelvek ltalban
nem mondanak semmit a hosszrl, az implementcik viszont rtelemszeren korltozzk
azt.
A kvetkezk szablyos C azonostk (a C-ben az _ bet kategrij): x almafa hallgato_azonosito SzemelyNev
A kvetkez karaktersorozatok viszont nem azonostk:
x+y a + nem megengedett karakter 123abc betvel kell kezddnie
Kulcssz (alapsz, fenntartott sz, vdett sz, foglalt sz): Olyan karaktersorozat (ltalban
azonost jelleg felptssel), amelynek az adott nyelv tulajdont jelentst, s ez a jelents a
programoz ltal nem megvltoztathat. Nem minden nyelv (pl. FORTRAN, PL/I) ismeri ezt
a fogalmat. Az utastsok ltalban egy-egy jellegzetes kulcsszval kezddnek, a szakmai
szleng az utastst gyakran ezzel nevezi meg (pl. IF-utasts). Minden nyelvre nagyon
jellemzek a kulcsszavai. Ezek gyakran htkznapi angol szavak, vagy rvidtsek. Az
alapszavak soha nem hasznlhatk azonostknt.
A C-ben pldul alapszavak a kvetkezk:
if, for, case, break
Standard azonost: Olyan karaktersorozat, amelynek a nyelv tulajdont jelentst, de ez az
alaprtelmezs a programoz ltal megvltoztathat, trtelmezhet. ltalban az
20
implementcik eszkzeinek (pl. beptett fggvnyek) nevei ilyenek. A standard azonost
hasznlhat az eredeti rtelemben, de a programoz sajt azonostknt is felhasznlhatja.
2.2.3. Cmke
Az eljrsorientlt nyelvekben a vgrehajthat utastsok (l. 4. fejezet) megjellsre szolgl,
azrt, hogy a program egy msik pontjrl hivatkozni tudjunk r. Brmely vgrehajthat
utasts megcmkzhet.
A cmke maga egy specilis karaktersorozat, amely lehet eljel nlkli egsz szm, vagy
azonost. A cmke felptse az egyes nyelvekben a kvetkez:
COBOL: nincs.
FORTRAN: maximum 5 jegy eljel nlkli egsz szm.
Pascal: A szabvny Pascalban a cmke maximum 4 szmjegybl ll el nlkli egsz szm.
Egyes implementcikban ezen kvl lehet azonost is.
PL/I, C, Ada: azonost.
Elgg ltalnos, hogy a cmke az utasts eltt ll s tle kettspont vlasztja el. Az Adban
viszont a cmke az utasts eltt a > tbbkarakteres szimblumok kztt szerepel.
2.2.4. Megjegyzs
A megjegyzs egy olyan programozsi eszkz, amely segtsgvel a programban olyan
karaktersorozat helyezhet el, amely nem a fordtnak szl, hanem a program szvegt olvas
embernek. Ez olyan magyarz szveg, amely a program hasznlatt segti, mkdsrl,
megrsnak krlmnyeirl, a felhasznlt algoritmusrl, az alkalmazott megoldsokrl ad
informcit. A megjegyzst a lexiklis elemzs sorn a fordt ignorlja. A megjegyzsben a
karakterkszlet brmely karaktere elfordulhat s minden karakter egyenrtk, csak nmagt
kpviseli, a karakter-kategriknak nincs jelentsge.
Egy megjegyzs forrsszvegben val elhelyezsre hromfle lehetsg van:
A forrsszvegben elhelyezhetnk teljes megjegyzs sort (pl. FORTRAN, COBOL). Ekkor
a sor els karaktere (pl. C) jelzi a fordtnak, hogy a sor nem rsze a kdnak.
21
Minden sor vgn elhelyezhetnk megjegyzst. Ekkor a sor els rsze fordtand kdot,
msodik rsze figyelmen kvl hagyand karaktersorozatot tartalmaz. Pldul Adban a -- jeltl a sor vgig tart a megjegyzs.
Ahol a szkz elhatrol jelknt szerepel (l. 2. 3. alfejezet), oda tetszleges hosszsg
megjegyzs elhelyezhet, teht ekkor nem vesszk figyelembe a sor vgt. Ekkor a
megjegyzs elejt s vgt jellni kell egy-egy specilis karakterrel vagy tbbkarakteres
szimblummal. Pldul a Pascalban {s}, a PL/I-ben s a C-ben /* s */ hatrolja ezt a fajta megjegyzst.
A nyelvek egy rsze tbb fajta megjegyzst is alkalmaz.
A j programozsi stlusban elksztett programok szvege nagyon sok megjegyzst
tartalmaz.
2.2.6. Literlok (Konstansok)
A literl olyan programozsi eszkz, amelynek segtsgvel fix, explicit rtkek pthetk be
a program szvegbe. A literloknak kt komponensk van: tpus s rtk. A literl mindig
nmagt definilja. A literl felrsi mdja (mint specilis karaktersorozat) meghatrozza
mind a tpust, mind az rtket.
Az egyes programozsi nyelvek meghatrozzk sajt literlrendszerket, nzzk ezeket
sorban:
FORTRAN:
Egsz literl:
[{+|-}] szmjegy [ szmjegy ]
A htkznapi egsz szm fogalmt veszi t: pl. +28, -36, 111. Mgtte fixpontos bels brzolsi md ll.
Vals literlok:
Mgttk lebegpontos bels brzolsi md ll.
22
Tizedestrt vals literl:
{ [{ +|-}].eljel_nlkli_egsz | egsz.[eljel_nlkli_egsz] } Teht szerepel benne a tizedespont. Pldul: +.01, -3.4, -3.0, .3, 28.
Exponencilis vals literl:
{ tizedestrt | egsz }{ E | D}egsz E: rvid lebegpontos, D: hossz lebegpontos. A htnl tbb szmjegy szmot hossz lebegpontos formban brzolja. Pldul: 1E3, -2.2D28.
Komplex literl:
(vals,vals)
Pldul: (3.2,1.4), ami nem ms, mint a 3.2+1.4i komplex szm.
Hexadecimlis literl:
Zhexa_szmjegy[ hexa_szmjegy ] Arra val, hogy karaktereket tudjunk kezelni a FORTRAN-ban.
Logikai literl: .TRUE. .FALSE.
Szveges literl:
Hollerith konstans:
nHkarakter[karakter]
Az n eljel nlkli egsz, amely a karakterek szmt adja meg. Hossza tetszleges lehet, de legalbb egy karakter szksges. Pldul: 4HALMA, 6HALMAFA .
23
Sztring literl:
karakter[karakter]
COBOL:
Numerikus literl:
A FORTRAN exponencilis vals literljnak felel meg. Egy numerikus literl hossza az s
COBOL-ban 18 szmjegyre volt maximlva.
Alfanumerikus literl:
Hossza maximum 100 karakter. Alakja:
karakter[karakter]
PL/I:
Aritmetikai literlok:
Vals literlok:
Decimlis fixpontos literl:
Bels brzolsa decimlis. A FORTRAN tizedestrt vals literljnak felel meg.
Decimlis lebegpontos literl:
A FORTRAN exponencilis vals literljnak felel meg, annyi klnbsggel, hogy
nem szerepelhet benne D.
Binris fixpontos literl:
Alakja:
{bitsorozat | [bitsorozat].bitsorozat}B Pldul: 1011.11B, 11B, .01B
Binris lebegpontos literl:
24
brzolsa decimlis. Alakja:
binris_fixpontosE [ {+|-} ] szmjegy [ szmjegy ]B Pldul: 1.1E33B Imaginrius konstans: valsI Lnc literlok:
Karakterlnc:
[(n)] [karakter] Az n eljel nlkli egsz. Pldul: (2)BA, ami nem ms, mint BABA.
Bitlnc:
[(n)][bit] B Pldul: 111001B.
Pascal:
Egsz literl:
A FORTRAN egsznek felel meg.
Tizedestrt:
A FORTRAN tizedestrtje, de a tizedespont mindkt oldaln szerepelnie kell szmjegynek.
Exponencilis:
Ugyanaz, mint a FORTRAN-ban, annyi klnbsggel, hogy itt csak E bet van.
Sztring:
[karakter]
C:
Rvid egsz literlok:
25
Decimlis egsz:
Megfelel az eddigi egsz literlnak.
Oktlis egsz:
Nyolcas szmrendszerbeli egsz, ktelezen 0-val kezddik. Pldul 011.
Hexadecimlis egsz:
Tizenhatos szmrendszerbeli egsz, 0X-el, vagy 0x-el kezddik. Pldul 0X11.
Eljel nlkli egsz:
Alakja:
rvid_egsz{U|u} Hossz egsz literl:
Alakja:
{rvid_egsz | eljel_nlkli_egsz}{L|l}
Vals literlok:
Hossz vals (ktszeres pontossg vals):
Megfelel a FORTRAN valsnak, de nincs D.
Rvid vals (egyszeres pontossg vals):
hossz_vals{f|F}
Kiterjesztett vals (hromszoros pontossg vals):
hossz_vals{l|L}
Karakter literl: karakter Az adott karakter bels kdjt kpviseli, szmolni is lehet vele. Egyes implementcik
megengedik, hogy az aposztrfok kztt tbb karakter lljon.
26
Sztring literl:
"[karakter]"
Ada:
Numerikus literlok:
Egsz literl:
szmjegy[[_]szmjegy] [{E|e}[+]szmjegy[szmjegy] ]
Pldul: 223_222e8.
Vals literl:
Megfelel a Pascal vals literljnak.
Bzisolt literl:
alap#egsz[.eljel_nlkli_egsz]# [{E|e}[+|-]szmjegy[szmjegy] ] Az alap a 2-16 szmrendszer alapszmt adja meg decimlisan, az esetleges kitev rszben a szmjegyek decimlisak. A # jelek kztti szmjegyek viszont az alap szmrendszer szmjegyei. Pldul: 8#123.56#e-45, 16#FF#.
Karakter literl:
[karakter] Pldul: s.
Sztring literl:
"[karakter]"
27
2.3. A forrsszveg sszelltsnak ltalnos szablyai
A forrsszveg, mint minden szveg, sorokbl ll. Krds, hogy milyen szerepet jtszanak a
sorok a programnyelvek szempontjbl.
Kttt formtum nyelvek: A korai nyelveknl (FORTRAN, COBOL) alapvet szerepet
jtszott a sor. Egy sorban egy utasts helyezkedett el, teht a sorvge jelezte az utasts vgt.
Ha egy utasts nem frt el egy sorban, azt kln kellett jelezni (mintegy semlegesteni a
sorvge hatst). Tbb utasts viszont soha nem llhatott egy sorban. A sor bizonyos
pozciira csak bizonyos programelemek kerlhettek. Teht a programoznak kellett
igazodnia a feszes szablyokhoz.
Szabad formtum nyelvek: Ezeknl a nyelveknl a sornak s az utastsnak semmi kapcsolata
nincs egymssal. Egy sorba akrhny utasts rhat, egy utasts akrhny sorban
elhelyezhet. A sorban tetszleges helyen jelenhetnek meg az egyes programelemek. A
sorvge nem jelenti az utasts vgt. ppen ezrt ezek a nyelvek bevezetik az utasts
vgjelet, ez elg ltalnosan a pontosvessz. Teht a forrsszvegben kt pontosvessz kztt
ll egy utasts.
Az eljrsorientlt nyelvekben a program szvegben a lexiklis egysgeket alapszval,
standard azonostval, valamilyen elhatrol jellel (zrjel, kettspont, pontosvessz, vessz,
stb.), vagy ezek hinyban egy szkzzel el kell vlasztani egymstl. A fordtprogram ez
alapjn ismeri fl azokat a lexiklis elemzs sorn. Az eljrsorientlt nyelvekben teht a
szkz ltalnos elhatrol szerepet jtszik. A szkznek nincs kiemelt szerepe a
megjegyzsben s a sztring, valamint karakter literlokban. Itt, mint minden karakter, csak
nmagt kpviseli. Ahol egy szkz megengedett elhatrolknt, oda akrhnyat is rhatunk.
Egyb elhatrolk mellett is llhat szkz, ez nveli a forrsszveg olvashatsgt. A
FORTRAN-ban a forrsszvegben brhol akrhny szkz elhelyezhet, ugyanis a fordts
azzal kezddik, hogy a fordt a szkzket ignorlja.
28
2.4. Adattpusok
Az adatabsztrakci els megjelensi formja az adattpus a programozsi nyelvekben. Az
adattpus maga egy absztrakt programozsi eszkz, amely mindig ms, konkrt programozsi
eszkz egy komponenseknt jelenik meg. Az adattpusnak neve van, ami egy azonost.
A programozsi nyelvek egy rsze ismeri ezt az eszkzt, ms rsze nem. Ennek megfelelen
beszlnk tpusos s nem tpusos nyelvekrl. Az eljrsorientlt nyelvek tpusosak.
Egy adattpust hrom dolog hatroz meg, ezek:
tartomny
mveletek
reprezentci
Az adattpusok tartomnya azokat az elemeket tartalmazza, amelyeket az adott tpus konkrt
programozsi eszkz flvehet rtkknt. Bizonyos tpusok esetn a tartomny elemei
jelenhetnek meg a programban literlknt.
Az adattpushoz hozztartoznak azok a mveletek, amelyeket a tartomny elemein vgre
tudunk hajtani.
Minden adattpus mgtt van egy megfelel bels brzolsi md. A reprezentci az egyes
tpusok tartomnyba tartoz rtkek trban val megjelenst hatrozza meg, teht azt, hogy
az egyes elemek hny bjtra s milyen bitkombincira kpzdnek le.
Minden tpusos nyelv rendelkezik beptett (standard) tpusokkal.
Egyes nyelvek lehetv teszik azt, hogy a programoz is definilhasson tpusokat. A sajt
tpus definilsi lehetsg az adatabsztrakcinak egy magasabb szintjt jelenti, segtsgvel a
vals vilg egyedeinek tulajdonsgait jobban tudjuk modellezni.
A sajt tpus definilsa ltalban szorosan ktdik az absztrakt adatszerkezetekhez (l.
Adatszerkezetek s algoritmusok).
Sajt tpust gy tudunk ltrehozni, hogy megadjuk a tartomnyt, a mveleteit s a
reprezentcijt. Szoksos, hogy sajt tpust a beptett s a mr korbban definilt sajt
tpusok segtsgvel adjuk meg. ltalnos, hogy a reprezentci megadsnl gy jrunk el.
29
Csak nagyon kevs nyelvben lehet sajt reprezentcit megadni (pl. ilyen az Ada). Krds,
hogy egy nyelvben lehet-e a sajt tpushoz sajt mveleteket s sajt opertorokat megadni.
Van, ahol igen, de az is lehetsges, hogy a mveleteket alprogramok realizljk. A tartomny
megadsnl is alkalmazhat a visszavezets technikja, de van olyan lehetsg is, hogy
explicit mdon adjuk meg az elemeket.
Az egyes adattpusok, mint programozsi eszkzk nllak, egymstl klnbznek. Van
azonban egy specilis eset, amikor egy tpusbl (ez az alaptpus) gy tudunk szrmaztatni egy
msik tpust (ez lesz az altpus), hogy leszktjk annak tartomnyt, vltozatlanul hagyva
mveleteit s reprezentcijt. Az alaptpus s az altpus teht nem klnbz tpusok.
Az adattpusoknak kt nagy csoportjuk van:
A skalr vagy egyszer adattpus tartomnya atomi rtkeket tartalmaz, minden rtk egyedi,
kzvetlenl nyelvi eszkzkkel tovbb nem bonthat. A skalr tpusok tartomnyaibl vett
rtkek jelenhetnek meg literlknt a program szvegben.
A strukturlt vagy sszetett adattpusok tartomnynak elemei maguk is valamilyen tpussal
rendelkeznek. Az elemek egy-egy rtkcsoportot kpviselnek, nem atomiak, az rtkcsoport
elemeihez kln-kln is hozzfrhetnk. ltalban valamilyen absztrakt adatszerkezet
programnyelvi megfeleli.
2.4.1. Egyszer tpusok
Minden nyelvben ltezik az egsz tpus, st ltalban egsz tpusok. Ezek bels brzolsa
fixpontos. Az egyes egsz tpusok az brzolshoz szksges bjtok szmban trnek el s
nyilvn ez hatrozza meg a tartomnyukat is. Nhny nyelv ismeri az eljel nlkli egsz
tpust, ennek bels brzolsa eljel nlkli (direkt).
Alapvetek a vals tpusok, bels brzolsuk ltalban lebegpontos. A tartomny itt is az
alkalmazott brzols fggvnye, ez viszont ltalban implementcifgg.
Az egsz s vals tpusokra kzs nven mint numerikus tpusokra hivatkozunk. A numerikus
tpusok rtkein a numerikus s hasonlt mveletek hajthatk vgre.
30
A karakteres tpus tartomnynak elemei karakterek, a karakterlnc vagy sztring tpusi
pedig karaktersorozatok. brzolsuk karakteres (karakterenknt egy vagy kt bjt, az
alkalmazott kdtbltl fggen), mveleteik a szveges s hasonlt mveletek.
Egyes nyelvek ismerik a logikai tpust. Ennek tartomnya a hamis s igaz rtkekbl ll,
mveletei a logikai s hasonlt mveletek, bels brzolsa logikai.
Specilis egyszer tpus a felsorolsos tpus. A felsorolsos tpust sajt tpusknt kell
ltrehozni. A tpus definilsa gy trtnik, hogy megadjuk a tartomny elemeit. Ezek
azonostk lehetnek. Az elemekre alkalmazhatk a hasonlt mveletek.
Egyes nyelvek rtelmezik az egyszer tpusok egy specilis csoportjt a sorszmozott tpust.
Ebbe a csoportba tartoznak ltalban az egsz, karakteres, logikai s felsorolsos tpusok. A
sorszmozott tpus tartomnynak elemei listt alkotnak, azaz van els s utols elem, minden
elemnek van megelzje (kivve az elst) s minden elemnek van rkvetkezje (kivve az
utolst). Teht az elemek kztt egyrtelm sorrend rtelmezett. A tartomny elemeihez
klcsnsen egyrtelmen hozz vannak rendelve a 0, 1, 2, ... sorszmok. Ez all kivtelt
kpeznek az egsz tpusok, ahol a tartomny minden elemhez nmaga mint sorszm van
hozzrendelve.
Egy sorszmozott tpus esetn mindig rtelmezhetk a kvetkez mveletek:
ha adott egy rtk, meg kell tudni mondani a sorszmt s viszont
brmely rtkhez meg kell tudni mondani a megelzjt s a rkvetkezjt
A sorszmozott tpus az egsz tpus egyfajta ltalnostsnak tekinthet.
Egy sorszmozott tpus altpusaknt lehet szrmaztatni az intervallum tpust.
2.4.2. sszetett tpusok
Az eljrsorientlt nyelvek kt legfontosabb sszetett tpusa a tmb (melyet minden nyelv
ismer) s a rekord (melyet csak a FORTRAN nem ismer).
A tmb tpus a tmb absztrakt adatszerkezet (l. Adatszerkezetek s algoritmusok)
megjelense tpus szinten. A tmb statikus s homogn sszetett tpus, vagyis tartomnynak
31
elemei olyan rtkcsoportok, amelyekben az elemek szma ugyanannyi s az elemek azonos
tpusak.
A tmbt, mint tpust meghatrozza:
dimenziinak szma indexkszletnek tpusa s tartomnya elemeinek a tpusa
Egyes nyelvek (pl. a C) nem ismerik a tbbdimenzis tmbket. Ezek a nyelvek a
tbbdimenzis tmbket olyan egydimenzis tmbkknt kezelik, amelyek elemei
egydimenzis tmbk.
Tbbdimenzis tmbk reprezentcija lehet sor- vagy oszlopfolytonos. Ez ltalban
implementcifgg, a sorfolytonos a gyakoribb.
Ha van egy tmb tpus programozsi eszkznk, akkor a nevvel az sszes elemre egytt,
mint egy rtkcsoportra tudunk hivatkozni (ez all kivtel a mutatorientltsga miatt a C), az
elemek sorrendjt a reprezentci hatrozza meg. Az rtkcsoport egyes elemeire a
programozsi eszkz neve utn megadott indexek segtsgvel hivatkozunk. Az indexek a
nyelvek egy rszben szgletes, msik rszben kerek zrjelek kztt llnak. Egyes nyelvek
(pl. COBOL, PL/I) megengedik azt is, hogy a tmb egy adott dimenzijnak sszes elemt
(pl. egy ktdimenzis tmb egy sort) egytt hivatkozhassuk.
A nyelveknek a tmb tpussal kapcsolatban a kvetkez krdseket kell megvlaszolniuk:
1. Milyen tpusak lehetnek az elemek?
Minden nyelv brmelyik skalr tpust megengedi. A modernebb nyelvek sszetett tpusokat is megengednek.
2. Milyen tpus lehet az index?
Minden nyelv megengedi, hogy egsz tpus legyen. A Pascalban s az Adban sorszmozott tpus is lehet.
3. Amikor egy tmb tpust definilunk, hogyan kell megadni az indextartomnyt?
32
Lehet intervallum tpus rtkkel (pl. Pascal, Ada), azaz meg kell adni az als s a fels hatrt.
Ms nyelveknl (pl. PL/I) az indextartomny als hatra a nyelv ltal rgztett (ltalban 1), s csak a tartomny fels hatrt kell megadni.
A nyelvek egy szkebb csoportja szerint csak a fels hatrt kell megadni, de az alst nem a nyelv rgzti, hanem a programoz.
Ritkn (pl. C) az adott dimenziban lv elemek darabszmt kell megadni, az indexek tartomnyt ez alapjn a nyelv hatrozza meg.
4. Hogyan lehet megadni az als s a fels hatrt illetve a darabszmot?
Literllal vagy nevestett konstanssal (pl. FORTRAN, COBOL, Pascal), vagy konstans kifejezssel (pl. C). Ezek a statikus tmbhatrokkal dolgoz nyelvek. Itt fordtsi idben
eldl az rtkcsoport elemeinek darabszma.
Kifejezssel. (pl. PL/I, Ada). Ezek a dinamikus tmbhatrt alkalmaz nyelvek. Itt futsi idben dl el a darabszm, de ezutn termszetesen az nem vltozik.
A tmb tpus alapvet szerepet jtszik az absztrakt adatszerkezetek folytonos brzolst
megvalst implementciknl.
A rekord tpus a rekord absztrakt adatszerkezet (l. Adatszerkezetek s algoritmusok)
megjelense tpus szinten. A rekord tpus minden esetben heterogn, a tartomnynak elemei
olyan rtkcsoportok, amelyeknek elemei klnbz tpusak lehetnek. Az rtkcsoporton
bell az egyes elemeket meznek nevezzk. Minden meznek sajt, nll neve (ami egy
azonost) s sajt tpusa van. A klnbz rekord tpusok mezinek neve megegyezhet.
A nyelvek egy rszben (pl. C) a rekord tpus statikus, teht a mezk szma minden
rtkcsoportban azonos. Ms nyelvek esetn (pl. Ada) lehet egy olyan mezegyttes, amely
minden rtkcsoportban szerepel (a rekord fix rsze) s lehet egy olyan mezegyttes,
amelynek mezi kzl az rtkcsoportokban csak bizonyosak szerepelnek (a rekord vltoz
rsze). Egy kln nyelvi eszkz (a diszkrimintor) szolgl annak megadsra, hogy az adott
konkrt esetben a vltoz rsz mezi kzl melyik jelenjen meg.
33
Az snyelvek (pl. PL/I, COBOL) tbbszint rekord tpussal dogoznak. Ez azt jelenti, hogy
egy mez feloszthat jabb mezkre, tetszleges mlysgig s tpus csak a legals szint
mezkhz rendelhet, de az csak egyszer tpus lehet. A ksbbi nyelvek (pl. Pascal, C, Ada)
rekord tpusa egyszint, azaz nincsenek almezk, viszont a mezk tpusa sszetett is lehet.
Egy rekord tpus programozsi eszkz esetn az eszkz nevvel az rtkcsoport sszes
mezjre hivatkozunk egyszerre (a megads sorrendjben).
Az egyes mezkre kln minstett nvvel tudunk hivatkozni, ennek alakja:
eszkznv.meznv
Az eszkz nevvel trtn minstsre azrt van szksg, mert a mezk nevei nem
szksgszeren egyediek.
A rekord tpus alapvet szerepet jtszik az input-outputnl.
2.4.3. Mutat tpus
A mutat tpus lnyegben egyszer tpus, specialitst az adja, hogy tartomnynak elemei
trcmek. A mutat tpus segtsgvel valsthat meg a programnyelvekben az indirekt
cmzs. A mutat tpus programozsi eszkz rtke teht egy trbeli cm, gy azt
mondhatjuk, hogy az adott eszkz a tr adott terlett cmzi, az adott trterletre mutat. A
mutat tpus egyik legfontosabb mvelete a megcmzett trterleten elhelyezked rtk
elrse.
A mutat tpus tartomnynak van egy specilis eleme, amely nem valdi trcm. Teht az
ezzel az rtkkel rendelkez mutat tpus programozsi eszkz nem mutat sehova. A
nyelvek ezt az rtket ltalban beptett nevestett konstanssal kezelik (az Adban s a C-ben
ennek neve NULL).
A mutat tpus alapvet szerepet jtszik az absztrakt adatszerkezetek sztszrt
reprezentcijt kezel implementciknl.
34
2.5. A nevestett konstans
A nevestett konstans olyan programozsi eszkz, amelynek 3 komponense van:
nv
tpus
rtk
A nevestett konstanst deklarlni kell.
A program szvegben a nevestett konstans a nevvel jelenik meg, s az mindig az
rtkkomponenst jelenti. A nevestett konstans rtkkomponense a deklarcinl eldl s nem
vltoztathat meg a futs folyamn.
A nevestett konstans szerepe egyrszt az, hogy bizonyos sokszor elfordul rtkeket
beszl nevekkel ltunk el s ily mdon az rtk szerepkrre tudunk utalni a szvegben.
Msrszt viszont, ha a program szvegben meg akarjuk vltoztatni ezt az rtket, akkor nem
kell annak valamennyi elfordulst megkeresni s trni, hanem elegend egy helyen, a
deklarcis utastsban vgrehajtani a mdostst.
A nevestett konstanssal kapcsolatban az egyes nyelveknek a kvetkez krdseket kell
megvlaszolniuk:
1. Ltezik-e a nyelvben beptett nevestett konstans?
2. A programoz definilhat-e sajt nevestett konstanst?
3. Ha igen, milyen tpust?
4. Hogyan adhat meg a nevestett konstans rtke?
A vlaszok:
FORTRAN-ban s PL/I-ben nincs nevestett konstans, COBOL-ban pedig csak beptett van.
A C-ben van beptett nevestett konstans s a programoz tbbflekppen tud ltrehozni
sajtot. A legegyszerbb az elfordtnak szl
#define nv literl
35
makr hasznlata. Ekkor az elfordt a forrsprogramban a nv minden elfordulst helyettesti a literllal.
Pascalban s Adban van beptett nevestett konstans s a programoz is definilhat sajt
nevestett konstanst, egyszer s sszetett tpust egyarnt. A Pascalban az rtket literllal,
Adban kifejezs segtsgvel tudjuk megadni.
2.6. A vltoz
A vltoz olyan programozsi eszkz, amelynek 4 komponense van:
nv
attribtumok
cm
rtk
A nv egy azonost. A program szvegben a vltoz mindig a nevvel jelenik meg, az
viszont brmely komponenst jelentheti. Szemllhetjk gy a dolgokat, hogy a msik hrom
komponenst a nvhez rendeljk hozz.
Az attribtumok olyan jellemzk, amelyek a vltoz futs kzbeni viselkedst hatrozzk
meg. Az eljrsorientlt nyelvekben (ltalban a tpusos nyelvekben) a legfbb attribtum a
tpus, amely a vltoz ltal felvehet rtkek krt hatrolja be. Vltozhoz attribtumok
deklarci segtsgvel rendeldnek. A deklarcinak klnbz fajtit ismerjk.
Explicit deklarci: A programoz vgzi explicit deklarcis utasts segtsgvel. A vltoz
teljes nevhez kell az attribtumokat megadni. A nyelvek ltalban megengedik, hogy tbb
vltoznvhez ugyanazokat az attribtumokat rendeljk hozz.
Implicit deklarci: A programoz vgzi, betkhz rendel attribtumokat egy kln
deklarcis utastsban. Ha egy vltoz neve nem szerepel explicit deklarcis utastsban,
akkor a vltoz a nevnek kezdbetjhez rendelt attribtumokkal fog rendelkezni, teht az
azonos kezdbetj vltozk ugyanolyan attribtumak lesznek.
36
Automatikus deklarci: A fordtprogram rendel attribtumot azokhoz a vltozkhoz,
amelyek nincsenek explicit mdon deklarlva, s kezdbetjkhz nincs attribtum rendelve
egy implicit deklarcis utastsban. Az attribtum hozzrendelse a nv valamelyik
karaktere (gyakran az els) alapjn trtnik.
Az eljrsorientlt nyelvek mindegyike ismeri az explicit deklarcit, s egyesek csak azt
ismerik. Az utbbiak ltalnossgban azt mondjk, hogy minden nvvel rendelkez
programozi eszkzt explicit mdon deklarlni kell.
A vltoz cmkomponense a trnak azt a rszt hatrozza meg, ahol a vltoz rtke
elhelyezkedik. A futsi id azon rszt, amikor egy vltoz rendelkezik cmkomponenssel, a
vltoz lettartamnak hvjuk.
Egy vltozhoz cm rendelhet az albbi mdokon.
Statikus trkioszts: A futs eltt eldl a vltoz cme s a futs alatt az nem vltozik. Amikor
a program betltdik a trba, a statikus trkioszts vltozk fix trhelyre kerlnek.
Dinamikus trkioszts: A cm hozzrendelst a futtat rendszer vgzi. A vltoz akkor kap
cmkomponenst, amikor aktivizldik az a programegysg, amelynek loklis vltozja, s a
cmkomponens megsznik, ha az adott programegysg befejezi a mkdst. A
cmkomponens a futs sorn vltozhat, st vannak olyan idintervallumok, amikor a
vltoznak nincs is cmkomponense.
A programoz ltal vezrelt trkioszts: A vltozhoz a programoz rendel cmkomponenst
futsi idben. A cmkomponens vltozhat, s az is elkpzelhet, hogy bizonyos
idintervallumokban nincs is cmkomponens. Hrom alapesete van:
A programoz abszolt cmet rendel a vltozhoz, konkrtan megadja, hogy hol
helyezkedjen el.
Egy mr korbban a trban elhelyezett programozsi eszkz cmhez kpest mondja meg,
hogy hol legyen a vltoz elhelyezve, vagyis relatv cmet ad meg. Lehet, hogy a
programoz az abszolt cmet nem is ismeri.
37
A programoz csak azt adja meg, hogy mely idpillanattl kezdve legyen az adott
vltoznak cmkomponense, az elhelyezst a futtat rendszer vgzi. A programoz nem
ismeri az abszolt cmet.
Mindhrom esetben lennie kell olyan eszkznek, amivel a programoz megszntetheti a
cmkomponenst.
A programozsi nyelvek ltalban tbbfle cmhozzrendelst ismernek, az eljrsorientlt
nyelveknl ltalnos a dinamikus trkioszts. A vltozk cmkomponensvel kapcsolatos a
tbbszrs trhivatkozs esete. Errl akkor beszlnk, amikor kt klnbz nvvel, esetleg
klnbz attribtumokkal rendelkez vltoznak a futsi id egy adott pillanatban azonos a
cmkomponense s gy rtelemszeren az rtkkomponense is. gy ha az egyik vltoz rtkt
mdostjuk, akkor a msik is megvltozik. A korai nyelvekben (pl. FORTRAN, PL/I) erre
explicit nyelvi eszkzk lltak rendelkezsre, mert bizonyos problmk megoldsa csak gy
volt lehetsges. A szituci viszont elidzhet (akr vletlenl is) ms nyelvekben is, s ez
nem biztonsgos kdhoz vezethet.
A vltoz rtkkomponense mindig a cmen elhelyezett bitkombinciknt jelenik meg. A
bitkombinci felptst a tpus ltal meghatrozott reprezentci dnti el.
Egy vltoz rtkkomponensnek meghatrozsra a kvetkez lehetsgek llnak
rendelkezsnkre:
rtkad utasts: Az eljrsorientlt nyelvek leggyakoribb utastsa, az algoritmusok
kdolsnl alapvet. Alakja az egyes nyelvekben:
FORTRAN: vltoznv = kifejezs
COBOL:
MOVE rtk TO vltoznv [, vltoznv ]
PL/I:
vltoznv [, vltoznv ] = kifejezs;
Pascal: vltoznv := kifejezs
38
C: vltoznv = kifejezs;
Ada: vltoznv := kifejezs;
Az rtkad utasts bal oldaln a vltoz neve ltalban a cmkomponenst, kifejezsben az
rtkkomponenst jelenti. Az trtkad utasts esetn a mveletek elvgzsnek sorrendje
implementcifgg. ltalban a baloldali vltoz cmkomponense dl el elszr.
A tpusegyenrtksget (l. 3. fejezet) vall nyelvekben a kifejezs tpusnak azonosnak kell
lennie a vltoz tpusval, a tpusknyszertst vall nyelveknl pedig mindig a kifejezs
tpusa konvertldik a vltoz tpusra.
Input: A vltoz rtkkomponenst egy perifrirl kapott adat hatrozza meg. Rszletesen l.
13. fejezet.
Kezdrtkads: Kt fajtja van. Explicit kezdrtkadsnl a programoz explicit
deklarcis utastsban a vltoz rtkkomponenst is megadja. Amikor a vltoz
cmkomponenst kap, akkor egyben az rtket reprezentl bitsorozat is belltdik Megadhat
az rtkkomponens literl vagy kifejezs segtsgvel.
A hivatkozsi nyelvek egy rsze azt mondja, hogy mindaddig, amg a programoz valamilyen
mdon nem hatrozza meg egy vltoz rtkkomponenst, az hatrozatlan, teht nem
hasznlhat fl. Ez azrt van, mert amikor egy vltoz cmkomponenst kap, akkor az adott
memriaterleten tetszleges bitkombinci (szemt) llhat, amivel nem lehet mit kezdeni.
Van olyan hivatkozsi nyelv, amely az automatikus kezdrtkads elvt vallja. Ezeknl a
nyelveknl, ha a programoz nem adott explicit kezdrtket, akkor a cmkomponens
hozzrendelsekor a hivatkozsi nyelv ltal meghatrozott bitkombinci kerl belltsra
(nullzdnak a vltozk). A hivatkozsi nyelvek harmadik rsze nem mond semmit errl a
dologrl. Viszont az implementcik tlnyom rsze megvalstja az automatikus
kezdrtkadst, akr mg a hivatkozsi nyelv ellenben is.
39
2.7. Alapelemek az egyes nyelvekben
Turbo Pascal:
A Pascalban minden programozi eszkzt explicit mdon deklarlni kell.
A Turbo Pascal tpusrendszere az albbi:
egyszer tpusok
sorszmozott
elredefinilt
karakteres (char) logikai (boolean) egsz (integer, shortint, longint, byte, word) felsorolsos
intervallum
vals
string (egyszernek s sszetettnek is tekinthet egyszerre, mint karakterlnc, illetve mint karakterek egydimenzis tmbje)
sszetett tpusok
tmb (array) rekord (record) halmaz (set) llomny (file) objektum (object) mutat (pointer)
A tmb tpus megadsnak formja:
ARRAY [ intervallum [, intervallum ] ] OF elemtpus Nevestett konstans deklarcija:
CONST nv=literl; [ nv=literl; ]
40
Vltoz deklarcija:
VAR nv [, nv ] : tpus; [ nv [, nv ]: tpus; ] Sajt tpus ltrehozsa:
TYPE nv=tpuslers; [ nv =tpuslers; ]
Az gy ltrehozott tpus minden ms tpustl klnbzni fog.
Ada:
A programoznak minden sajt eszkzt explicit mdon deklarlni kell.
Az Ada tpusrendszere az albbi:
skalr tpusok
felsorolsos
egsz (integer) karakteres (character) logikai (boolean) vals (float) sszetett tpusok
tmb (array) rekord (record) mutat tpus(access) privt tpus (private) A skalr tpus sorszmozott tpus. Az intervallum altpust az Ada a kvetkezkppen kpzi:
RANGE als_hatr..fels_hatr
Az explicit deklarcis utasts a kvetkezkppen nz ki:
nv [, nv ] : [CONSTANT] tpus [:=kifejezs];
41
Ha a CONSTANT alapsz szerepel, akkor nevestett konstanst, ha nem szerepel, akkor vltozt deklarltunk. A kifejezs a nevestett konstansnl ktelez, ez definilja az rtkt. Vltoz
esetn pedig ezzel lehet explicit kezdrtket adni.
Pldul:
A: constant integer:=111; B: constant integer:=A*22+56; X: real; Y: real:=1.0;
Sajt, minden ms tpustl klnbz tpus deklarlsa:
TYPE nv IS tpuslers;
Altpus deklarlsa: SUBTYPE nv IS tpuslers;
Pldul:
type BYTE is range 0..255; subtype KISBETUK is character range a..z;
Felsorolsos tpus ltrehozsa sajt tpusknt:
type HONAPOK is (Januar, Februar, Marcius, Aprilis, Majus, Junius, Julius, Augusztus, Szeptember, Oktober, November, December); type NYARI_HONAPOK is (Junius, Julius, Augusztus);
Ebben az esetben ugyanaz az azonost kt felsorolsos tpus tartomnyban is szerepel, teht
hivatkozskor meg kell mondani, hogy melyik tpus elemrl van sz. Az Ada ilyenkor
minst a tpus nevvel:
HONAPOKORD(Augusztus)
42
Az Adban dinamikusak a tmbhatrok. Definilhat olyan sajt tmb tpus, ahol nem adjuk
meg elre az indexek tartomnyt, hanem majd csak akkor, amikor a deklarciban
felhasznljuk a tpust.
Pldul:
type T is array(integer,integer); A:T(0..10,0..10);
C:
A C tpusrendszere a kvetkez:
aritmetikai tpusok
integrlis tpusok
egsz (int, short[int], long[int]) karakter (char) felsorolsos
vals (float, double, long double)
szrmaztatott tpusok
tmb
fggvny
mutat
struktra
union
void tpus
Az aritmetikai tpusok az egyszer, a szrmaztatottak az sszetett tpusok a C-ben. Az
aritmetikai tpusok tartomnynak elemeivel aritmetikai mveletek vgezhetk. A karakter
tpus tartomnynak elemeit a bels kdok alkotjk. Logikai tpus nincs, hamisnak az int 0 felel meg, minden ms int rtket pedig igaznak tekint a C. A hasonlt mveletek igaz esetn int 1 rtket adnak Az egszek s karakter tpus eltt szerepeltethet unsigned
43
tpusminst nem eljeles (direkt) brzolst, a signed eljeles brzolst jell. A struktra egy fix szerkezet rekord, a union egy olyan, csak vltoz rszt tartalmaz rekord, amelynl
minden konkrt esetben pontosan egyetlen mez van jelen. A void tpus tartomnya res, gy reprezentcija s mveletei sincsenek.
A felsorolsos tpusok tartomnyai nem fedhetik t egymst. A tartomny elemei viszont int tpus nevestett konstansoknak tekinthetk. Az rtkk egsz literlokkal bellthat, de ha
nincs explicit rtkads, akkor a felsorols sorrendjben 0-rl indul az rtkk s egyesvel
nvekszik. Ha valamelyik elem rtkt megadtuk s a kvetkezt nem, akkor annak rtke
az elz rtktl 1-el nagyobb rtk lesz. Klnbz elemekhez ugyanaz az rtk
hozzrendelhet. A felsorolsos tpus megadsnak formja:
ENUM [ nv ] {azonost [=konstans_kifejezs ] [, azonost [=konstans_kifejezs ] ] }[vltozlista];
Plda:
enum szinek {VOROS=11, NARANCS=9, SARGA=7, ZOLD=5, KEK=3, IBOLYA=3};
Az explicit deklarcis utasts a kvetkezkppen nz ki:
[ CONST ] tpuslers eszkzazonosts [ =kifejezs ] [, eszkzazonosts [ =kifejezs ] ;
A CONST megadsa esetn nevestett konstanst deklarlunk (ekkor a kifejezs annak rtkt, a tpuslers annak tpust definilja, s az eszkzazonosts azonost lehet), egybknt viszont a tpuslers s az eszkzazonosts alapjn meghatrozott programozsi eszkzt. Ha ez vltoz, akkor a kifejezs segtsgvel explicit kezdrtk adhat neki. Ha nem szerepel a CONST, akkor az eszkzazonosts helyn az albbiak szerepelhetnek a megadott jelentssel:
azonost : tpuslers tpus vltoz
(azonost): tpuslers visszatrsi tpussal rendelkez fggvnyt cmz mutat
tpus vltoz
44
*azonost : tpuslers tpus eszkzt cmz mutat tpus vltoz
azonost(): tpuslers visszatrsi tpus fggvny
azonost[]: tpuslers tpus elemeket tartalmaz tmb tpus vltoz s ezek tetszleges kombincija. A tpuslers ugyanezeket a konstrukcikat tartalmazhatja a tpusnevek mellett.
Plda:
int i, *j, f(), *g(), a[17], *b[8];
Ebben a deklarcis utastsban az i egsz tpus a j egszet cmz mutat tpus, az a egszeket tartalmaz 17 elem egydimenzis tmb tpus, a b egszeket cmz mutat tpus elemeket tartalmaz 8 elem egydimenzis tmb tpus vltoz; az f egsz visszatrsi tpus, a g pedig egszeket cmz mutat visszatrsi tpus fggvny.
Tpuslers nevestse:
TYPEDEF tpuslers nv [,tpuslers nv] ;
Nem hoz ltre j tpust, csak tpusnv szinonimt.
Struktra deklarlsa:
STRUCT [struktratpus_nv] {mez_deklarcik} [vltozlista]
Union deklarlsa:
UNION [uniontpus_nv] {mez_deklarcik} [vltozlista]
A C csak egydimenzis tmbket kezel. Az indexek darabszmt kell megadni s az index 0-
tl darabszm-1-ig fut. A hivatkozsi nyelv statikus tmbhatrokat ismer, de egyes implementcik dinamikusakat kezelnek.
45
A C a tmbt mindig mutat tpusknt kezeli. Egy tmb tpus vltoz neve egy olyan mutat
tpus lesz, amely a tmb els elemt cmzi.
A C-ben van automatikus deklarci, ha egy fggvnynvhez nem adunk tpust, akkor az
alaprtelmezs szerint int lesz.
46
3. KIFEJEZSEK
A kifejezsek szintaktikai eszkzk. Arra valk, hogy a program egy adott pontjn ott mr
ismert rtkekbl j rtket hatrozzunk meg. Kt komponensk van, rtk s tpus.
Egy kifejezs formlisan a kvetkez sszetevkbl ll:
operandusok: Az operandus literl, nevestett konstans, vltoz vagy fggvnyhvs lehet. Az rtket kpviseli.
opertorok: Mveleti jelek. Az rtkekkel vgrehajtand mveleteket hatrozzk meg. kerek zrjelek: A mveletek vgrehajtsi sorrendjt befolysoljk. Minden nyelv
megengedi a redundns zrjelek alkalmazst.
A legegyszerbb kifejezs egyetlen operandusbl ll.
Attl fggen, hogy egy opertor hny operandussal vgzi a mveletet, beszlnk
egyoperandus (unris), ktoperandus (binris), vagy hromoperandus (ternris)
opertorokrl.
A kifejezsnek hrom alakja lehet attl fggen, hogy ktoperandus opertorok esetn az
operandusok s az opertor sorrendje milyen. A lehetsges esetek:
prefix, az opertor az operandusok eltt ll (* 3 5) infix, az opertor az operandusok kztt ll (3 * 5) postfix, az opertor az operandusok mgtt ll (3 5 *) Az egyoperandus opertorok ltalban az operandus eltt, ritkn mgtte llnak. A
hromoperandus opertorok ltalban infixek.
Azt a folyamatot, amikor a kifejezs rtke s tpusa meghatrozdik, a kifejezs
kirtkelsnek nevezzk. A kirtkels sorn adott sorrendben elvgezzk a mveleteket,
elll az rtk, s hozzrendeldik a tpus.
A mveletek vgrehajtsi sorrendje a kvetkez lehet:
A mveletek felrsi sorrendje, azaz balrl-jobbra. A felrsi sorrenddel ellenttesen, azaz jobbrl-balra.
47
Balrl-jobbra a precedencia tblzat figyelembevtelvel. Az infix alak nem egyrtelm (l. Adatszerkezetek s algoritmusok). Az ilyen alakot
hasznl nyelvekben az opertorok nem azonos erssgek. Az ilyen nyelvek opertoraikat
egy precedencia tblzatban adjk meg. A precedencia tblzat sorokbl ll, az egy sorban
megadott opertorok azonos erssgek (prioritsak, precedencijak), az elrbb szereplk
ersebbek. Minden sorban meg van adva mg a ktsi irny, amely megmondja, hogy az adott
sorban szerepl opertorokat milyen sorrendben kell kirtkelni, ha azok egyms mellett
llnak egy kifejezsben. A ktsi irny lehet balrl jobbra, vagy jobbrl balra.
Egy infix alak kifejezs kirtkelse a kvetkezkppen trtnik:
Indulunk a kifejezs elejn (balrl-jobbra szably) s sszehasonltjuk az 1. s 2. opertor
precedencijt (ha csak egyetlen opertor van, akkor az ltala kijellt mveletet vgezzk el,
ha csak egyetlen operandus van, akkor annak rtke adja a kifejezs rtkt, tpusa a tpust).
Ha a baloldali ersebb, vagy azonos erssgek s a precedencia tblzat adott sorban balrl
jobbra ktsi irny van, akkor vgrehajtdik a baloldali opertor ltal kijellt mvelet,
klnben tovbblpnk a kifejezsben (ha mg van opertor) s hasonltjuk a kvetkez kt
opertor precedencijt. Ez alapjn az elsnek elvgzend mvelet egyrtelmen
meghatrozhat, a folytats viszont implementcifgg. Ugyanis az els mvelet
vgrehajtsa utn vagy visszalpnk a kifejezs elejre s megint az els opertorral kezdjk
a tovbbi vizsglatokat, vagy a kifejezsben tovbblpnk s csak akkor lpnk vissza az
elejre, amikor a kifejezs vgre rtnk.
Megjegyzs: A kifejezs rtknek meghatrozsa termszetesen futsi idej
tevkenysg. A fordtprogramok ltalban az infix kifejezsekbl postfix kifejezseket
lltanak el, s ezek tnyleges kirtkelse trtnik meg. A fentebb lert lpsek teht
igazban az infix kifejezsek trsra vonatkoznak.
A mveletek elvgzse eltt meg kell hatrozni az operandusok rtkt. Ennek sorrendjt a
hivatkozsi nyelvek egy rsze szablyozza (ltalban elbb a baloldalit), ms rsze nem
mond rla semmit, a C pedig azt mondja, hogy tetszleges (teht implementcifgg).
Az infix kifejezsek esetn kell hasznlni a zrjeleket, amelyek a precedencia tblzat
alapjn kvetkez vgrehajtsi sorrendet tudjk fellbrlni. Egy bezrjelezett rszkifejezst
48
mindig elbb kell kirtkelni. Egyes nyelvek a kerek zrjeleket is szerepeltetik a precedencia
tblzatban, az els sorban.
A teljesen zrjelezett infix kifejezs egyrtelm, kirtkelsnl egyetlen sorrend ltezik.
Az eljrsorientlt nyelvek az infix alakot hasznljk.
A kirtkels szempontjbl specilisak azok a kifejezsek, amelyekben logikai opertorok
szerepelnek. Ezeknl ugyanis gyis eldlhet a kifejezs rtke, hogy nem vgezzk el az
sszes kijellt mveletet. Pldul egy S mvelet esetn, ha az els operandus rtke hamis,
az eredmny hamis lesz, fggetlenl a msodik operandus rtktl (brmilyen bonyolult
rszkifejezssel is adtuk meg azt).
A nyelvek az ilyen kifejezsekkel kapcsolatban a kvetkezket valljk:
Az ilyen kifejezst is vgig kell rtkelni (pl. FORTRAN), ez a teljes kirtkels.
Csak addig kell kirtkelni a kifejezst, amg egyrtelmen el nem dl az eredmny. Ez a
rvidzr kirtkels (pl. PL/I).
A nyelvben vannak rvidzr illetve nem rvidzr opertorok, a programoz dntheti el a
kirtkels mdjt (pl. Adban nem rvidzr : and, or; rvidzr: and then, or else).
A kifejezs kirtkelst futsi zemmdknt lehet belltani (pl. Turbo Pascal).
A kifejezs tpusnak meghatrozsnl ktfle elvet kvetnek a nyelvek. Vannak a
tpusegyenrtksget s vannak a tpusknyszertst vallk. Ugyanez a krdskr flmerl az
rtkad utastsnl (l. 2.6. alfejezet) s a paramterkirtkelsnl (l. 5.4. alfejezet) is.
A tpusegyenrtksget vall nyelvek azt mondjk, hogy egy kifejezsben egy
ktoperandus vagy hromoperandus opertornak csak azonos tpus operandusai lehetnek.
Ilyenkor nincs konverzi, az eredmny tpusa vagy az operandusok kzs tpusa, vagy azt az
opertor dnti el (pldul hasonlt mveletek esetn az eredmny logikai tpus lesz).
A klnbz nyelvek szerint kt programozsi eszkz tpusa azonos, ha azoknl fnnll a
deklarci egyenrtksg: az adott eszkzket azonos deklarcis utastsban, egytt, azonos tpusnvvel deklarltuk.
49
nv egyenrtksg: az adott eszkzket azonos tpusnvvel deklarltuk (esetleg klnbz deklarcis utastsban).
struktra egyenrtksg: a kt eszkz sszetett tpus s a kt tpus szerkezete megegyezik (pldul kt 10-10 egsz rtket tartalmaz tmb tpus, fggetlenl az
indexek tartomnytl).
A tpusknyszerts elvt vall nyelvek esetn klnbz tpus operandusai lehetnek az
opertornak. A mveletek viszont csak az azonos bels brzols operandusok kztt
vgezhetk el, teht klnbz tpus operandusok esetn konverzi van. Ilyen esetben a
nyelv definilja, hogy egy adott opertor esetn egyrszt milyen tpuskombincik
megengedettek, msrszt, hogy mi lesz a mvelet eredmnynek a tpusa.
A kifejezs kirtkelsnl minden mvelet elvgzse utn eldl az adott rszkifejezs tpusa
s az utoljra vgrehajtott mveletnl pedig a kifejezs tpusa.
Egyes nyelvek (pl. Pascal, C) a numerikus tpusoknl megengedik a tpusknyszerts egy
specilis fajtjt mg akkor is, ha egybknt a tpusegyenrtksget valljk. Ezeknl a
nyelveknl beszlnk a bvts s szkts esetrl. A bvts olyan tpusknyszerts, amikor
a konvertland tpus tartomnynak minden eleme egyben eleme a cltpus tartomnynak is
(pl. egsz vals). Ekkor a konverzi minden tovbbi nlkl, rtkveszts nlkl vgrehajthat. A szkts ennek a fordtottja (pl. vals egsz), ekkor a konverzinl rtkcsonkts, esetleg kerekts trtnik.
A nyelvek kzl az Adban semmifle tpuskevereds nem lehet, a PL/I viszont a teljes
konverzi hve.
Konstans kifejezs
Azt a kifejezst, amelynek rtke fordtsi idben eldl, amelynek kirtkelst a fordt
vgzi, konstans kifejezsnek hvjuk. Operandusai ltalban literlok s nevestett konstansok
lehetnek.
50
3.1. Kifejezs a C-ben
A C egy alapveten kifejezsorientlt nyelv. Az aritmetikai tpusoknl a tpusknyszerts
elvt vallja.
A mutat tpus tartomnynak elemeivel bizonyos aritmetikai mveletek elvgezhetk, azok
eljel nlkli egszeknek tekinthetk.
A tmb tpus vltoz neve mutat tpus, teht
int i; int a[10];
esetn a[i] jelentse *(a+i).
A C kifejezsfogalmnak rekurzv defincija a kvetkez:
kifejezs: { elsdleges_kifejezs |
balrtk++ | balrtk-- | ++balrtk | --balrtk | egy_operandus_opertor kifejezs | SIZEOF(kifejezs) | SIZEOF(tpusnv) | (tpusnv)kifejezs | kifejezs kt_operandus_opertor kifejezs | kifejezs?kifejezs:kifejezs | balrtk rtkad_opertor kifejezs | kifejezs,kifejezs }
elsdleges_kifejezs:
{ konstans | vltoz |
51
(kifejezs) | fggvnynv(aktulis_paramter_lista) | tmbnv[kifejezs] | balrtk.azonost | elsdleges_kifejezs->azonost}
balrtk : { azonost |
tmbnv[kifejezs] | balrtk.azonost | elsdleges_kifejezs->azonost | *kifejezs | (balrtk)}
A C precedencia tblzata a kvetkez:
( ) [] . -> * & + - ! ~ ++ -- SIZEOF (tpus) * / % + - >> = == != & ^ | && || ?: = += -= *= /= %= >>=
52
A C kifejezs formlis lersban a kvetkez opertorokra hivatkoztunk:
egy_operandus_opertor: a precedencia tblzat 2. sornak els 6 opertora kt_operandus_opertor: a precedencia tblzat 3. - 12. sornak opertorai rtkad _opertor: a 14. sor opertorai
Az egyes opertorok rtelmezse:
() Egyrszt a szoksos rtelm kiemelst, a precedencia fellrst szolglja, msrszt a
fggvnyopertor.
[] A tmbopertor.
. A minst opertor, struktra s union esetn hasznljuk, ha nvvel minstnk.
-> A mutatval trtn minsts opertora.
* Az indirekcis opertor. A mutat tpus operandusa ltal hivatkozott trterleten elhelyezett
rtkket adja.
& Az operandusnak cmt adja meg.
+
53
Plusz eljel.
- Mnusz eljel.
! Egyoperandus opertor, integrlis s mutat tpus operandusokra alkalmazhat. Ha az
operandus rtke nem nulla, akkor az eredmny nulla, egybknt 1. Az eredmny int tpus lesz.
~ Az egyes komplemens opertora.
++ s - Operandusnak rtkt nveli illetve cskkenti 1-el. int x,n; n=5; x=n++; esetn x rtke 5 lesz, az rtkads az n korbbi rtkvel trtnik. x=++n; esetn pedig 6 lesz, a megnvelt rtkkel trtnik az rtkads. Az n rtke mindkt esetben nveldik. sizeof(kifejezs) A kifejezs tpusnak az brzolsi hosszt adja bjtban.
sizeof(tpus) A tpus brzolshoz szksges bjtok szmt adja.
(tpus)
Az explicit konverzis opertor.
54
*
Szorzs opertora.
/ Oszts opertora. Az egszek osztsakor egszoszts. % Maradkkpzs opertora. + sszeads opertora.
- Kivons opertora. >> s
55
? : Hromoperandus opertor, az n. feltteles opertor. Ha az els operandus rtke nem 0, akkor a mvelet eredmnyt a msodik operandus rtke hatrozza meg, egybknt a
harmadik.
Pldul az(a>b)?a:b kifejezs az a s b rtke kzl a nagyobbikat adja.
=, +=, -=, *=, /=, %=, >>=,
56
4. UTASTSOK
Az utastsok alkotjk az eljrsorientlt nyelveken megrt programok olyan egysgeit,
amelyekkel egyrszt az algoritmusok egyes lpseit megadjuk, msrszt a fordtprogram
ezek segtsgvel generlja a trgyprogramot. Kt nagy csoportjuk van: a deklarcis s a
vgrehajthat utastsok.
A deklarcis utastsok mgtt nem ll trgykd. Ezen utastsok teljes mrtkben a
fordtprogramnak szlnak, attl krnek valamilyen szolgltatst, zemmdot lltanak be,
illetve olyan informcikat szolgltatnak, melyeket a fordtprogram felhasznl a trgykd
generlsnl. Alapveten befolysoljk a trgykdot, de maguk nem kerlnek lefordtsra. A
programoz a nvvel rendelkez sajt programozsi eszkzeit tudja deklarlni.
A vgrehajthat utastsokbl generlja a fordtprogram a trgykdot. ltalban a
magasszint nyelvek vgrehajthat utastsaibl tbb (nha sok) gpi kd utasts ll el.
A vgrehajthat utastsokat az albbiak szerint csoportosthatjuk:
1. rtkad utasts
2. res utasts
3. Ugr utasts
4. Elgaztat utastsok
5. Ciklusszervez utastsok
6. Hv utasts
7. Vezrlstad utastsok
8. I/O utastsok
9. Egyb utastsok
A 3-7. utastsok az n. vezrlsi szerkezetet megvalst utastsok. Az eljrsorientlt
nyelvek ltalban tartalmazzk az 1-5. utastsokat, egy rszk pedig ismeri a 6-8. utasts
fajtkat. A legnagyobb eltrs az egyb utastsok tern tapasztalhat. A nyelvek egy
rszben nincs ilyen utasts (pl. C), nmelyikben viszont sok van bellk (pl. PL/I).
57
Vegyk sorra a vgrehajthat utastsokat.
4.1. rtkad utasts
Feladata belltani vagy mdostani egy (esetleg tbb) vltoz rtkkomponenst a program
futsnak brmely pillanatban. Ezt az utastst mr trgyaltuk a vltoznl (l. 2.6. alfejezet).
4.2. res utasts
Az eljrsorientlt programnyelvek ltalban tartalmaznak res utastst, s vannak olyan
nyelvek (a korai nyelvek), melyekben a szintaktika olyan, hogy elengedhetetlen ennek
hasznlata. Jelentsge viszont ltalnossgban abban ll, hogy segtsgvel egyrtelm
programszerkezet alakthat ki.
Az res utasts hatsra a processzor egy res gpi utastst hajt vgre.
Egyes nyelvekben az res utastsnak van kln alapszava (pl. Adban a NULL), mshol nincsen. Ez utbbi nyelvekben az res utastst nem jelljk (pl. kt utasts vgjel kztt
nem ll semmi).
4.3. Ugr utasts
Az ugr (vagy felttel nlkli vezrlstad) utasts segtsgvel a program egy adott
pontjrl egy adott cmkvel elltott vgrehajthat utastsra adhatjuk t a vezrlst.
ltalnosan hasznlt alakja:
GOTO cmke
A korai nyelvekben (FORTRAN, PL/I) GOTO nlkl gyakorlatilag nem lehet programot rni. A ksbbi nyelvekben viszont minden program vezrlsi szerkezete felrhat a GOTO utasts
58
hasznlata nlkl, br a nyelvek tartalmazzk azt. Az ugr utasts nem fegyelmezett mdon
trtn hasznlata veszlyeket hordoz magban, mert nem biztonsgos, tlthatatlan, struktra
nlkli kdot eredmnyezhet.
4.4. Elgaztat utastsok
4.4.1. Ktirny elgaztat utasts (feltteles utasts)
A ktirny elgaztat utasts arra szolgl, hogy a program egy adott pontjn kt
tevkenysg kzl vlasszunk, illetve egy adott tevkenysget vgrehajtsunk vagy sem. A
nyelvekben meglehetsen ltalnos a feltteles utasts kvetkez szerkezete:
IF felttel THEN tevkenysg [ ELSE tevkenysg ]
A felttel egy logikai (vagy annak megfelel tpus) kifejezs.
Krds, hogy egy nyelv mit mond a tevkenysg megadsrl. Egyes nyelvek (pl. Pascal) szerint itt csak egyetlen vgrehajthat utasts llhat. Ha viszont a tevkenysg olyan
sszetett, hogy csak tbb utastssal tudjuk lerni, akkor utasts zrjeleket kell alkalmazni.
Az utasts zrjel a Pascal esetn BEGIN s END. Egy ilyen mdon bezrjelezett utastssorozatot hvunk utasts csoportnak. Az utasts csoport formlisan egyetlen
utastsnak tekintend. Ms nyelvek (specilis szintaktikjuk miatt) megengedik, hogy a
tevkenysg lersra tetszleges vgrehajthat utastssorozatot alkalmazzunk (pl. Ada). A
ktirny elgaztat utastsnl beszlnk rvid (nem szerepel az ELSE-g) s hossz
(szerepel az ELSE-g) alakrl.
A ktirny elgaztat utasts szemantikja a kvetkez:
Kirtkeldik a felttel. Ha az igaz, akkor vgrehajtdik a THEN utni tevkenysg, s a program az IF-utastst kvet utastson folytatdik. Ha a felttel rtke hamis, s van
ELSE-g, akkor az ott megadott tevkenysg hajtdik vgre, majd a program az IF-utastst kvet utastson folytatdik, vgl ha nincs ELSE-g, akkor ez egy res utasts.
59
Az IF-utastsok tetszlegesen egymsba gyazhatk s termszetesen akr az IF-gban, akr
az ELSE-gban jabb feltteles utasts llhat. Ilyenkor felmerlhet a cselleng ELSE
problmja, amikoris a krds a kvetkez: egy
IF ... THEN IF ... THEN ... ELSE ... konstrukcij feltteles utasts esetn melyik IF-hez tartozik az ELSE-g? Vagyis itt egy
olyan rvid IF-utasts ll, amelybe be van gyazva egy hossz, vagy pedig egy hossz IF-
utasts THEN-gban szerepel egy rvid?
A vlasz tbbfle lehet:
a. A cselleng ELSE problma kikszblhet, ha mindig hossz IF-utastst runk
fel, gy, hogy abban az gban, amelyet elhagytunk volna, res utasts szerepel.
b. Ha a hivatkozsi nyelv errl nem mond semmit, akkor a dolog implementcifgg.
Az implementcik tbbsge azt mondja, hogy egy szabad ELSE a legkzelebbi,
ELSE-el mg nem prostott THEN-hez tartozik, vagyis az rtelmezs bentrl kifel
trtnik. Eszerint a fenti pldnkban egy rvid IF-utastsba gyaztunk egy hosszt.
c. A nyelv szintaktikja olyan, hogy egyrtelm a skatulyzs. Az Ada feltteles
utastsa a kvetkez:
IF felttel THEN vgrehajthat_utastsok [ ELSEIF felttel THEN vgrehajthat_utastsok ] [ ELSE vgrehajthat_utastsok ] END IF;
Vgl megjegyezzk, hogy a C-ben a felttel zrjelek kztt szerepel s nincs THEN alapsz.
4.4.2. Tbbirny elgaztat utasts
A tbbirny elgaztat utasts arra szolgl, hogy a program egy adott pontjn egymst
klcsnsen kizr akrhny tevkenysg kzl egyet (vagy esetleg egyet sem)
60
vgrehajtsunk. A tevkenysgek kztti vlasztst egy kifejezs rtkei szerint tehetjk meg.
Szintaktikja s szemantikja nyelvenknt klnbz. Nzzk a lehetsges megoldsokat.
Turbo Pascal: CASE kifejezs OF konstanslista : tevkenysg [ konstanslista : tevkenysg ] [ ELSE tevkenysg ] END;
A konstanslista literlok, vagy intervallumok vesszvel elvlasztott sorozata. Egy literl csak egy konstanslistban szerepelhet. A kifejezs s ennek megfelelen a konstanslista sorszmozott tpus lehet. Nem ktelez a kifejezs minden lehetsges rtkre elrni tevkenysget. A tevkenysg egy utasts vagy egy utasts csoport lehet.
Mkdse:
A kifejezs kirtkeldik, s az rtke a felrs sorrendjben hasonltsra kerl a konstansokkal. Ha van egyezs, vgrehajtdik a megfelel konstanslista utni tevkenysg, majd a CASE-utastst kvet utastssal folytatdik a program. Ha egyetlen
konstanssal sincs egyezs, de van ELSE-g, akkor vgrehajtdik az abban magadott
tevkenysg, majd a CASE-utastst kvet utastssal folytatdik a program. Ha nincs ELSE-g, akkor ez egy res utasts.
Ada:
CASE kifejezs1 IS WHEN { kifejezs | tartomny| } [ |{kifejezs | tartomny }] => vgrehajthat_utastsok [ WHEN { kifejezs | tartomny } [ |{kifejezs | tartomny }] => vgrehajthat_utastsok ] [ WHEN OTHERS => vgrehajthat_utastsok ] END CASE;
61
A WHEN-gakban szerepl kifejezsek s a tartomnyok rtkeinek klnbznik kell. A
kifejezs1 skalr tpus lehet. A kifejezs1 minden lehetsges rtkre el kell rni valamilyen tevkenysget.
Mkdse:
A kifejezs1 kirtkeldik, s rtke a felrs sorrendjben hasonltsra kerl a WHEN-gakban megadott kifejezsek s tartomnyok rtkeihez. Ha van egyezs, akkor
vgrehajtdnak a WHEN-gban lv utastsok, s a CASE-utastst kvet utastssal
folytatdik a program. Ha nincs egyezs sehol, de van WHEN OTHERS g, akkor az abban
megadott utastsok hajtdnak vgre s a CASE-utastst kvet utastssal folytatdik a
program. Ha nincs WHEN OTHERS g, akkor viszont futsi hiba (kivtel) kvetkezik be. Ha
valamely rtkekre nem akarunk csinlni semmit, akkor egy olyan WHEN OTHERS gat kell
szerepeltetnnk, amely egy res utastst tartalmaz.
C: SWITCH (kifejezs) { CASE egsz_konstans_kifejezs : [ tevkenysg ] [ CASE egsz_konstans_kifejezs : [tevkenysg ]] [ DEFAULT: tevkenysg] };
A kifejezs tpusnak egszre konvertlhatnak kell lennie. A CASE-gak rtkei nem lehetnek azonosak. A tevkenysg vgrehajthat utastsokbl llhat, vagy blokk lehet. A DEFAULT-g akrhol elhelyezkedhet.
Mkdse:
Kirtkeldik a kifejezs, majd rtke a felrs sorrendjben hasonltsra kerl a CASE-gak rtkeivel. Ha van egyezs, akkor vgrehajtdik az adott gban megadott tevkenysg,
majd a program a kvetkez gakban megadott tevkenysgeket is vgrehajtja, ha mg van
g. Ha nincs egyezs, de van DEFAULT-g, akkor az ott megadott tevkenysg hajtdik
62
vgre, majd a program a kvetkez gakban megadott tevkenysgeket is vgrehajtja, ha mg
van g. Ha nincs DEFAULT-g, akkor ez egy res utasts. Teht a C-ben kln utasts kell
ahhoz, hogy kilpjnk a SWITCH-utastsbl, ha egy g tevkenysgt vgrehajtottuk (l.
BREAK-utasts - 4.7. alfejezet).
PL/I: SELECT [ (kifejezs1) ] ; WHEN (kifejezs [, kifejezs ]) tevkenysg [ WHEN (kifejezs [, kifejezs ] ) tevkenysg ] [ OTHERWISE tevkenysg ] END;
A kifejezsek tpusa tetszleges. A tevkenysg egy utasts, egy utastscsoport, vagy egy blokk lehet.
Mkdse:
Ha szerepel a kifejezs1, akkor mkdse megegyezik az Adval. Teht a PL/I-ben is a kifejezs1 minden lehetsges rtkre el kell rni valamilyen tevkenysget. Ha nem szerepel, akkor a WHEN-gakban megadott kifejezsek rtkt bitlncc konvertlja s az
els olyan gat vlasztja ki, amelynek a bitjei nem csupa nullk. Ha nincs ilyen, akkor ez egy
res utasts.
A FORTRAN s a COBOL nem tartalmaz ilyen utastst.
4.5. Ciklusszervez utastsok
A ciklusszervez utastsok lehetv teszik, hogy a program egy adott pontjn egy bizonyos
tevkenysget akrhnyszor megismteljnk.
Egy ciklus ltalnos felptse a kvetkez:
63
fej
mag
vg
Az ismtlsre vonatkoz informcik vagy a fejben vagy a vgben szerepelnek.
A mag az ismtlend vgrehajthat utastsokat tartalmazza.
A ciklusok mkdsnl megklnbztetnk kt szlssges esetet. Az egyik az, amikor a
mag egyszer sem fut le, ezt hvjuk res ciklusnak. A msik az, amikor az ismtlds soha nem
ll le, ez a vgtelen ciklus. A mkds szerinti vgtelen ciklus a programban nyilvn
szemantikai hibt jelent, hiszen az sohasem fejezdik be.
A programozsi nyelvekben a kvetkez ciklusfajtkat klnbztetjk meg: feltteles, elrt
lpsszm, felsorolsos, vgtelen s sszetett ciklus.
Lssuk ezeket egyenknt.
4.5.1. Feltteles ciklus
Ennl a ciklusnl az ismtldst egy felttel igaz vagy hamis rtke szablyozza. A felttel
maga vagy a fejben vagy a vgben szerepel. Szemantikjuk alapjn beszlnk kezdfeltteles
s vgfeltteles ciklusrl.
Kezdfeltteles ciklus:
A felttel a fejben jelenik meg.
Mkdse:
Kirtkeldik a felttel. Ha igaz, vgrehajtdik a ciklusmag, majd jra kirtkeldik a felttel,
s a ciklusmag mindaddig jra s jra lefut, amg a felttel hamiss nem vlik. Teht, ha
egyszer belptnk a magba, akkor ott kell valamikor olyan utastsnak vgrehajtdnia, amely
megvltoztatja a felttel rtkt.
A kezdfeltteles ciklus lehet res ciklus, ha a felttel a legels esetben hamis. Lehet vgtelen
ciklus is, ha a felttel a legels esetben igaz s mindig igaz is marad.
64
Vgfeltteles ciklus:
A felttel ltalban a vgben van, de vannak nyelvek, amelyekben a fej tartalmazza azt.
Mkdse:
Elszr vgrehajtdik a mag, majd ezutn kirtkeldik a felttel. ltalban ha a felttel
hamis, jra vgrehajtdik a mag. Teht az ismtlds mindaddig tart, mg a felttel igazz
nem vlik. Vannak viszont olyan nyelvek, amelyek igazra ismtelnek. Nyilvn itt is a magban
kell gondoskodni a felttel rtknek megvltoztatsrl.
A vgfeltteles ciklus soha nem lehet res ciklus, a mag egyszer mindenflekppen lefut.
Vgtelen ciklus viszont lehet, ha a felttel rtke a msodik ismtls utn nem vltozik meg..
4.5.2. Elrt lpsszm ciklus
Ennl a ciklusfajtnl az ismtldsre vonatkoz informcik (az n. ciklusparamterek) a
fejben vannak. Minden esetben tartozik hozz egy vltoz, a ciklusvltoz. A vltoz ltal
felvett rtkekre fut le a ciklusmag. A vltoz az rtkeit egy tartomnybl veheti fl. Ezt a
tartomnyt a fejben adjuk meg kezd- s vgrtkvel. A ciklusvltoz a tartomnynak vagy
minden elemt flveheti (belertve a kezd- s vgrtket is), vagy csak a tartomnyban
szablyosan (ekvidisztnsan) elhelyezked bizonyos rtkeket. Ekkor meg kell adni a
tartomnyban a felvehet elemek tvolsgt meghatroz lpskzt. A vltoz az adott
tartomnyt befuthatja nvekvleg, illetve cskkenleg, ezt hatrozza meg az irny.
Az elrt lpsszm ciklussal kapcsolatban a nyelveknek a kvetkez krdseket kell
megvlaszolniuk:
1. Milyen tpus lehet a ciklusvltoz?
Minden nyelv megengedi az egsz tpust. Egyes nyelveknl sorszmozott tpus lehet. Van nhny nyelv, amelyik megengedi a valsat is. A kezdrtk, a vgrtk s a lpskz tpusa meg kell, hogy egyezzen a ciklusvltoz
tpusval, vagy arra konvertlhatnak kell lennie.
65
2. Milyen formban lehet megadni a kezdrtket, vgrtket s a lpskzt?
Minden nyelv esetn megengedett a literl, vltoz s nevestett konstans. Ksbbi nyelveknl kifejezssel is megadhat.
3. Hogyan hatrozdik meg az irny?
A lpskz eljele dnti el ha pozitv, akkor nvekv, ha negatv, akkor cskken. ltalban azok a nyelvek valljk ezt, melyekben a ciklusvltoz csak numerikus tpus
lehet.
Kln alapszt kell hasznlni. 4. Hnyszor rtkeldnek ki a ciklusparamterek?
ltalban egyszer, amikor a vezrls a ciklushoz r, s a ciklus mkdse alatt nem vltoznak.
Minden ciklusmag-vgrehajts eltt jra meghatrozdnak. 5. Hogyan fejezdhet be a ciklus?
Szablyos lefuts - a ciklusparamterek ltal meghatrozott mdon.
- a ciklus magjban kln utastssal.
GOTO-utastssal, ltalban nem tekintjk szablyos befejezsnek. 6. Mi lesz a ciklusvltoz rtke a ciklus lefutsa utn?
Ha GOTO-val ugrunk ki a ciklusbl, akkor a ciklusvltoz rtke az utoljra felvett rtk lesz.
Szablyos befejezs esetn a hivatkozsi nyelvek egy rsze nem nyilatkozik errl a krdsrl, msik rsze azt mondja, hogy a ciklusvltoz rtke hatrozatlan.
Az implementcik viszont a kvetkezket mondjk: - A ciklusvltoz rtke az az rtk, amelyre utoljra futott le a ciklus.
- A ciklusvltoz rtke az az rtk, amire mr ppen nem futott le a ciklus.
- A ciklusvltoz rtke hatrozatlan.
66
Mkdst tekintve az elrt lpsszm ciklus lehet elltesztel, vagy htultesztel. A
hivatkozsi nyelveknek csak egy rsze definilja ezt, ezrt a mkds gyakran
implementcifgg. Az implementcik tbbsge inkbb az elltesztel vltozatot valstja
meg.
Mkds elltesztel esetben:
A mkds kezdetn meghatrozdnak a ciklusparamterek. Ezutn a futtat rendszer
megvizsglja, hogy a megadott irnynak megfelelen a megadott tartomny nem res-e. Ha
res (pl. a [10..1] tartomny nvekvleg), akkor ez egy res ciklus. Klnben a ciklusvltoz
felveszi a kezdrtket, s a mag lefut. Majd a futtat rendszer megvizsglja, hogy az adott
tartomnyban, az adott irnyban, az adott lpskznek megfelelen, a ciklusvltoz
pillanatnyi rtkhez kpest van-e mg olyan rtk, amit a ciklusvltoz felvehet. Ha van,
akkor felveszi a kvetkez ilyen rtket, s jra lefut a mag, ha nincs ilyen rtk, akkor
befejezdik a ciklus (szablyos befejezs).
Mkds htultesztel esetben:
A mkds kezdetn meghatrozdnak a ciklusparamterek. Ezutn a ciklusvltoz felveszi a
kezdrtket, s a mag lefut. Majd a futtat rendszer megvizsglja, hogy az adott
tartomnyban, az adott irnyban, az adott lpskznek megfelelen, a ciklusvltoz
pillanatnyi rtkhez kpest van-e mg olyan rtk, amit a ciklusvltoz felvehet. Ha van,
akkor felveszi a kvetkez ilyen rtket, s jra lefut a mag, ha nincs ilyen rtk, akkor
befejezdik a ciklus.
ltalban az eljrsorientlt nyelvek megengedik, hogy a ciklusvltoznak rtket adjunk a
magban.
Az elltesztel elrt lpsszm ciklus lehet res ciklus, a htultesztel viszont nem. Egyes
nyelvekben mindkt fajta lehet viszont vgtelen ciklus (mirt?).
67
4.5.3. Felsorolsos ciklus
A felsorolsos ciklus az elrt lpsszm ciklus egyfajta ltalnostsnak tekinthet. Van
ciklusvltozja, amely explicit mdon megadott rtkeket vesz fel s minden felvett rtk
mellett lefut a mag. A ciklusvltozt s az rtkeket a fejben adjuk meg, ez utbbiakat
kifejezssel. A ciklusvltoz tpusa ltalban tetszleges. Nem lehet sem res, sem vgtelen
ciklus.
4.5.4. Vgtelen ciklus
A vgtelen ciklus az a ciklusfajta, ahol sem a fejben, sem a vgben nincs informci az
ismtldsre vonatkozan. Mkdst tekintve definci szerint vgtelen ciklus, res ciklus
nem lehet. Hasznlatnl a magban kell olyan utastst alkalmaz