140
  Pásztor Attila Algoritmizálás és programozás az emeltszintű érettségin ISBN 978-963-08-7902 -6 Budapest 2007

Algoritmusok Pásztor Attila

  • Upload
    koati

  • View
    29

  • Download
    0

Embed Size (px)

DESCRIPTION

Az elmúlt 10 év tanítási gyakorlata késztetett arra, hogy készítsek egy algoritmizá-lás-programozás kézikönyvet a középiskolásoknak. A 12 évfolyamos iskolák NAT-ra épü-lő kerettantervében ajánlott minimális óraszámok mellett erre a témakörre (sem) jut ele-gendő idő. A középiskola első osztályába bekapcsolódó diákok előzetes ismeretei erősenkülönbözőek, de tapasztalataim szerint abban megegyeznek, hogy az általános iskoláktöbbségében (tisztelet a kivételnek) nem tanulnak algoritmizálni, programozni – a szűkösóraszámok miatt.

Citation preview

  • Psztor Attila

    Algoritmizls s programozs az emeltszint rettsgin

    ISBN 978-963-08-7902-6

    Budapest

    2007

  • C

    Tartalomjegyzk TARTALOMJEGYZK ................................................................................................................................ CELSZ ........................................................................................................................................................... I1. ALAPFOGALMAK ..................................................................................................................................... 1

    1.1. PROGRAM ................................................................................................................................................ 11.2. A PROGRAM KSZTSNEK LPSEI ........................................................................................................ 11.3. SPECIFIKCI (A FELADAT SPECIFIKCIJA) ........................................................................................... 11.4. SPECIFIKCI MEGADSA SZVEGESEN .................................................................................................. 11.5. SSZEFOGLALS ..................................................................................................................................... 21.6. GYAKORL FELADATOK .......................................................................................................................... 2

    2. ALGORITMIZLS (TERVEZS) ......................................................................................................... 32.1. ALGORITMUSOK LERSA ........................................................................................................................ 3

    2.1.1. Algoritmusok szveges lersa ........................................................................................................ 3A programok alapelemei szvegesen .................................................................................................................... 4

    Egymsutnisg (szekvencia) .......................................................................................................................... 4Elgazs (szelekci) tbbfle lehet: ................................................................................................................. 4Ismtls (iterci) ............................................................................................................................................ 4

    Elltesztel ciklus: ..................................................................................................................................... 4Htultesztel ciklus: ................................................................................................................................... 5Szmll ciklus: ......................................................................................................................................... 5

    Krdsek, feladatok .............................................................................................................................................. 52.1.2. Algoritmusok lersa mondatszer elemekkel ................................................................................. 5

    A legfontosabb alapelemek: .................................................................................................................................. 5A program ....................................................................................................................................................... 5rtkads ......................................................................................................................................................... 6Adatbevitel ...................................................................................................................................................... 6Adatkivitel ....................................................................................................................................................... 7Megjegyzs ...................................................................................................................................................... 7Szekvencia ....................................................................................................................................................... 7Elgazs ........................................................................................................................................................... 7

    Feltteles utasts ....................................................................................................................................... 7Ktg elgazs .......................................................................................................................................... 8Sokg elgazs ......................................................................................................................................... 8

    Ismtl szerkezetek (ciklusok) ...................................................................................................................... 10Elltesztel ciklus: ................................................................................................................................... 10Htultesztel ciklus: ................................................................................................................................. 10Szmll ciklus: ....................................................................................................................................... 11

    Eljrsok, fggvnyek, opertorok ................................................................................................................ 12Krdsek, feladatok ............................................................................................................................................ 18

    2.1.3 Algoritmusok rajzos brzolsa .................................................................................................... 19Folyamatbra ...................................................................................................................................................... 19Krdsek, feladatok ............................................................................................................................................ 22Struktogram ........................................................................................................................................................ 23Krdsek, feladatok ............................................................................................................................................ 24

    2.2 SSZEFOGLALS .................................................................................................................................... 253. ADATTPUSOK ........................................................................................................................................ 26

    3.1. AZ ADATOK LEGFONTOSABB JELLEMZI: .............................................................................................. 263.2. ELEMI ADATTPUSOK ............................................................................................................................. 273.3. SSZETETT ADATTPUSOK ..................................................................................................................... 283.4. A SPECIFIKCI PONTOSTSA .............................................................................................................. 293.5. SSZEFOGLALS ................................................................................................................................... 303.6. KRDSEK, FELADATOK ........................................................................................................................ 30

    4. KDOLS .................................................................................................................................................. 314.1. A PASCAL PROGRAMOZSI NYELV ......................................................................................................... 324.2. TRSI SZABLYOK ............................................................................................................................. 33

    4.2.1. A program ..................................................................................................................................... 334.2.2. Deklarcik .................................................................................................................................. 33

  • D

    4.2.3. Elemi adattpusok ......................................................................................................................... 344.2.4. sszetett adattpusok .................................................................................................................... 354.2.5. Megjegyzsek ................................................................................................................................ 364.2.6. Elgazsok .................................................................................................................................... 374.2.7. Itercik (ciklusok) ....................................................................................................................... 384.2.8. Eljrsok, fggvnyek ................................................................................................................... 394.2.9. Beolvass s kivitel ....................................................................................................................... 40

    4.3. ARITMETIKAI MVELETEK ..................................................................................................................... 414.4. RELCIS MVELETEK .......................................................................................................................... 414.5. LOGIKAI MVELETEK ............................................................................................................................ 414.6. PRECEDENCIK...................................................................................................................................... 424.7. NUMERIKUS FGGVNYEK .................................................................................................................... 424.8. SORSZMOZOTT TPUS ELJRSAI, FGGVNYEI ................................................................................... 434.9. SZVEGKEZEL FGGVNYEK .............................................................................................................. 434.10. SSZEFOGLALS ................................................................................................................................. 444.11. GYAKORL FELADATOK ...................................................................................................................... 44

    5. A TURBO PASCAL / FREE PASCAL KRNYEZET .......................................................................... 455.1. AZ ELS PASCAL PROGRAM ................................................................................................................... 455.2. EGYSZER PROGRAMOK ........................................................................................................................ 46

    5.2.1. feladat: Eljel szveges kirsa .................................................................................................... 465.2.2. feladat: Szmok kirsa 0-tl a megadott hatrig ......................................................................... 485.2.3. feladat: Benne van-e a szvegben a megadott karakter ................................................................ 495.2.4. feladat: Beolvasott szmok legnagyobbika ................................................................................... 505.2.5. feladat: tlagszmts ................................................................................................................... 545.2.6. feladat: Szmkitall program ..................................................................................................... 55

    5.3. SSZEFOGLALS ................................................................................................................................... 575.4. FELADATOK ........................................................................................................................................... 58

    6. ELEMI ALGORITMUSOK I ................................................................................................................... 596.1. KERETPROGRAM .................................................................................................................................... 596.2. SOROZATSZMTS ............................................................................................................................... 616.3. ELDNTS ............................................................................................................................................. 626.4. KIVLASZTS ........................................................................................................................................ 646.5. (LINERIS) KERESS .............................................................................................................................. 656.6. MEGSZMOLS ..................................................................................................................................... 666.7. MAXIMUMKIVLASZTS ....................................................................................................................... 676.8. SSZEFOGLALS ................................................................................................................................... 686.9. GYAKORL FELADATOK ........................................................................................................................ 68

    7. FJLKEZELS ......................................................................................................................................... 697.1. ADATOK BEOLVASSA SZEKVENCILIS SZVEGFJLBL ...................................................................... 697.2. ADATOK RSA SZVEGFJLBA ............................................................................................................. 737.3. SSZEFOGLALS ................................................................................................................................... 747.4. GYAKORL FELADATOK ........................................................................................................................ 74

    8. ELEMI ALGORITMUSOK II .................................................................................................................. 758.1. MSOLS .............................................................................................................................................. 758.2. KIVLOGATS ....................................................................................................................................... 768.3. SZTVLOGATS ................................................................................................................................... 788.4. METSZET (KZS RSZ) ......................................................................................................................... 808.5. UNI (EGYESTS) ................................................................................................................................. 818.6. SSZEFUTTATS .................................................................................................................................... 828.7. RENDEZS ............................................................................................................................................. 85

    8.7.1. Egyszer csers rendezs .............................................................................................................. 868.7.2. Minimumkivlasztsos rendezs ................................................................................................... 878.7.3. Buborkos rendezs ...................................................................................................................... 888.7.4. Javtott buborkos rendezs .......................................................................................................... 898.7.5. Beillesztses rendezs ................................................................................................................... 908.7.6. Javtott beillesztses rendezs ....................................................................................................... 91

  • E

    8.7.7. Egyb rendezsek .......................................................................................................................... 928.8. KERESSEK ........................................................................................................................................... 93

    8.8.1. Keress rendezett sorozatban ....................................................................................................... 938.8.2. Logaritmikus keress .................................................................................................................... 958.8.3. Visszalpses keress .................................................................................................................... 96

    8.9. SSZEFOGLALS ................................................................................................................................... 988.10. GYAKORL FELADATOK ...................................................................................................................... 98

    9. SSZETETT FELADATOK .................................................................................................................... 999.1. ELEMI ALGORITMUSOK SSZEPTSE ................................................................................................... 999.2. SSZEFOGLALS ................................................................................................................................. 1069.3. GYAKORL FELADATOK ...................................................................................................................... 106

    10. REKURZI ............................................................................................................................................ 10710.1. A FAKTORILIS FGGVNY ............................................................................................................... 10710.2. FIBONACCI-SZMOK .......................................................................................................................... 10810.3. EGY ELEMI ALGORITMUS REKURZVAN ............................................................................................. 10910.4. GYORSRENDEZS (QUICKSORT) ........................................................................................................ 11010.5. KZVETETT REKURZI ...................................................................................................................... 11010.6. SSZEFOGLALS ............................................................................................................................... 11110.7. GYAKORL FELADATOK .................................................................................................................... 111

    11. RETTSGI FELADATOK................................................................................................................. 11211.1. LOTTO (2005. V.) .............................................................................................................................. 11211.2. A VIGENRE TBLA (2005. X.) .......................................................................................................... 11611.3. FEHRJE (2006. V.) ........................................................................................................................... 122

    12. ELZETES ............................................................................................................................................ 13013. IRODALOMJEGYZK ........................................................................................................................ 131

  • I

    Elsz Az elmlt 10 v tantsi gyakorlata ksztetett arra, hogy ksztsek egy algoritmiz-ls-programozs kziknyvet a kzpiskolsoknak. A 12 vfolyamos iskolk NAT-ra p-l kerettantervben ajnlott minimlis raszmok mellett erre a tmakrre (sem) jut ele-gend id. A kzpiskola els osztlyba bekapcsold dikok elzetes ismeretei ersen klnbzek, de tapasztalataim szerint abban megegyeznek, hogy az ltalnos iskolk tbbsgben (tisztelet a kivtelnek) nem tanulnak algoritmizlni, programozni a szks raszmok miatt. Az informatika irnt rdekld, esetleg az emeltszint rettsgit vlaszt dikok felksztshez szksgesnek reztem egy sszefoglal, csak erre a tmakrre koncentrl tanknyvet. Bizonyra hasznt vehetik a programozs irnt rdekld, ksbb versenyeken indulni szndkoz kzpiskolsok is nekik ez az els lpcsfok csupn. vek ta prbltam megtallni ennek a tmakrnek a kereteit: prbltam csak prog-ramozst tantani (BASIC, PASCAL, C nyelven), prbltam csak algoritmizlst tantani (folyamatbrval, struktogrammal, mondatszer lerssal). Az els mdszer esetn szlet-tek ugyan mkd programok, de csak esetleges volt, hogy azt valstjk-e meg ezek a programok, ami a kitztt feladat volt, s remnytelennek ltszott az algoritmikus hibk megtallsa, kijavtsa. A msodik mdszer alkalmazsakor azt tapasztaltam, hogy a tanu-lk tl szraznak tartottk a papr s ceruza alap szmtstechnikt. Ebben a kziknyvben az els hrom elmleti rszt kveten szeretnm a lehet-sges mrtkben prhuzamosan tantani az algoritmusok ksztst, az adatszerkezetek hasznlatt s a programozs gyakorlatt. gy prblom az elmleti rszeket kzvetlenl a gyakorlatba tltetni. Br minden fejezethez tartoznak pldk, gyakorlatok, fontosnak tartom, hogy ehhez a knyvhz a kzeljvben ksztsek egy feladatgyjtemnyt is. Elkpzelsem szerint a feladatgyjtemny 3 fzetbl llna: az els fzetben csak a feladatok lennnek meg, a m-sodik fzet tleteket adna a megoldshoz, s a harmadik fzet tartalmazn a teljes megol-dst (lehetleg tbb alternatvval). gy tapasztalom, hogyha a megolds benne van a di-kok ltal hasznlt feladatgyjtemnyben, akkor tekintlyes rszk a feladat elolvassa utn vagy ahelyett mindjrt a megoldst olvassa el, gy rtelmetlenn tve a hzi feladatot, az nll gyakorlst. ppen ebbl a pedaggiai megfontolsbl nincs benne a tanknyvben az nll gyakorlshoz sznt feladatok megoldsa. A kziknyv brirl ltszani fog, hogy minden programot elksztettem, teht mel-lkletknt csatolhattam volna, m ezt is pedaggiai okokbl nem tettem: szerintem fontos, hogy az emeltszint rettsgire kszlve mindenki maga szerezzen kdolsi gyakorlatot, hiszen az rettsgin a rfordtott id is szmt. Sokan azt gondoljk, hogy a megrts azo-nos a tudssal, pedig ez nem gy van. Bzom benne, hogy tantvnyaim haszonnal forgatjk majd ezt a knyvet. Minden szrev-telt rmmel vrok a [email protected] cmre. Budapest, 2007. janur 7.

    A szerz

  • 1. Alapfogalmak 1.1. Program

    1

    1. Alapfogalmak Ebben a fejezetben a programozs alapfogalmait tekintjk t.

    1.1. Program Lnyegben a szmtgp ltal vgrehajthat algoritmus, pontosabban: adatszerkezet s algoritmus.

    1.2. A program ksztsnek lpsei Amikor programot ksztnk, akkor a program elksztse az albbi rszfeladatokbl ll: 1. Specifikci = feladat meghatrozsa, mit kell megoldani? 2. Tervezs = hogyan kell a feladatot megoldani? 3. Kdols = szmtgpes megvalsts, melynek eredmnye a program. 4. Tesztels = a program helyes mkdsnek vizsglata. 5. Hibakeress, javts (ha szksges, akkor vltoztats a 2.,3. pontnl). 6. Hatkonysg = minsg vizsglat: gyorsabb, kevesebb erforrst hasznlv alakts. 7. Dokumentls = Fejleszti s felhasznli dokumentci kszts. A dokumentls kt elemt rdemes lenne mg rszekre bontani, de ez a tanknyv elssor-ban az els hrom ponttal foglalkozik, tekintsk t, hogy mit is jelentenek ezek!

    1.3. Specifikci (a feladat specifikcija) A specifikci (meghatrozs) a kvetkez sszetevkbl ll: 1. A feladat szvege. 2. A bemen adatok elnevezse (hogyan hivatkozunk majd r), rtkhalmaza (milyen

    rtkeket vehet fel). 3. A kimen adatok elnevezse (amit eredmnyknt vrunk), rtkhalmaza. 4. A bemen adatokra vonatkoz elfelttel (milyen megszortsnak kell megfelelnie). 5. A kimen adatokra vonatkoz utfelttel. Itt fogalmazzuk meg, hogy a bemen ada-

    tokbl hogyan keletkeznek a kimen adatok. 6. Fogalmak defincija (az elz pontokban hasznlat fogalmak meghatrozsa). A specifikci minden pontjt matematikai eszkzrendszerrel illik megadni, de ebben a knyvben az egyszersg kedvrt szvegesen fogom megadni.

    1.4. Specifikci megadsa szvegesen Az elbbiekben mr emltettem, hogy a feladat specifiklsa matematikai eszkztrral tr-tnik, de a kzpiskols szint programozshoz elegendnek tartom a szveges specifik-

  • 1.5. sszefoglals 1. Alapfogalmak

    2

    lst, viszont azt nagyon fontosnak tartom. Az elkszlt program ugyanis akkor j, ha telje-sti a specifikcit, azzal kell egybevetni. Nzznk egy egyszer feladatot: Szmold ki a hromszg terlett, ha adott az egyik olda-la s a hozz tartoz magassga! A szveges specifikci:

    A feladat: Szmold ki a hromszg terlett, ha adott az egyik oldala s a hozz tarto-z magassga!

    Bemenet: a (oldalhossz, vals szm), m (magassg, vals szm) Kimenet: t (terlet, vals szm) Elfelttel: a s m pozitv (ez kvetkezik abbl, hogy valdi skidom) Utfelttel: t=a*m/2

    Lthat, hogy az utfelttel fogalmazza meg, hogy hogyan kell elkszteni a bemeneti ada-tokbl a kimeneti adatokat. Ebben a feladatban nem kellett fogalom definci. rdemes lesz majd megnzni, hogy a tervezs (algoritmus kszts) eredmnye hogyan teljesti a specifikcit: megengedett, hogy az elkszlt program specifikcija az elfelt-tel szempontjbl megengedbb, az utfelttelt tekintve szigorbb legyen.

    1.5. sszefoglals Ebben a fejezetben megismerkedtnk a program fogalmval s a programkszts lpsei-vel. A programkszts els lpsvel a specifiklssal foglalkoztunk, pontosabban a feladat specifiklssal. Br a programozk elssorban formlis specifikcit hasznlnak, mely a specifikci sszetevinek matematikai nyelven trtn megfogalmazsa, mi a szveges specifiklssal megelgedtnk.

    1.6. Gyakorl feladatok

    Ksztsd el az iskolban tallhat dtital automata mkdsnek szveges speci-fiklst (ne trekedj a tlzott rszletessgre)!

    Ksztsd el a palacsinta sts szveges specifikcijt! Ksztsd el a msodfok egyenlet megold kpletnek szveges specifikcijt!

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    3

    2. Algoritmizls (tervezs) Az algoritmus egy feladat vges szm lpsre bontott megoldsa. A lpsek elemi mve-letek (vges sok van bellk), melyek utastsok formjban rhatk le, teht tallhat hoz-z olyan gp, ami vgrehajtja. Az algoritmus lpsei elemi tevkenysgek (a vgrehajt rti, vagy meg kell tantani r ez jabb algoritmus). Az algoritmusok legfontosabb jellemzje:

    1. Egyrtelm: ugyanazon bemen adatok esetk mindig ugyanazt a vlaszt adja. 2. Vges szm lpsbl ll: lersuk vges hosszsg szveggel lehetsges. Term-

    szetesen ez nem jelenti azt, hogy a futsa is vges idej, br erre treksznk. 3. ltalnos: a bemen adatokra megfogalmazott feltteleknek eleget tev rtkekre

    eredmnyt ad.

    2.1. Algoritmusok lersa Az algoritmusokat szveges, vagy rajzos eszkzkkel adhatjuk meg. A teljessg ignye nlkl vegynk sorra nhnyat!

    2.1.1. Algoritmusok szveges lersa Az algoritmusok szveges lerst minden dik hasznlta mr. Vlasszunk egy egyszer matematika feladatot: Szmold ki a hromszg terlett, ha adott az egyik oldala s a hoz-z tartoz magassg! Jelljk az oldalt a-val, a magassgot m-mel, a terletet t-vel. Ekkor a feladat megoldsa az albbi kplet alkalmazst (kiszmtst) jelenti: t=a*m/2 A kiszmts menete (algoritmusa) szvegesen:

    1. Szksgnk van a s m rtkre (ezek az gynevezett bemen adatok), megkrdez-zk azokat.

    2. A t rtke legyen az a*m/2 mveletsor eredmnye. 3. Kzljk az eredmnyt (ezt nevezzk kimenetnek).

    Kszts algoritmust a kvetkez szmkitall jtkra! Gondolj egy egsz szmot 0 s 100 kztt, s jelld ezt g-vel. Aki ki akarja tallni a szmot, a kvetkez mdszer szerint jr el: A jtkos mond egy szmot (jelljk ezt x-szel), te pedig megmondod, hogy a gondolt szm ennl nagyobb, vagy kisebb. Ezt mindaddig ismtlitek, amg a krdez kitallja a gondolt szmot! A fenti jtk algoritmusa szvegesen az albbi:

    1. Gondolj egy szmot (ezt nevezem g-nek)! 2. Krdezd meg trsad tippjt! 3. Az ltala mondott szm legyen x. 4. Hasonltsd ssze a kt szmot! 5. Ha g>x, akkor mondd: A gondolt szm nagyobb. 6. Ha g

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    4

    Ez az algoritmus mr szinte minden lnyeges algoritmus alapelemet tartalmaz. Tanulm-nyaink sorn strukturlt programokat szeretnnk rni. Strukturlt programnak nevezzk azt a programot, mely csak az albbi strukturlt algoritmikus szerkezeteket tartalmazza:

    szekvencia, elgazs, ciklus.

    A strukturlt programok elnyeinek, illetve a nem strukturlt programok htrnyainak is-mertetse tlmutat eme knyv keretein, elgedjnk meg azzal, hogy a j programok k-sztse rdekben mi mindig strukturltat fogunk kszteni.

    A programok alapelemei szvegesen Most ismertetem, hogy az algoritmusok szveges lersa sorn milyen elemeket szeretnk felhasznlni.

    Egymsutnisg (szekvencia) Az utastsok egyms utni vgrehajtsa.

    Elgazs (szelekci) tbbfle lehet: Egy mveletsort csak egy felttel teljeslsekor kell vgrehajtani (ilyen van a pl-

    dban). Szoktk ezt feltteles utastsnak is nevezni. Kt mveletsor kzl az egyiket akkor kell vgrehajtani amikor a felttel igaz, mg

    a msikat akkor, ha a felttel hamis. Pldul: Ha st a Nap strandra megynk, ha nem, akkor moziba. Ezt nevezzk ktg elgazsnak, esetleg rviden elgazs-nak. Az elz tpus is felfoghat gy, hogy hamis felttel esetn nem tartalmaz utastst az elgazs (pontosabban res utastst tartalmaz).

    Kettnl tbb mveletsor kzl kell vlasztani, ltalban egy kifejezs kirtkelse alapjn. Pldul: Ha a Balaton vzmlysge kisebb, mint 1 mter, akkor pancsolunk benne, ha a vzmlysg 1 s 2 m kztti, akkor szunk, ha mlyebb, mint kt mter, akkor nem megynk be. Ezt nevezik tbbg, vagy sokg elgazsnak. Gyakran az ilyen tbbg elgazsnak van egybknt rsze, mely akkor hajtdik vgre, ha egyik felttel sem igaz. Megllapods krdse, hogy a tbbg elgazs vgrehajt-sa sorn igaz felttelt tallva tovbb folytatjuk-e a felttelek kirtkelst, vagy nem.

    Ismtls (iterci) Egy felttel fennllsig, vagy megadott szmszor ismteljk a felsorolt utastsokat, ami-ket ciklusmagnak neveznk. A ciklusmag nem ms, mint a tbbszr vgrehajtand utas-tsok sorozata. Az ismtlsnek hrom tpust klnbztetjk meg:

    Elltesztel ciklus: A felttel vizsglata a ciklusmag eltt tallhat, a ciklusmag csak akkor hajtdik vgre, ha a felttel igaz. Pldul: Amg van pnzed, vsrolj! Ha nincs pnzed, akkor egyszer sem vsrolsz (praktikus megolds).

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    5

    Htultesztel ciklus: A felttel vizsglata a ciklusmag utn tallhat, ezrt a ciklusmag egyszer biztosan vgre-hajtdik. Pldul: Ismteld a tapsolst, amg nem fj a kezed! Pontosabban: Tapsolj, s ismteld amg nem fj a kezed! (Egyszer mindenkppen tapsolsz.)

    Szmll ciklus: A ciklusmag vgrehajtsa elre ismert mennyisgben. Pldul: Ismteld 5-szr: Vgj egy szelet kenyeret! Msik plda: Ismteld 1-tl 5 darab-ig: Sss ki egy palacsintt! (Elszr a darab=1, ki-stsz 1 palacsintt, a darabszm 2 lesz, kistsz mg 1 palacsintt). Az ismtlsszm megadsnl olyan mennyisget hasznlhatsz, amelyiknl a kvetkez fogalma rtelme-zett. Lehet teht egsz szm pldul, de nem lehet vals szm. Lthattuk, hogy a mondatokkal trtn lers kellemesen hasznlhat, de htrnya, hogy hosszadalmas, ersen nyelvfgg s nem mindig egyrtelm.

    Krdsek, feladatok

    Mirt j a szveges algoritmus lers? Mi a htrnya az algoritmusok szveges lersnak? Milyen alapelemeket hasznlunk az algoritmusokban? Ksztsd el az iskolban tallhat dtital automata mkdsnek szveges algo-

    ritmust (ne trekedj a tlzott rszletessgre)! Ksztsd el a palacsinta sts szveges algoritmust! Ksztsd el a msodfok egyenlet megold kpletnek szveges algoritmust!

    2.1.2. Algoritmusok lersa mondatszer elemekkel A mdszer lnyege, hogy az algoritmusokban hasznlatos alapelemekre szabvnyos sz-vegelemeket vezetnk be. A mondatszer lers alapszerkezetei megegyeznek a strukturlt programok alapszerkezeteivel, kiegsztve nhny knyelmi elemmel. Mr itt rdemes megemlteni kt fogalmat, melyek elssorban a programozsi nyelvekhez ktdnek, de mr az algoritmus lersnl is rtelmezhetk: A szintaxis a formai szablyok gyjtemnye (hogyan kell lerni). A szemantika a tartalmi helyessget ler szablyok sszessge (mi a jelentse, mit kell rtnk alatta).

    A legfontosabb alapelemek:

    A program A legfontosabb egysge, a program az albbi felpts: Program: utastsok Program vge.

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    6

    Megjegyzsek: Program utn esetleg megadhat programnv is a ksbbi felidzst elsegtend. Mi is az a vltoz, s az azonost? Amikor matematika rn a feladatok ltalnos megoldst keressk, akkor konkrt rtkek helyett egy rvid elnevezst hasznlunk (tbbnyire egy, vagy nhny betbl llt), ami emlkeztet a jelentsre. Pldul a kr kerletkplete:

    K=2*r*PI Az algoritmusokban a vltozk a megadott tpus rtkek (adatok) trolsra hasznlt memriatartomnyok elnevezsei. A vltoz betkbl, szmokbl s nhny rsjelbl ll elnevezse az azonost. Ezen azonostk segtsgvel lehet lekrdezni s mdostni a vl-tozk rtkt. Kznapi nyelven fogalmazva: az adatokat olyan fikos szekrnyben troljuk, ahol a fikok tartalmra nvvel lehet hivatkozni. Termszetesen az algoritmus ms elemi-hez is lehet azonostt rendelni (program, programegysg,). Vegyk szre, hogy a vltozk rtke az algoritmus sorn megvltozhat (valban, a nev-ben is benne van). llandnak (konstansnak) hvjuk azt az rtket, amit az algoritmusban felhasznlhatunk, de nem vltoztathatjuk meg. A kr kerlett meghatroz kpletben ilyen a PI.

    rtkads Azonost := kifejezs

    Kifejezs: Minden, ami kiszmthat, lehet akr konkrt rtk is. A vltoz neve (azonostja) jelentheti a vltoz rtkt, s annak helyt (cmt) is.Vegyk pldul az x:=x+1 rtkad utastst! A fenti kifejezs jobb oldaln x rtkhez hozzadunk egyet (teht x, az x vltoz rtkt jelenti, majd az eredmnyt eltroljuk x vltozban (teht x az x vltoz helyt, azaz cmt jelenti). Plda: a := x+y-3

    Az a := x+y-3 rtkad utasts azt jelenti, hogy kiszmoljuk az x+y-3 kifejezs rtkt, s ez az rtk kerl az a vltozba. A kettspont nlkli egyenlsgjel az algoritmus lersnl nem jelent rtkadst, csak sz-szehasonltst. Az a=x+y-3 utasts eredmnye egy logikai rtk lesz (igaz, vagy hamis), annak fggvnyben, hogy az a,x,y vltozk pillanatnyi rtkt behelyettestve a kifejezs-be az egyenlsg fennll-e, vagy sem. Adatbevitel Be: azonostk [felttelek]

    Az azonostkat vesszvel vlasztjuk el, pldul: Be: a,b A felttelek tartalmazzk az elfelttel elemeit.

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    7

    Adatkivitel Ki: kifejezsek [formtum megktsek]

    A kifejezseket vesszvel vlasztjuk el egymstl. Egy kifejezs lehet konkrt rtk (sz-veg is), vltoz, kirtkelhet kifejezs. Szveget idzjelek kztt adhatunk meg, a kirand adatokat vesszvel vlasztjuk el, pl-dul: Ki: Eredmny, x Idzjelek helyett hasznlhatunk aposztrfokat is. Pldul: Ki: Eredmny:,x A formtum megktsek tartalmazzk a megjelensre vonatkoz elrsokat.

    Megjegyzs [megjegyzsek]

    Az algoritmusban elhelyezhetk magyarz szvegek. A megjegyzseket szgletes zrje-lek kz fogjuk rni: [ez itt egy megjegyzs]

    Szekvencia Egyms utn vgrehajtand utastsok. Az utastsokat kln sorban adjuk meg, ha egy sorban tbb utasts szerepel, akkor kettsponttal vlasztjuk el ket. Pldul: Utasts1 Utasts2 . . UtastsN

    Vagy: Utasts1 : Utasts2 : UtastsN

    Elgazs

    Feltteles utasts Ha felttel akkor utastsok igaz esetn Elgazs vge

    Az elz feltteles utasts rvidebben: Ha felttel akkor utastsok igaz esetn

    Plda: Ha i>0 akkor Ki: 2*i

    Jelentse: Ha i pozitv, akkor kirja a ktszerest.

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    8

    A felttel nem ms, mint egy logikai kifejezs (tetszleges matematikai relci, logikai rtket ad kifejezs, logikai mvelet), melynek rtke igaz, vagy hamis lehet. Pldul: Relci: Algoritmus le-

    rsban hasznl-hat ms jells

    Jelents:

    ,= Kisebb, nagyobb, egyenl , , , = Nem egyenl, kisebb v. egyenl, nagyobb v. egyenl , , , Eleme, nem eleme, rsze, valdi rsze Mveletek: , , s, vagy, nem Logikai s, megenged vagy, tagads

    Plda: Ha i>0 s i=0 akkor Ki: i klnben Ki: -i Elgazs vge

    Jelentse: Ha i nem negatv, akkor nmagt rja ki, ha i negatv, akkor az ellentettjt (ez i abszolt rtke). Vegyk szre, hogy itt mr a tagolt (oszlopszer) rsnak is jelentsge van: segti az r-telmezst. Mindig alkalmazzunk oszlopszer rsmdot az elgazsoknl s ksbb trgya-land ismtlses szerkezeteknl! Brmelyik gban lehet res utasts (br akkor clszer az egyszer feltteles utastst al-kalmazni) Az elgazs vge elhagyhat, ha az rs trdelse megfelel (az akkor s a klnben gat bentebb kezdtk).

    Sokg elgazs Elkpzelhet, hogy az elgazs gain jabb elgazsok keletkeznek, a leggyakrabban a klnben gon kell jabb elgazst kezdeni: Nzznk egy ilyen esetet:

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    9

    Ha felttel_1 akkor utastsok_1 klnben ha felttel_2 akkor utastsok_2 klnben utastsok_3 Elgazs vge

    Plda: Ha i0 esetn Ki: Pozitv i=0 esetn Ki: Nulla. egyb esetn Ki: Negatv. Elgazs vge

    Az elgazs vgt mg oszlopos rsmd mellett sem szoks elhagyni.

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    10

    Ismtl szerkezetek (ciklusok)

    Elltesztel ciklus: Ciklus amg ciklusfelttel ciklusmag utastsai Ciklus vge

    A ciklusfelttel brmilyen logikai kifejezs lehet (amely rendelkezik logikai rtkkel), te-ht eldnthet, hogy igaz-e vagy hamis. A ciklusmag utastsai mindaddig ismtldnek, amg a ciklusfelttel igaz. Figyeljnk arra, hogy a ciklusmag utastsai kztt lennie kell olyannak, amely hatssal van a ciklusfelttelre, klnben soha nem lpne ki a ciklusbl, vagy soha sem hajtan vgre a ciklusmagot. Plda: a:=1 Ciklus amg a

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    11

    ra lltjuk, akkor az ell tesztel ciklus magja nem fut le, mg a htul tesztel ciklus magja egyszer lefut.

    Szmll ciklus: Ciklus ciklusvltoz:=kezdrtk1-tl vgrtk-ig lpskz-vel ciklusmag utastsai Ciklus vge

    A ciklusvltz rtke a kezdrtk lesz. Ha ez nem nagyobb, mint a vgrtk, akkor vg-rehajtdik a ciklusmag. A ciklusvltoz rtknek nvelse automatikusan megtrtnik a ciklusmag utastsai utn, s az j megnvelt rtket vizsglja meg, hogy kell-e mg ism-telni. Amennyiben a lpskz rtke nincs megadva, akkor a nvekeds mrtke 1 lesz, egybknt lpskz-nyit n. Amikor a ciklusvltoz nagyobb lesz a vgrtknl, akkor az algoritmus a ciklus vge utni utastssal folytatdik. Plda: Ciklus i:=1-tl 10-ig Ki: i, i*i Ciklus vge

    Jelentse: Kirja az 1 s 10 kztti egsz szmokat s ngyzetket. Plda 1-tl eltr lpskzre: Ciklus i:=1-tl 10-ig 2-esvel Ki: i, i*i Ciklus vge

    Jelentse: Kirja az 1 s tz kztti pratlan szmokat s ngyzetket (a ciklusvltoz rend-re: 1,3,5,7,9 lesz, majd 11, amikor a ciklusmag mr nem hajtdik vgre). A ciklusvltoz kezdrtke lehet nagyobb a vgrtknl, ilyenkor a ciklusmag lefutsa utn a ciklusvltoz cskkenni fog 1-gyel (vagy a megadott rtkkel), s az ismtlds addig tart, amg a ciklusvltoz kisebb nem lesz a vgrtknl: Ciklus i:=10-tl 1-ig -3-asvel Ki: i, i*i Ciklus vge

    Jelentse: Kirja a 10 s 1 kztti szmokat s ngyzetket hrmasval haladva (a ciklus-vltoz rendre: 10,7,4,1, lesz, majd -2, amikor a ciklusmag mr nem hajtdik vgre). A szmlls ciklusnl a ciklusvltoz egsz szm volt a pldkban. A vltozk tpusval majd a ksbbiekben foglalkozunk, de fontos mr itt megemlteni, hogy szmlls ciklus ciklusvltozja olyan tpus lehet, ahol rtelmezett a kvetkez, elz fogalma. Ezrt

    1 A tradcionlis mondatszer lers egyenlsgjelet hasznl, s a kdols megknnytse miatt mindig a legyen egyenl jelt fogom hasznlni, mert jobban sugalja, hogy a ciklusvltoz felveszi a kezdrtket.

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    12

    pldul vals szm nem lehet ciklusvltoz, de pldul az ABC beti igen (rtelmes az a ciklusfelttel, hogy Ciklus i:=A-tl G-ig).

    Eljrsok, fggvnyek, opertorok Az algoritmusok ksztsnek egyik legfontosabb alapelve, hogy a feladatot rszfeladatok-ra bontjuk. Ezen rszfeladatokat is algoritmussal rjuk le. A rszfeladatokra bontst addig folytatjuk, amg egy-egy ilyen rszfeladat megoldsa mr kellen egyszerv vlik. A va-lami egyszert csinl algoritmusokat eljrsoknak hvjuk. rdemes eljrsknt megfo-galmazni azokat az algoritmus rszeket, amiket egy egysgknt szeretnnk kezelni, tbb-szr is vgre kell hajtani az algoritmus sorn. Az eljrsok lersa pedig a kvetkez: Eljrs Eljrsnv: utastsok Eljrs vge.

    Egy eljrs meghvhat a nevnek lersval, mintha utasts lenne: Utastsok_1 Eljrsnv Utastsok_2

    A programozsi feladatok tbbsge alapveten felrhat az albbi mdon: Program: Adatbeolvass Feldolgozs Eredmnykijelzs Program vge.

    Programunk hrom eljrst mr bizonyra tartalmaz. Nzznk egy egyszer pldt, az tlagszmtst! Az tlagoland rtkeket egy sorozatba fogjuk beolvasni, majd tlagot szmtunk, s utna kirjuk azt: Specifikci: Feladat: Szmoljuk ki N db szm tlagt! Bemenet: N (adatok szma, egsz), A (N elem sorozat, elemei vals szmok) Kimenet: ATL (tlag, vals szm) Elfelttel: N>1 (ekkor van rtelme az tlagnak) Utfelttel: ATL=(A(1)+A(2)+A(N))/N Algoritmus: Program: Sorozatbeolvass tlagszmts tlagkirs Program vge.

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    13

    Eljrs Sorozatbeolvass: Be: N Ciklus i:=1-tl N-ig Be: A(i) Ciklus vge Eljrs vge Eljrs tlagszmts: ATL:=0 Ciklus i:=1-tl N-ig ATL:=ATL+A(i) Ciklus vge ATL:=ATL/N Eljrs vge Eljrs tlagkirs: Ki: ATL Eljrs vge.

    Megjegyzs: Az tlag szmtshoz nem akartam a opertort hasznlni. Az A jel sorozat i-edik elemre val hivatkozs a matematikban: Ai. Az algoritmusok lersnl A(i)-t hasznlunk, de n elfogadhatnak tartom az A[i] rsmdot is, mely a pascal kdolst seg-ti. A program beolvassa a sorozat elemszmt s magt a sorozatot, az ATL nev vltoz-ban sszegzi a sorozat elemit, majd elosztja az elemek szmval, s vgl kirja az tlagot. A program sajnos rossz: nem felel meg a specifikcinak, mert nem ellenrzi, hogy a soro-zat elemszmnak megfelel rtket adtunk-e meg. rjuk t az algoritmusokat, s most t-rekedjnk a felhasznlbart kezelsre, valamint a vltozk deklarcijra is! A megvltoztatott algoritmusok: Program: Vltoz: N: egsz A(1..N: vals) [gy adom meg a sorozatot] ATL: vals Sorozatbeolvass tlagszmts tlagkirs Program vge. Eljrs Sorozatbeolvass: N:=0 Ciklus amg N

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    14

    Lthat, hogy minden eljrs hasznl vltozkat. J lenne megadni, hogy egy-egy eljrs milyen vltozkat hasznl, pontosabban milyen vltozkon keresztl kommunikl a kl-vilggal. Ezt nevezzk paramterezsnek, melynek elve a kvetkez: Az eljrs neve utn zrjelben vesszvel elvlasztva felsoroljuk azokat a vltozkat, ami-ket az eljrs felhasznl, vagy elllt (bemen s kimen paramterek), megadva azok tpust (rtkhalmazt) is. Az adattpusokrl majd a kvetkez fejezetben lesz sz, itt most elgedjnk meg azzal, hogy feltntetjk, hogy milyen alaphalmazbl valk az rtkei. A paramterek azonostja eltt megadjuk, hogy vltoz-e, vagy konstans. A vltoz r-tke a paramteren bell mdosulhat, s a mdosts az eljrson kvl is megmarad, A nem mdosul paramterek el rhatjuk, hogy konstans. Lehetnek olyan paramterek, ame-lyek az eljrs sorn keletkeznek, termszetesen azok is vltozk lesznek. Az eljrsokon bell hasznlhatunk olyan vltozkat, amelyek csak az adott eljrsban hasznlatosak (az eljrson kvl nem ltszanak), ezeket az eljrson bell kell deklarlni. A paramterekkel rendelkez eljrsok meghvsakor zrjelben fel kell sorolni a paramtereket)! rjuk t ennek szellemben az algoritmust! Program: Vltoz: N: egsz A(1..N: vals) [gy adom meg a sorozatot] ATL: vals Sorozatbeolvass(N,A) tlagszmts(N,A,ATL) tlagkirs(ATL) Program vge. Eljrs Sorozatbeolvass(vltoz N:egsz,vltoz A(1..N:vals)): N:=0 Ciklus amg N

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    15

    Az tlagot kiszmt eljrsban hasznltam egy helyi (loklis) vltozt (szintn szlva flslegesen), hogy megmutathassam hasznlatt. Az sszeg vltoz csak az adott eljrs-ban ltezik, msutt nem. Vegyk szre, hogy minden eljrsban gy neveztem el a vltozkat, ahogyan azokat a programban meghatroztam. Ez azonban nem ktelez, st nha kellemetlen is. Az eljr-sok fejlcben (az eljrsnv utni zrjelben) felsorolt azonostkat formlis paramte-reknek nevezzk. Formlisak azrt, mert az eljrs algoritmusnak szvegben ezeket az elnevezseket fogjuk hasznlni. Az eljrs meghvsakor ezen paramterek helyre az elj-rs meghvsakor felsorolt paramter rtkek kerlnek, amiket aktulis paramtereknek hvunk. A formlis s aktulis paramterek megfeleltetse a felsorols sorrendjben trt-nik, ezrt pontosan annyi (s azonos tpus) formlis s aktulis paramtert kell megadni! Az eljrs algoritmust teht a formlis paramterek segtsgvel rjuk le, mg az eljrs meghvsakor adjuk meg a vgrehajtskor hasznlatos aktulis paramtereket. Az eljrsok tovbbra is hasznlhatnak olyan vltozkat, amelyek nem szerepelnek a pa-ramterek kztt. Ezeket a vltozkat azonban az eljrs fejlce alatt meg kell adni, s termszetesen a korbbiakban (pldul a fprogramban) mr deklarlt vltozk is hasznl-hatk! Az eljrs lersa formlis paramterekkel: Eljrs Eljrsnv(formlis paramterek): utastsok Eljrs vge.

    Az eljrs meghvsa aktulis paramterekkel: Eljrsnv(aktulis paramterek)

    A fentiek szellemben trt program az albbi: Program: Vltoz: N: egsz A(1..N: vals) [gy adom meg a sorozatot] ATL: vals Sorozatbeolvass(N,A) tlagszmts(N,A,ATL) tlagkirs(ATL) Program vge. Eljrs Sorozatbeolvass(vltoz DB:egsz, vltoz Sorozat(1..N: vals)): DB:=0 Ciklus amg DB

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    16

    Eljrs tlagszmts(konstans DB:egsz, konstans Sorozat(1..N: vals), vltoz TLAG:vals): Vltoz sszeg: vals sszeg:=0 Ciklus i:=1-tl DB-ig sszeg:=sszeg+Sorozat[i] Ciklus vge TLAG:=sszeg/DB Eljrs vge. Eljrs tlagkirs(konstans: RTK: vals): Ki: A sorozat elemeinek tlaga:,RTK Eljrs vge.

    Mint lthat, mg arra sem trekedtem, hogy az egyes eljrsok ugyanazon tartalomra megegyez azonostt hasznljanak. A vltozk hasznlatnak kvetkezmnyei:

    1. A programban megadott vltozk s konstansok minden eljrsban hasznlhatk, mdosthatk. Az egyszerbb feladatokat ltalban ilyen a fprogramban deklarlt vltozkkal, gynevezett globlis vlozkkal oldjuk meg

    2. Az eljrsban megadott vltozk az adott eljrsban hasznlhatk, valamint az elj-

    rsbl meghvott eljrsokban. Szoktuk ezeket a vltozkat loklis vltozknak nevezni.

    3. Ha egy eljrs megad (deklarl) egy az elzekben mr hasznlt azonostt, akkor

    ebben az eljrsban (s az ebbl meghvottakban) a korbbi vltoz rtke nem lesz lthat. Termszetesen az eljrsbl kilpve ismt ltszani fog a vltoz korbbi r-tke.

    4. Az eljrsokat utastsknt hasznlhatjuk programunkban.

    J lenne az eljrsok mintjra olyan programrszeket is rni, amelyek gy viselkednek, mint a matematikai fggvnyek. A fggvnyek kifejezsekben szerepelhetnek, pldul: X:=SIN(3*Y). Termszetesen lehetsgnk van ilyen algoritmusokat kszteni. A fggvny megadsnak mdja: Fggvny Fggvnynv(formlis paramterek):fggvnyrtk tpusa utastsok Fggvnynv := kifejezs Fggvny vge

    Az eljrstl val egyik fontos eltrs, hogy a fggvny mr nem csupn a paramterekkel kommunikl az t meghv program rszlettel, hanem rendelkezik visszatrsi rtkkel, s ennek tpust a fggvny fejlcben meg kell adni. A visszatrsi rtk ltalban csak valamilyen egyszer tpusbl szrmazhat, de az algo-ritmusok lersakor ezzel mg nem trdnk.

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    17

    A fggvny termszetesen paramterknt megadott vltozt is mdosthat. Gyakori, hogy a visszatrsi rtk egy sikeressg jelzs, mg a tnyleges hats a paramtereken keresztl trtnik. A fggvny vgrehajtsakor a fggvny nevnek rtket ad utols utasts lesz a fgg-vny visszatrsi rtke. Ha ezt elfelejtjk, akkor a visszatrsi rtk meghatrozatlan. Termszetesen a fggvny programszvegben tbb helyen is szerepelhet a fggvnynvre vonatkoz rtkads, a vgrehajts szempontjbl utols hatrozza meg a visszatrsi rt-ket. A fggvny hasznlata egy kifejezsben: Fggvnynv(aktulis paramterek)

    Minden egyb tulajdonsg, amit az eljrsoknl felsorolunk, az a fggvnyre is igaz. rjuk t a programot gy, hogy az tlag kiszmtsa fggvnnyel trtnjen! Program: Vltoz: N: egsz A(1..N: vals) [gy adom meg a sorozatot] ATL: vals Sorozatbeolvass(N,A) ATL:=tlag(N,A) tlagkirs(ATL) Program vge. Eljrs Sorozatbeolvass(vltoz DB:egsz, vltoz Sorozat(1..N): vals): DB:=0 Ciklus amg DB

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    18

    Program: Vltoz: N: egsz A(1..N: vals) [gy adom meg a sorozatot] Sorozatbeolvass(N,A) tlagkirs(N,A) Program vge. Eljrs tlagkirs(konstans: DB: egsz, Sorozat(1..DB): vals): Ki: A sorozat elemeinek tlaga:, tlag(DB,A) Eljrs vge.

    Az opertorok (mveletek) olyan fggvnyek, melyeket a szoksostl eltren hasznlunk: az opertor nevt (a mveleti jelet) nem a paramterek el, hanem azok kz rjuk, gondol-juk pldul az sszeads (+) opertorra. Ilyen opertorokat is kszthetnk, de a kzpisko-ls gyakorlatban nem lesz r szksgnk. Csak a teljessg kedvrt szerepeljen itt egy pl-da, amely megadja a minimum opertor algoritmust: Mvelet min(konstans a,b: vals): vals Msknt a min b Ha a>b Akkor min:=b Klnben min:=a Elgazs vge Mvelet vge.

    A Msknt kulcssz utn lthat a mvelet hasznlatnak helyesrsa. Eddigiekben az eljrsok s fggvnyek paramterei vltozk s konstansok voltak. Para-mter azonban lehet eljrs, vagy fggvny is, pldul: Eljrs Eljrsnv(konstans x:vals, Fggvny fgv(vals):vals) Ki: x, fgv(x) Eljrs vge.

    Ez az eljrs egy fggvny rtktblzatnak elksztsre j.

    Krdsek, feladatok Mirt j a mondatszer algoritmus lers? Sorold fel a mondatszer lers alapelemeit! Ksztsd el a msodfok egyenlet megold kpletnek algoritmust mondatszer

    lerssal! Hasznlj benne fggvnyt, vagy eljrst is! Kszts algoritmust, amelyik beolvas egy szmot, s ha az nem negatv, akkor a

    ngyzetgykt rja ki, ellenkez esetben pedig a ngyzett! (Hasznlhat a Ngy-zetgyk(X) fggvny a ngyzetgyk kiszmtsra!

    Kszts algoritmust, amelyik beolvas egy pozitv szmot, s kirja a 3-mal oszthat szmokat 1 s a beolvasott szm kztt!

    Kszts algoritmust, amelyik beolvas egy pozitv szmot, s kirja, hogy prm-e! (A prmszmnak pontosan kt osztja van: az 1, s nmaga. Ne hasznlj nevezetes al-goritmust!)

    Kszts algoritmust, amelyik beolvas egy szmot (jelljk N-nel), s ezt kveten beolvas N db szmot, s vgl kirja a beolvasott N db szm kzl a legkisebbet!

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    19

    2.1.3 Algoritmusok rajzos brzolsa

    Folyamatbra A folyamatbra a programot grfknt rja le. A programgrf egy irnytott grf, amely csompontokbl s az ket sszekt lekbl ll. Egyetlen indul llel, s egyetlen befeje-z llel rendelkezik, az indul lbl brmely csompont elrhet, s brmely csompontbl el lehet jutni a befejez lhez. A folyamatbra az albbi hromfle csompontot tartalmazhatja (ezek a folyamatbra alapelemei): utastscsompont dntscsompont gyjtcsompont

    utasts1

    feltteli h

    utasts2

    Utastscsompont: vgighaladva rajta vgre kell hajtani a belert utastst. Dntscsompont: a benne lv felttel igaz rtke esetn az i betvel jellt len, hamis rtke esetn a h betvel jellt len kell tovbbhaladni. Gyjtcsomopont: a befut lek (kett, vagy tbb) az egyetlen kimen lben folytatdnak Szoks a csompontot kis karikval jellni. Ez a lers jl hasznlhat az algoritmusok vgrehajtsnak kvetsre, de slyos htrnya, hogy alapelemei nem strukturlt szerkezetek, gy knnyen kszlhet vele nem strukturlt program, amit szeretnnk elkerlni. A folyamatbra csompontjai segtsgvel az albbi mdon alakthatk ki a hinyz struk-turlt programszerkezetek: rtkads elgazs

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    20

    Itercik (ciklusok): elltesztel ciklus htultesztel ciklus szmll ciklus

    A gyakorlatban a megadott folyamatbra csompontok kiegszlnek az albbiakkal: a program kezdete a program vge adatbevitel adatkivitel

    A kvetkez rszben megtanuljuk, hogyan lehet egy folyamatbrval megadott algoritmust vgigkvetni.

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    21

    Ksztsk el a pozitv egsz szmok szorzsnak algoritmust (a szorzst ismtelt ssze-adsra visszavezetve)!

    A folyamatbra kirtkelshez hasznos segtsg lehet egy tblzat, mely a vltozkat s a mveleteket tartalmazza (lpsenknt kitltve). A fenti folyamatbra rtktblzata:

    a b szorzat mvelet 5 3 Be: a,b 5 3 5 Szorzat := a 5 3 10 b > 1; szorzat := szorzat + a 5 2 10 b := b 1 5 2 15 b > 1; szorzat := szorzat + a 5 1 15 b := b 1 5 1 15 Ki: szorzat

    A mvelet oszlopban mondatszer elemeket hasznltam, de brmilyen jellsrendszer hasznlhat, amit jl ismersz. Szabad tbb utastst vgrehajtsnak eredmnyt egy sor-ban megjelenteni, ha tudsz r figyelni.

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    22

    Krdsek, feladatok Mirt j a rajzos algoritmus lers? Hogyan brzolja a folyamatbra az

    algoritmust? Sorold fel a folyamatbra alapelemeit! Minden folyamatbra strukturlt algo-

    ritmust takar? Ksztsd el az iskolban tallhat

    dtital automata mkdsnek fo-lyamatbrs algoritmust (ne trekedj a tlzott rszletessgre)!

    Ksztsd el a palacsinta sts folya-matbrs algoritmust!

    Ksztsd el a msodfok egyenlet megold kpletnek folyamatbrs algoritmust!

    Elemezd az albbi folyamatbrkat s vlaszolj a krdsekre!

    Mit ad eredmnyl, ha X=0? Mit ad eredmnyl, ha X=5? Mit ad eredmnyl, ha X=100? Fogalmazd meg egy mondatban, hogy mit csinl a program?

    Mit ad eredmnyl, ha X=0 s Y=2? Mit ad eredmnyl, ha X=-2 s Y=3? Mit ad eredmnyl, ha X=2 s Y=4? Fogalmazd meg egy mondatban, hogy mit csinl a program?

    Mit ad eredmnyl, ha N=0 s X=4? Mit ad eredmnyl, ha N=1 s X=10? Mit ad eredmnyl, ha N=3 s X=2? Fogalmazd meg egy mondatban, hogy mit csinl a program?

  • 2. Algoritmizls (tervezs) 2.1. Algoritmusok lersa

    23

    Struktogram A folyamatbra hibit gy prbljuk meg kikszblni: a programgrfot lek nlkl br-zoljuk, gy egyetlen alapelem marad, a tglalap:

    utasts Az alapelem segtsgvel gy pthetk fel a strukturlt alapelemek: szekvencia elgazs ciklus (elltesztet, szmll)

    utasts1

    utasts2 Szmll ciklus esetn a felttel az albbi alak: ciklusvltoz:=kezdet-tl vg-ig pldul: i:=1-tl N-ig Elltesztel ciklus esetn a ciklusmagba lps felttele szerepel, pldul: I

  • 2.1. Algoritmusok lersa 2. Algoritmizls (tervezs)

    24

    Befejezsl pldaknt lljon itt a pozitv egsz szmok szorzsnak ismtelt sszeadsra visszavezetett algoritmusnak struktogramja:

    Be: a,b szorzat := a

    b > 1 szorzat := szorzat + a b := b -1

    Ki: szorzat A struktogram utastsait mondatszer elemekkel rtam le. Termszetesen lehetne a folya-matbrnl tanul elemeket (rtkads, be/ki) is hasznlni.

    Krdsek, feladatok Mirt elnysebb a struktogram, mint

    a folyamatbra? Mik a struktogram alapelemei? Kszts programot, amely beolvas egy

    szmot s kirja 2-tl a megadott szmig a 2-vel oszthat szmokat!

    Kszts programot, amely beolvas egy szveget, s kirja duplzva, azaz minden karaktert ktszer r ki!

    Kszts programot, amely eldnti, hogy egy (pozitv) szm ngyzet-szm-e!

    Kszts programot, amely beolvas egy nem negatv szmot (jelljk N-nel), majd beolvas ennyi darab (N db) szmot, s vgl kirja az tlagukat!

    Kszts programot, amely beolvas egy pozitv egsz szmot, s kirja, tkle-tes szm-e!

    Elemezd a kvetkez struktogramokat!

    Be: A (A szm)

    I A 0 hI A < 0 h

    Ki: 'Rossz!' C:=2*A C:=A/3

    Ki: C Mit ad eredmnyl, ha A=6 ? Mit ad eredmnyl, ha A=-2 ? Mit ad eredmnyl, ha A=0 ?

    Fogalmazd meg ltalnosan, hogy mit csinl a program!

    Be: A,B H A0 s B>0 i

    Ki: '?'

    C:=0

    A B A:=A-B C:=C+1

    Ki:A Mit ad eredmnyl, ha X=4 s Y=0 ? Mit ad eredmnyl, ha X=8 s Y=3 ? Mit ad eredmnyl, ha X=7 s Y=3 ? Fogalmazd meg ltalnosan, hogy mit csinl a program!

    Be: S (S szveg) DB:=0

    I:=1 IHossz(S) i S(I)=',' h DB:=DB+1

    I:=I+1 I:=I+1 Ki: DB

    Mit ad eredmnyl, ha S=Mg jni fog, ha jni kell Mit ad eredmnyl, ha S=g a napme-legtl a kopr szik sarja Fogalmazd meg ltalnosan, hogy mit csinl a program!

  • 2. Algoritmizls (tervezs) 2.2 sszefoglals

    25

    2.2 sszefoglals Ebben a fejezetben az algoritmusok lersra koncentrltunk. Az algoritmusokat szvege-sen, vagy rajzosan szoks lerni. A szveges lersok kzl megismertk a mondatokkal trtn lers s a mondatszer elemekkel trtn lerst. Az elz elnye, hogy nem kell hozz klnleges ismeret, htr-nya azonban, hogy nagyon terjedelmes, s msok szmra valsznleg nem egyrtelm, a nyelvi korltok miatt esetleg flrerthet is. A mondatszer lers elnye, hogy szabvnyos szveges alapelemeket hasznl az algo-ritmus lersra. A strukturlt programok alapelemei (knyelmi kiegsztsekkel):

    rtkads, beolvass, kirs, megjegyzs, szekvencia (utastsok egymsutnja), elgazs:

    felttel, ktg elgazs sokg elgazs

    iterci (ismtls): elltesztel ciklus, htultesztel ciklus, szmll ciklus,

    eljrs, fggvny. Rajzos algoritmus lersok kzl a folyamatbrt s a struktogramot ismertk meg. A struktogram elnye, hogy alapelemi strukturltak, mg a folyamatbra lapaelemei nem. Megismertk az albbi kulcsfogalmakat:

    o szintaxis, szemantika, o azonost, o vltoz, lland, o program, o paramter (formlis, aktulis)

    A mondatszer lers tovbbi elnye, hogy pascal nyelvre knnyen kdolhat, ezrt a to-vbbiakban algoritmus lersra ezt fogjuk hasznlni.

  • 3.1. Az adatok legfontosabb jellemzi: 3. Adattpusok

    26

    3. Adattpusok

    3.1. Az adatok legfontosabb jellemzi:

    Azonost: A vltozhoz rendelt nv, gy hivatkozhatunk r. Hozzfrsi jog: Az adat mdosthatsga s lekrdezhetsge. Kezdrtk: A deklarcival kap-e kezdrtket, vagy sem. Hatskr: A programszveg azon rsze, ahol a hozzfrs megengedett. Globlis: minden eljrsbl elrhet. Loklis: Csak az t kzvetlenl tartalmaz eljrsban hasznlhat. Sajt: Csak az adott eljrsban hasznlhat. Lthatsg:: A program azon rsze, ahol lehetsges a hozzfrs (egy loklis vlto-

    z eltakarhat egy kls vltozt. lettartam: A futsi id azon rsze, ahol az azonost ugyanazt az adatot jelenti. Tpus: Az albbi adattulajdonsgok sszessge: rtkhalmaz, mveletek, b-

    rzols. rtkhalmaz: Az a halmaz, amelybl a vltoz rtket vehet fel. Megklnbzte-

    tnk elemi s sszetett tpust. rtkhalmaz szempontjbl az adat lehet: - Elemi tpus: Szerkezetileg nem bonthat tovbb, pldul: egsz, vals, logikai, karak-

    ter, mutat (adat cme), felsorols, intervallum. - sszetett tpus: Szerkezettel rendelkezik, pldul: rekord (klnbz tpus, de logikai-

    lag sszetartoz tpusok egyttes kezelse), halmaz, szveg (karakterek sorozata), sorozat, tmb (mtrix). A bonyolultabb adatszerkezetekkel (verem, sor, lista, fa, tblzat, grf) ebben a knyvben nem foglalkozunk.

    A tpus meghatrozza azt is, hogy milyen mveleteket rtelmezhetnk rajta. Az elemi adat-tpusok lehetsges mveleteit 3 csoportba szoks sorolni:

    rtkad, tpustviteli:

    o relcis, o szelekcis (egy elem kivlasztsnak mdja), o konstrukcis (hogyan kpezzk), o szmossg (hny elem az rtkhalmaz),

    transzformcis (ugyanarra a tpusra kpez le, pldul +,-,min, elz,.). Az sszetett adattpusok mveletei tovbbi csoportokat alkothatnak:

    o lekrdez (egy-egy rtk kiolvassa), o bvt (j adat felvtele), o szkt (adat trlse), o mozgat (kvnt adat kivlasztsa), o egyb (hibakezels, hny eleme van,).

    A tpus harmadik jellemzjvel, az adatok memriban trtn trolsnak mdjval eb-ben a knyvben csak nagyon felletesen foglalkozunk. Tekintsk t a kzpiskols algoritmus s programozs feladatokban leggyakrabban hasz-nlt adattpusokat!

  • 3. Adattpusok 3.2. Elemi adattpusok

    27

    3.2. Elemi adattpusok Ebben a fejezetben ttekintjk az elemi adattpusok legfontosabb jellemzit. Egsz

    rtkhalmaza: brzolstl fgg, pldul -32768 .. 32767 Mveletek: rtkads, relcik, +,-,DIV,MOD,-,^(egsz kit. hatvny) brzols: pldul 2 byte, 2-es komplemens (erre vonatkozik a megadott

    rtkhalmaz) Plda: Vltoz i: egsz

    Vals

    rtkhalmaza: brzolstl fgg, tbbfle rtkhalmazzal szoks realizlni Mveletek: rtkads, relcik,+,-,*,/,-,^ brzols: pldul 6 byte, exponencilis normalizlt alak Plda: Vltoz x: vals

    Logikai rtkhalmaza: igaz, hamis (true, false) Mveletek: nem (NOT), s (AND), vagy (OR), kizr vagy (XOR), r-

    tkads (:=) brzols: 1 biten, vagy (1 byte-on) Plda: Vltoz L: logikai

    Karakter

    rtkhalmaza: 0..255 kd jelek halmaza Mveletek: rtkads, ord (hnyadik a kdja szerint), chr (kdbl karak-

    ter), relcik (kd alapjn), + (konkatenci, azaz sszefzs) brzols: ltalban 1 byte Plda: Vltoz c: karakter c:= a

    Felsorols

    rtkhalmaza: konstansok felsorolsval adjuk meg Mveletek: rtkads, relcik, ord (hnyadik), pred (elz), succ (k-

    vetkez) Figyelem! Az elz s a kvetkez nem ciklikusan rtend! Beolvasni, kirni nem lehet! Szimulcira j. brzols: sorszmot brzoljuk Plda: Konstans htvge=(szombat,vasrnap)

    Intervallum

    rtkhalmaz: az alaptpus sszefgg rszhalmaza Mveletek: megegyezik az alaptpus mveleteivel Plda: 1..8, A..Z

    Mutat

    rtkhalmaz: nem negatv egsz Mveletek: rtkads, new (lefoglal), dispose (felszabadt) brzols: pldul 4 byte

  • 3.3. sszetett adattpusok 3. Adattpusok

    28

    Egy memriacm, ha nem definilt, akkor NIL rtk (ez nem azonos a nullval). Adott tpus vltoz trolshoz lehet memrit foglalni, felszabadtani.

    Plda: Tpus mutat=^Karakter (karakterre mutat) Vltoz p: mutat Ez egyttal plda arra is, hogy j tpust hogyan adhatunk

    meg. A mutat tpus byte-nyi adatra mutat. A p nev vltoz egy ilyen mutat. Az adatterletet a new(p) utastssal lehet majd lefoglalni s a dispose(p) utastssal lehet felszabadta-ni.

    3.3. sszetett adattpusok Az rtkhalmaz mellett a szerkezete (struktrja) is lnyeges, brzolsukat a legtbb eset-ben mr meg sem emltem. Rekord Akkor hasznljuk, ha klnbz tpus, de logikailag ssze tartoz adatokat szeretnnk kezelni.

    rtkhalmaz: alaptpus direktszorzata (pldul: szveg x egsz) Mveletek: rtkads, relci (csak =, ), kivlaszts (pont-tal jelljk) brzols: meznknt folytonos memriaterleten Plda: Tpus tanul=Rekord (nv: szveg; kor: egsz) Vltoz: valaki: tanul valaki.nv a tanul nevt jelenti, valaki.kor a tanul korra hivatkozik.

    Halmaz

    rtkhalmaz: az alaptpus iterltja, amely rendelkezik a halmaz tulajdon-sggal (minden elem klnbz, nincs sorrendisg)

    Mveletek: rtkads, halmaz relcik, unio, metszet, klnbsg, eleme-e (in), reshalmaz (ez hozza ltre), jele: []

    Plda: Tpus napok=(htf,kedd, szerda, cstrtk, pntek, szom-bat, vasrnap)

    Tpus Halmaztpus= Halmaz(napok), vagy SET OF napok Szveg

    rtkhalmaz: karakterek direktszorzata, lehet fix hosszsg, vagy vltoz. Mveletek: rtkads, relcik (karakter kdra), + (konkatenci), Je-

    le(szveg,i) a szveg i-edik karaktere, melyet ltalban 1-tl szmolunk, esetleg szvegkezel fggvnyek

    Plda: Vltoz s: szveg s := Ez egy plda.

    Sorozat

    rtkhalmaz: alaptpus iterltja s a lineris rendezettsg jellemzi: pontosan egy megelz s kvetkez ltezik.

  • 3. Adattpusok 3.4. A specifikci pontostsa

    29

    Mveletek: az alaptpussal megegyezik, kivlaszts Megadsa: nv(indextpus:rtktpus) alakban trtnik A sorozatot egydimenzis tmbbel valstjuk meg. Plda: Vltoz s: sorozat(1..10:egsz) NEM hasznlatos, helyette: Vltoz s: tmb(1..10:egsz), vagy tmb[1..10:egsz] Ki: s(1)

    Tmb

    rtkhalmaz: alaptpus iterltja s a lineris rendezettsg jellemzi: pontosan egy megelz s kvetkez ltezik.

    Mveletek: az alaptpussal megegyezik, kivlaszts Megadsa: nv(indextpusok felsorolsa:rtktpus) alakban trtnik Plda: Vltoz t: tmb(1..10,1..10:egsz), vagy: Vltoz t: tmb[1..10,1..10:egsz] ez egy egszekbl ll

    10x10-es mtrix. Ki: t(2,4)

    3.4. A specifikci pontostsa A korbban trgyalt kt plda specifikcija s algoritmusa a vltozk megadsval, mon-datszer lerssal: Feladat: Szmold ki a hromszg terlett, ha adott az egyik oldala s a hozz tartoz magassg! Bemenet: a (alap, vals szm), m (magassg, vals szm) Kimenet: t (terlet, vals szm) Elfelttel: a s m pozitv Utfelttel: t=a*m/2 Program Hromszg_terlet: Vltoz a,m: vals [pozitv] Be: a,m t:= a*m/2 Ki: t Program vge.

    Az algoritmus elegnsabb, ha az adatok bekrsekor tudjuk, hogy mit is kell megadnunk. Az rtkad utasts is elhagyhat, hiszen az adatkiviteli utasts tartalmazhat kifejezst: Program Hromszg_terlet: Vltoz a,m: vals Ki: Alap:; Be: a Ki: Magassg: Be: m Ki: A hromszg terlete: Ki, a*m/2 Program vge.

  • 3.5. sszefoglals 3. Adattpusok

    30

    A szmkitall program specifikcija s algoritmusa: Feladat: Kszts algoritmust a kvetkez szmkitall jtk ra! Gondolj egy egsz szmot 0 s 100 kztt, s jelld Ezt g-vel. Aki ki akarja tallni a szmot, a kvetkez mdszer szerint jr el: A jtkos mond egy szmot (jelljk ezt x-szel), te pedig megmon- dod, hogy a gondolt szm ennl nagyobb, vagy ki- sebb. Ezt mindaddig ismtlitek, amg a krdez ki- tallja a gondolt szmot! Bemenet: x [a tipp, egsz] Kimenet: Szveges zenet, hogy a gondolt szm nagyobb, ki-sebb, vagy egyenl a tippel. Elfelttel: x 0 s 100 kztti Utfelttel: A gondolt szm nagyobb., ha g>x A gondolt szm kisebb., ha gx akkor Ki: A gondolt szm nagyobb. Ha g

  • 4. Kdols 3.6. Krdsek, feladatok

    31

    4. Kdols A kdols sorn az algoritmust tltetjk valamely programozsi nyelvre a specifikcit is szem eltt tartva. A programozsi nyelv kivlasztsnak szmtalan szempontja lehet (me-lyik ll rendelkezsre, melyiket ismerjk, melyikben knny a feladatot megoldani,), neknk az elbbiekben felvzolt algoritmikus gondolkodshoz legkzelebb ll nyelvet rdemes vlasztanunk. A tanulmnyaink sorn hasznlt szemlyi szmtgpek felptse Neumann Jnos elveit kvetik:

    kettes szmrendszert hasznlnak, az utastsokat szekvencilisan hajtjk vgre (egy idben egy mvelet), bels memrijuk van, trolt programmal mkdnek (a program is adat a memriban eltrolva), univerzlisak (elvileg brmilyen feladat megoldsra hasznlhatk).

    Az ilyen gpekre kszlt Neumann-elv nyelvek jellemzi:

    a memria cmezhet (sorszmmal), a program s az adatok a memriban vannak, a vgrehajts nem ms, mint memriallapotok sorozata, a program lersa szveges.

    Kvetkezmnyek: van vltoz, rtkads, utastsok ismtelt vgrehajtsa s az elgazs is lehetsges, a beolvass s a kirs is memriamsols.

    A mondatszer algoritmusok egyszer kdolhatsga miatt a pascal nyelvet vlasztjuk programozsi nyelvknt. Termszetesen vlaszthatnnk mst (C, Basic, Visual Basic,). Lteznek nem Neumann-elv nyelvek is, egyetlen konkrt pldt szeretnk megemlteni: az ltalnos iskolban megismert LOGO nyelv egy automata-elv nyelv (ilyen a festrobot is). Az automata-elv nyelvek jellemzi:

    tevkenysgorientlt (llapotok vannak benne), az adatok llapotok illetve bemenetek, a vgrehajts llapotok sorozata, a program llapottmenetet ler fggvny, a program elklnl az adatoktl.

    Kvetkezmnyek: rgztett adatszerkezet (llapotok), vltoz s rtkads nincs, csak paramter (br pld. a logo-ban sajnos lehetsges), egyszer ciklusok (n-szer ismtls, vagy llapotfgg ismtls), elgazs llapotfgg, vagy paramterfgg, utastsok s eljrsok paramterezhetk, beolvass nincs, llapot, vagy paramter lekrdezhet, kimenet nincs, illetve az llapotvltozs maga az, prhuzamossg lehetsges.

  • 4.1. A pascal programozsi nyelv 4. Kdols

    32

    Lteznek mg funkcionlis-elv, logikai-elv, objektum-elv s adatfolyam-elv nyelvek is, melyekre ebben a knyvben nem trnk ki.

    4.1. A pascal programozsi nyelv A Neumann-elv nyelvek kzl oktatsi clra a pascal a legalkalmasabb, rvid trtnete az albbi:

    Ksztje Niklaus Wirth (Svjcban, a zurich-i egyetemen tantott fordtprogram ksztst),

    1968-ban kszlt el az els vltozata az ALGOL60 nyelvre alapozva, a cl az volt, hogy knnyen lehessen fordtprogramot rni (a programozsi nyelv

    utastsait a vgrehajt egysg ltal rthet utastsokk talaktani), 1970-ben kszlt el az els pascal fordtprogram, 1973-ban jelent meg az els szabvny, 1983-ban adtk ki az jabb (szigorbb) szabvnyt, 1983-ban jelenik meg az els PC-n fut Turbo Pascal vltozat (ma az 1972-ben k-

    szlt Borland Pascal 7.0-t hasznljuk ltalban). A pascal nyelv nhny jellemzje:

    Neumann-elv, amatr nyelv (nem nagy programrendszerek fejlesztsre kszlt), a program egy fordtsi egysg (a fordtsi egysg a program nllan lefordthat

    legkisebb rsze), amely tbb programegysget tartalmazhat (a programegysg egy rszfeladatot old meg, egyben, egysgknt hajthat vgre s paramterezhet, ilyen az eljrs s a fggvny),

    a paramterek tadsa trtnhet rtk s cm szerint, az eljrsban trtnt rtk m-dosts hatsnak megmaradshoz a cm szerinti tads szksges,

    a nyelv alapszavai vdettek (msra nem hasznlhatk), sor utasts, az utasts elvlaszt jel a pontosvessz, a tpus-kompatibilits nv szerinti, mely az eljrsok s fggvnyek formlis s ak-

    tulis paramtereinek megfeleltetsre s a kifejezsekre is vonatkozik: nem ele-gend, hogy a tpusok szerkezete azonos, a tpusnvnek is azonosnak kell lennie,

    a vltozk tpust mr a fordtskor tudni kell (ersen tpusos), a memriakezels dinamikus: a felhasznlt memria szksgleteknek megfelelen

    mdosul, van kzi lefoglals, trls is, a vltozk hatskre statikus (hatskr: a programszveg azon rsze, ahol a vltoz

    rvnyben van), a deklarcit kveten ltezik, mindent elre definilni kell.

    Nzzk meg, hogyan lehet a mondatszer lerssal kszlt algoritmusokat pascal nyelvre kdolni! Az algoritmus s a pascal nyelv is egyformnak tekinti a kis- s nagybetket, csu-pn a szemlletessg nvelsre hasznljuk. A kvetkez rszben tblzatos formban megadom a tanult algoritmus alapelemek pascal megfeleljt (pldval illusztrlva). A pascal kdban jelezni fogom, hogy az utastsok elvlasztsra a pontosvessz karakter szolgl.

  • 4. Kdols 4.2. trsi szablyok

    33

    A TP azonosti betvel kezddnek, s az angol abc betit s a szmokat tartalmazhatja (lehet benne nhny rsjel, pldul alhzs is). Hasznlhatk a kisbetk s a nagybetk egyarnt, de a TP nem klnbzteti meg ket. Fontos mr most tisztzni, hogy szvegknt (magyarzat, szveges vltoz rtke,) hasznlhatunk magyar kezetes betket, de kszljnk fel arra, hogy a DOS, a Windows, esetleg a Linux eltr karakter kdolsa miatt nem lesz a szveg kezethelyesen tvihet.

    4.2. trsi szablyok Ebben a fejezetben megtanuljuk, hogyan lehet az algoritmusbl pascal, pontosabban Borland Turbo Pascal 7.0 kdot kszteni.

    4.2.1. A program

    A program szerkezete ALGORITMUS TURBO PASCAL KD Program: vltozk s llandk deklarlsa utastsok Program vge.

    Program nv; deklarcik; Begin utasts_1; utasts_n; End.

    4.2.2. Deklarcik A szabvny szerint kttt sorrend a deklarls, de a TP (Turbo Pascal) szerint nem:

    1. cmdeklarcik 2. konstansdefincik 3. tpusdefincik 4. vltozdeklarcik 5. eljrs- s fggvnydeklarcik

    Legfontosabb deklarcik

    ALGORITMUS TURBO PASCAL KD Konstans nv=rtk

    Const nv=rtk; nv=rtk; CONST MAXN=20; TP ismeri a tpusos konstanst: Const nv:tipus=rtk; CONST MAXN:INTEGER=20; ebben az esetben az rtk mdosthat

    Tpus tpusnv=tpusdefinci

    type azonost=tpusmegads; TYPE TombElem=Integer;

    Vltoz nv:tpus

    Var nev:tipus;

    Egy tpust hasznlata eltt deklarlni kell! Az eljrsok s a fggvnyek deklarlsrl ksbb lesz sz.

  • 4.2. trsi szablyok 4. Kdols

    34

    4.2.3. Elemi adattpusok

    Elemi adattpusok ALGORITMUS TURBO PASCAL KD egsz Vltoz i:egsz vals Vltoz x:vals logikai Vltoz van:logikai karakter Vltoz c:karakter felsorols intervallum mutat

    Var i:Integer; Var x:Real; Var van:Boolean; Var c:Char; konstansok felsorolsval adhat meg pld.: const hetvege=(szombat,vasarnap); hatraival adhat meg: pld.: a..z, vagy -10..10 csak tpusos mutatt hasznljunk: pld.: var mut=^integer (egszre mutat)

    A TP egsz tpusok specialitsa

    Tpus Tartomny Mret (bit) Shortint -128..127 8 Integer -32678..32767 16 Longint -2147483648..2147483647 32 Byte 0..255 8 Word 0..65535 16 Minden egsz tpus megszmllhat.

    A TP vals tpusok specialitsa:

    Tpus Tartomny Pontossg (szmjegy) Mret (bjt) Real 2,9*10-39..1,7*1038 11-12 6 Single 1.5*10-45..3,4*1038 7-8 4 Double 5,0*10-324..1,7*10308 15-16 8 Extended 3,4*10-4932..1,1*104932 19-20 10 Comp -9,2*1018..9,2*1018 19-20 8 A comp tpus egy 64 bites egsz valjban.

    A TP logikai tpus specialitsa: A Boolean megszmllhat tpus, valjban egy elre definilt felsorolt tpus: Type Boolean = (False, True); A TP karakter tpus specialitsa: Termszetesen megszmllhat, az ASCII kdjt trolja, karakter konstansok kt egyszer aposztrf kztt adhatk meg (az aposztrfot kt aposztrfknt kell megadni, pldul: A, 3, vagy

  • 4. Kdols 4.2. trsi szablyok

    35

    A TP mutat tpus hasznlata A mutat tartalmnak mdostsa: mut:=NIL; (* sehov nem mutat pointer *) mut:=^i; (* a mut vltoz az i vltoz cmt tartalmazza *) mut^:=12; (* a mutat ltal cmzett vltoz rtke lesz 12 *) Ebben a knyvben nem fogunk mutatkat hasznlni.

    4.2.4. sszetett adattpusok

    sszetett adattpusok ALGORITMUS TURBO PASCAL KD rekord Tpus cikk=Rekord (cikkszam: egsz, r: vals)

    Type cikk=Record cikkszam: Integer; ar: Real; end;

    halmaz Tpus szmok=Halmaz(1..100) Tpus betk=Halmaz(karakter)

    set of tpus; Type szamok= set of 1..100; Type betuk= set of char;

    szveg Vltoz nv: szveg Vltoz utca: szveg(30)

    string Var nev:string; (* maximum 255 kar.*) Var utca:string[30];

    sorozat Vltoz nv(indextartomny:tpus) Vltoz valami(1.10:vals)

    (* egydimenzis tmb *) Var nev:array[indextaromny] of tpus; Var valami:array[1..10] of Real;

    tmb Vltoz nv(index1,..,indexn:tpus) plda: Vltoz mx(1..10,a,,z:vals)

    Var nev=array[index1,,indexn] of tpus; Var mx=array[1..10,a..z] of Real;

    A TP rekordtpus hasznlata: A rekord egy mezjre a pont segtsgvel lehet hivatkozni. A fenti pldnl maradva: Var cikkek:cikk; . cikkek.cikkszam:=12; cikkek.ar:=123.50; A TP halmaz tpus specialitsai: Az alaptpusnak megszmllhatnak kell lennie, 256-nl nem tbb lehetsges rtkkel. Az alaptpus als s fels hatrnak 0..255 tartomnyban kell lennie! [] az res halmazt jelli. Halmaz felpthet kifejezsek szgletes zrjelbe ttelvel: [0..9,A..Z,a..z] [1, 5, i+1 .. j-1] Felsorolt tpusbl is kpezhet: Type napok=(hetfo,kedd,szerda,csutortok,pentek,szombat,vasarnap); Type naphalmaz= set of napok;

  • 4.2. trsi szablyok 4. Kdols

    36

    A TP string tpus specialitsai: Legfeljebb 255 karakter hossz karaktersorozat. Megadhat hossz nlkl is. Sorozatknt lehet kezelni: 0. eleme a hossz, ezt kvetik a szveg karakterei. String konstans aposztrfok kztt adhat meg:

    Ez egy szveg kontans. Hasznlhat opertorok? +,-,,,= A TP sorozat tpusa Egydimenzis tmbknt deklarjuk, teht a tmbknl foglalkozunk vele.. A TP tmb tpus specialitsai: Az index tpusnak megszmllhatnak kell lennie, az elem tpusa tetszleges lehet (egysze-r, vagy sszetett). A tmb mrett a deklarciban meg kell adni, az nem vltoztathat. Kerljk a direkt tmbdeklarcit! Var tomb:array[1..10] of Integer; E helyett hasznljunk tpust, s abbl deklarljuk a vltozt: Type elemtipus=Integer; Type tombtipus=array[1..10] of elemtipus; Var tomb:tombtipus; Mirt rdemes ezt gy bonyoltani? A pascal nv szerinti tpusegyezst kvetel meg a mveletek, eljrsok, fggvnyek para-mtereinl (nem elegend a struktra szerinti megegyezs), ezrt pldul a tmbk kztti rtkads csak ebben az esetben valsthat meg Var tomb1,tomb2:tombtipus; a:=b; Az elz rtkads gy hajthat csak vgre. Tbbdimenzis tmbre plda: Type elemtipus=Integer; Type tombtipus=array[1..10,-10..10,a..e] of elemtipus; Var tomb:tombtipus; kar:char; kar:=d; Tomb[1,-5,kar]:=8;

    4.2.5. Megjegyzsek

    Megjegyzsek ALGORITMUS TURBO PASCAL KD [megjegyzs]

    (* megjegyzs *) { ez is egy megjegyzs } { megjegyzsek (* egymsba *) gyazhatk}

  • 4. Kdols 4.2. trsi szablyok

    37

    Azt javaslom, hogy a kdols folyamn a (* szveg *) alak megjegyzst hasznljuk, s a kapcsos zrjelet hagyjuk meg a tesztelshez: segtsgvel a programszveg egy rsze megjegyzsbe tehet. Plda az egymsba gyazsra az elbbi TP kdban lthat.

    4.2.6. Elgazsok

    Elgazsok ALGORITMUS TURBO PASCAL KD Egyg elgazs Ha felttel akkor utastsok

    if felttel then utasts;

    Ktg elgazs Ha felttel akkor utastsok_1 klnben utastsok_2 Elgazs vge

    if felttel then utasts_1 else utasts_2;

    Tbbg elgazs Elgazs felttel_1 esetn utast-sok_1 felttel_n esetn utast-sok_n egyb esetn utastsok_m Elgazs vge

    Case kifejezs of rtklilsta_1: utasts_1; rtklista_n: utasts_n; else utasts_m; End;

    A TP elgazsok specialitsai: Az elgazsok brmely gban egyetlen utasts lehet, ha tbbre van szksg, akkor azokat Begin End kz kell tenni! Plda: If a>0 then Begin b:=a+1; c:=a-1; End;

    Ktg elgazsnl gyelni kell arra, hogy amennyiben a then gban tbb utasts van, akkor az azokat egybefoglal Begin End vgn nem lehet pontosvessz, mivel a pon-tosvessz utasts lezr karakter. Plda: If a>0 then Begin b:=a+1; c:=a-1; End (* nincs pontosvessz*) Else Begin b:=a-2; c:=a+2; End;

  • 4.2. trsi szablyok 4. Kdols

    38

    A tbbg elgazs kifejezse megszmllhat tpus eredmnyt szolgltathat (tipikusan egsz, vagy karakter). Az rtklista az rtkek felsorolsval adhat meg. Egy-egy gon Begin End kztt lehet tbb utasts. gyelni kell arra, hogy az egyes gak egymst kizrak legyenek! Az gak kiegszlnek egy egybknt ggal (nem minden nyelvben van ilyen). Plda tbbg elgazsra: Case kar of a..z : Begin s:=kisbet; kb:=kb+1; End; 0..9 : Begin s:=szmjegy; szj:=szj+1; End; .,,,?,!,(,) : s:=rsjel else Begin s:=egyb karakter; e:=e+1; End;

    4.2.7. Itercik (ciklusok)

    Itercik (ciklusok) ALGORITMUS TURBO PASCAL KD szmll ciklus ciklus cv:=kezdet-tl vg-ig utastsok ciklus vge

    for cv:=kezdet to vg do utasts;

    elltesztel ciklus ciklus amg felttel utastsok ciklus vge

    while felttel do utasts;

    htultesztel ciklus ciklus utastsok amg bennmaradsi_felttel ciklus vge

    repeat utastsok; until kilpsi_felttel;

    A TP ciklusok specialitsai: A szmll ciklus ciklusvltozja csak megszmllhat tpus lehet. Nincs lehetsg lpskz megadsra. A ciklusvltozt a ciklusmagban nem szabad mdostani! Ha lefel kell szmolni, akkor a kd az albbi: For cv:= kezdet downto vg do utasts; Ha tbb utastsbl ll a ciklusmag, akkor azokat Begin End kz kell tenni. Plda: For i:= 1 to N do Begin j:=j+i; k:=k*i; End;

  • 4. Kdols 4.2. trsi szablyok

    39

    Az elltesztel ciklus esetn is lehet tbb utasts a ciklusmagban Begin End kztt. A ciklus eltt gondoskodjunk a felttel belltsrl (lehetsges olyan eset, hogy mr akkor hamis)! A ciklusmagban szerepelnie kell olyan utastsnak, mely hat a felttelre, klnben vgtelen ciklus keletkezne. A htultesztel ciklus feltteleknt a kilpsi felttelt kell megadni! A htultesztel ciklusban tbb utastst hasznlva sincs szksg Begin End szerkezetre. Ciklusok talaktsa Amennyiben az algoritmusban megfogalmazott ciklus az adott programozsi nyelvben nem ltezik, az algoritmus talaktsval kdolhatv vlik. A kvetkez tblzat erre mu-tat egy pldt.

    Itercik (ciklusok) talaktsa egy plda alapjn ALGORITMUS TURBO PASCAL KD kiindul feladat: szmll ciklus ciklus i:=N-tl 1-ig 2-vel utastsok ciklus vge

    nem valsthat meg turbo pascalban szmll ciklussal, csak elltesztelvel

    elltesztel ciklussal: i:=N ciklus amg i>=1 utastsok i:=i-2 ciklus vge

    i:=N; while i>=1 do Begin utastsok; i:=i-2; End;

    htultesztel ciklussal: Ha N>=i akkor Ciklus utastsok i:=i-2 amg i>=1 ciklus vge Elgazs vge

    if N>=i then Repeat utastsok; i:=i-2; until i

  • 4.2. trsi szablyok 4. Kdols

    40

    Figyelem! Turbo Pascalban a deklarcinl a formlis paramtereket pontosvesszvel kell elvlasztani, de a meghvsnl az aktulis paramtereket vesszvel!

    4.2.9. Beolvass s kivitel

    Beolvass billentyzetrl, kirs monitorra ALGORITMUS TURBO PASCAL KD Kirs: Ki: azonostk [formtum megktsek]

    Write(kifejezsek); (*kifejezsek vesszvel elvlasztva*) (* a kurzor az aktulis helyen marad *) WriteLn(kifejezsek); (* a kurzor a kv. sor elejre kerl *) A formtum megktssel most nem foglalkozunk.

    Beolvass: Be: azonostk [felttelek]

    ReadLn(azonostk); Read(atonostk); (* vgn kell ENTER *) elegnsabb egyesvel, tjkoztatssal: Write(Adja meg rtkt: ; ReadLn(azonost); A beolvassi felttelekkel most nem foglalkozunk.

    Alkalmazsi plda: Var a: string; i: integer; Writeln(Adja meg a szveget, s egsz szmot ENTER-rel zrva); ReadLn(a,i); WriteLn(a,i);

    Gyakran ellenrizni kell, hogy a beolvasott rtk egy adott tartomnyban van-e. Ennek megvalstsa: Repeat Write(Adjon meg egy szmot 1 s 10 kztt: ); ReadLn(i); until (i>=0) and (i

  • 4. Kdols 4.3. Aritmetikai mveletek

    41

    4.3. Aritmetikai mveletek Jel Jelents Plda + pozitv eljel +a - negatv eljel -a + sszeads a+b - kivns a-b * szorzs a*b / (vals) oszts a/b div (egsz) oszts a div b mod (egsz) oszts maradka a mod b

    4.4. Relcis mveletek A mveletek eredmnye logikai tpus. Jel Jelents Plda = egyenl a=b nem egyenl ab < kisebb a nagyobb a>b =b

    4.5. Logikai mveletek Egyvltozs logikai opertorok

    NOT bitenknti negls (egyes komplemens) SHL bitenknti balra tols SHR bitenknti jobbra tols

    Ktvltozs logikai opertorok

    AND bitenknti s (igaz, ha mindkt operandus igaz) OR bitenknti vagy (igaz, ha valamelyik operandus igaz) XOR bitenknti kizr vagy (igaz, ha pontosan az egyik operandus igaz)

  • 4.6. Precedencik 4. Kdols

    42

    4.6. Precedencik A Turbo Pascal 7.0 a mveleteket az albbi prioritssal kezeli:

    Precedencia Mvelet Jele Plda 1. eljelvlts - -A tagads NOT NOT(A) 2. szorzs * A*B vals oszts / A/B egsz oszts DIV A DIV B maradkkpzs MOD A MOD B s AND A AND B 3. sszeads + A+B vivons - A-B vagy OR A OR B kizr vagy XOR A XOR B 4. egyenl (relci) = A = B nem egyenl A B kisebb < A < B nagyobb > A > B kisebb egyenl = B eleme (halmaznl) IN A IN B

    Az azonos priorits mveletek kirtkelse balrl jobbra trtnik. Termszetesen zrjel hasznlata esetn elszr a zrjeles kifejezs kerl kirtkelsre. Jl lthat, hogy a logi-kai mveletek magasabb prioritsak a relciknl, ezrt figyelni kell a zrjelezsre!

    4.7. Numerikus fggvnyek Kivonat a leggyakrabban hasznlt TP numerikus fggvnyekbl:

    Fggvny Jelents Megjegyzs ABS(X) X abszolt rtke az eredmny x-szel megegyez tpus ArcTan(X) X arkusztangense vals paramter, vals eredmny Cos(X) X koszinusza vals paramter, vals eredmny Exp(X) X par. e alap hatvnya vals paramter, vals eredmny Frac(X) X trtrsze X s az eredmny is vals Int(X) X egszrsze X s az eredmny is vals Ln(X) X 10-es alap logaritmusa X s az eredmny is vals Odd(X) X pratlan-e X egsz, eredmnye True, ha pratlan Pi a pi rtke vals Random vletlen szm [0,1) kztt vals Random(X) vletlen szm [0,X) kztt vals Randomize vl.genertor jraindtsa Csak egyszer hasznljuk! Round(X) X egszre kerektve az eredmny egsz Sin(X) X szimusza vals paramter, vals eredmny Sqr(X) X ngyzete az eredmny x-szel megegyez tpus Sqrt(X) X ngyzetgyke X s az eredmny is vals Trunc(X) X egszrsze az eredmny egsz (levgva)

  • 4. Kdols 4.8. Sorszmozott tpus eljrsai, fggvnyei

    43

    4.8. Sorszmozott tpus eljrsai, fggvnyei Kivonat a TP kizrlag sorszmozott tpusaira hasznlhat eljrsaibl s fggvnyeibl:

    Eljrs Jelents Dec(X) X-et 1-gyel cskkenti (sorszmozott szmtpus) Dec(X,n) X-et n-nel cskenti (sorszmozott szmtpus). Inc(X) X-et 1-gyel nveli (sorszmozott szmtpus) Inc(X,n) X-et n-nel nveli (sorszmozott szmtpus).. Pred(X) X-be teszi az X-et megelz rtket. Succ(X) X-be teszi az X-et kvet rtket. Fggvny Jelents Ord(X) X sorszma (pldul karakternl az ASCII kdja). Chr(X) Az X ASCII kd karakter.

    4.9. Szvegkezel fggvnyek Kivonat a leggyakrabban hasznlt TP szvegkezel fggvnyekbl

    Eljrs Jelents Delete(szveg,index,darab) A szveg index-edik karaktertl db-nyi karaktert kivg. Insert(minta,szveg,index) A szveg index-edik karaktertl kezdve beszrja a mintt. Pos(minta,szveg) szvegben a minta hnyadik karaktertl tallhat meg 0, ha nem illeszthet a minta a szvegre. Str(szm:szlessg:tizedesek:szveg) A szmot szvegg alaktja a megadott mezszlessggel s tizedes jegy darabszmmal. A tizedesek szma elhagyhat. VAL(szveg,szmtpus_vltoz,hibakd) A szvegesen brzolt szmot a szmtpus_vltozba teszi, ha valamelyik pozcin hiba volt, akkor hibakdban jelzi. Fggvny Jelents Concat(S1,S2,) sszefztt szveggel tr vissza. Copy(szveg,index,db) A szveg index-edik karaktertl db-nyi karaktert tartalmaz szveget ad vissza. Length(S) A szveg karakterekben mr hosszval tr vissza. UpCase(karakter) A karaktert nagybetv alaktja termszetesen csak az angol abc betire mkdik.

  • 4.10. sszefoglals 4. Kdols

    44

    4.10. sszefoglals A fejezet els rszben megismertk a Neumann elv nyelvek jellemzit, utaltunk a Logo, mint automata-elv nyelv jellemzire is. Ezt kveten megismertk a mondatszer algo-ritmus elemek TP-ra trtn trsnak szablyait. gy gondolom, hogy hasznos lenne arrl a nhny oldalrl msolatot kszteni, hogy az els nhny program elksztsnl majd segtsgedre legyen. Ezt kveten a leggyakrabban hasznlatos mveleteket ismertk meg, majd a mveletek kirtkelsnek sorrendjt. sszegyjtttk a leggyakrabban hasznlt eljrsokat s fggvnyeket is. Ez a fejezet inkbb kziknyvknt hasznlhat a ksbbi feladatokhoz.

    4.11. Gyakorl feladatok Ksztsd el a msodik fejezetben lv mondatszer algoritmus ksztsre vonatkoz

    feladatok kdolst pascal nyelven! Prbld meg a mondatszer algoritmus lersrl szl fejezet vgn (18.oldal) lv

    feladatokat kdolni! Prbld meg kdolni a 22. oldalon lv folyamatbrs feladatokat (ha kell, eltte trj t

    mondatszer lersra)! Prbld meg kdolni a 24. oldalon lv struktogramos feladatokat (ha kell, eltte trj t

    mondatszer lersra)!

  • 5. A Turbo Pascal / Free Pascal krnyezet 5.1. Az els pascal program

    45

    5. A Turbo Pascal / Free Pascal krnyezet

    5.1. Az els pascal program Indtsuk el a Turbo Pascal 7.0 programot, s a kurzort a megjelen szerkeszt ablakban letve gpeljk be a kvetkez sorokat (a nyomtat festkhasznlatnak cskkentsre az alapbelltstl eltr sznkszletet hasznlok)!

    Nhny tancs: A sorok vgn ENTER-t tnk (ez nem szvegszerkesztsi feladat)! A programsorok behzst szkzkkel, vagy tabultorokkal vgezhetjk. Az utastsokat pontosvessz vlasztja el egymstl. A kisbet/nagybet hasznlata csak az olvashatsgot segti. Futtasuk le a programot (CTRL+F9)!

  • 5.2. Egyszer programok 5. A Turbo Pascal / Free Pascal krnyezet

    46

    Szinte hihetetlen, de elkszlt az els pascal program (szinte minden programozs tan-knyv ezzel a pldval kezdi, n sem akartam a szoksostl eltrni). Mentsk el a forrskdot! File/Save as, majd adjuk meg a nevet: elso (a pas kiterjesztst nem szksges megadni). Katttintsunk az OK-ra, vagy ssnk ENTER-t!

    gyeljnk arra, hogy a program ksztse kzben gyakran mentsnk (az els mentst k-veten mr elegend az F2 gyorsbillentyt hasznlni)!

    5.2. Egyszer programok Ebben a rszben nhny egyszer, de komplett programot ksztnk. 5.2.1. feladat: Eljel szveges kirsa Ksztsnk programot, amelyik beolvas egy egsz szmot, s szvegesen kirja, hogy a beolvasott szm negatv, nulla, vagy pozitv. Az algoritmust mr elksztettk a sokg elgazsok trgyalsnl, csupn a beolvasssal kell kiegszteni. ALGORITMUS TURBO PASCAL KD Program eljel: Vltoz i:egsz Be: i Ha i>0 akkor Ki: Pozitv. klnben Ha i=0 akkor Ki: Nulla. klnben Ki: NegatvProgram vge.

    Program elojel; uses crt; Var i:Integer; Begin Write(Adj meg egy egsz szmot: ); ReadLn(i); If i>0 then WriteLn(Pozitv.) else If i=0 then WriteLn(Nulla.) else WriteLn(Negatv.); End.

    A pldbl ltszik, hogy az algoritmust sorrl-sorra tkdoltuk, csupn a beszdesebb be-olvassnl alkalmaztunk a programban eltr viselkedst.

  • 5. A Turbo Pascal / Free Pascal krnyezet 5.2. Egyszer programok

    47

    Gpeljk be a kdot a Turbo Pascal szerkeszt ablakba, s mentsk el elojel.pas nven! Egsztsk ki a kdot a kpernytrlssel (ClrScr), s a vgn egy gombnyomsra vrs-sal: Repeat until KeyPressed; (gy nem kell a kimeneti ab