142
Juhász István PROGRAMOZÁS 1 mobiDIÁK könyvtár

prog1_jegyzet.pdf

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