Bevezetes a Programozasba-Konyv

download Bevezetes a Programozasba-Konyv

of 194

Transcript of Bevezetes a Programozasba-Konyv

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    1/194

    FTHI KOS

    BEVEZETS

    A

    PROGRAMOZSHOZ

    ELTE Etvs Kiad

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    2/194

    cFthi kos, 2005

    Lektor: Hunyadvri Lszl

    Nyelvileg lektorlta: Hunyady Andrs

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    3/194

    Tartalomjegyzk

    1. Alapfogalmak 91.1. Halmazok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2. Sorozatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.3. Relcik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.3.1. Muveletek . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.3.2. Logikai relcik . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.4. Direktszorzat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.5. Fggvnyterek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.6. Pldk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.7. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    2. A programozs alapfogalmai 252.1. Az llapottr fogalma . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2. A feladat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.3. A program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    2.4. A programfggvny . . . . . . . . . . . . . . . . . . . . . . . . . . 282.5. Megolds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.6. Programozsi feladat . . . . . . . . . . . . . . . . . . . . . . . . . . 302.7. Pldk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.8. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    3. Specifikci 353.1. A leggyengbb elofelttel . . . . . . . . . . . . . . . . . . . . . . . 353.2. A feladat specifikcija . . . . . . . . . . . . . . . . . . . . . . . . . 373.3. A vltoz fogalma . . . . . . . . . . . . . . . . . . . . . . . . . . . 383.4. Pldk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.5. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    4. Kiterjesztsek 474.1. A feladat kiterjesztse . . . . . . . . . . . . . . . . . . . . . . . . . 474.2. A program kiterjesztse . . . . . . . . . . . . . . . . . . . . . . . . 474.3. Kiterjesztsi ttelek . . . . . . . . . . . . . . . . . . . . . . . . . . . 494.4. A feladat kiterjesztse s a specifikci ttele . . . . . . . . . . . . . 544.5. A paramtertr kiterjesztse . . . . . . . . . . . . . . . . . . . . . . 544.6. Pldk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554.7. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    1

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    4/194

    2 TARTALOMJEGYZK

    5. A megolds fogalmnak ltalnostsa 575.1. A megolds fogalmnak kiterjesztse . . . . . . . . . . . . . . . . . 575.2. Megolds ekvivalens llapottren . . . . . . . . . . . . . . . . . . . 58

    5.3. Relci szerinti megolds . . . . . . . . . . . . . . . . . . . . . . . 586. Programkonstrukcik 61

    6.1. Megengedett konstrukcik . . . . . . . . . . . . . . . . . . . . . . . 616.2. A programkonstrukcik programfggvnye . . . . . . . . . . . . . . 666.3. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

    7. Levezetsi szablyok 717.1. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    8. Elemi programok 798.1. Elemi programok . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798.2. Elemi programok leggyengbb elofelttele . . . . . . . . . . . . . . 81

    8.3. Az rtkads mint feladatspecifikci . . . . . . . . . . . . . . . . . 828.4. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

    9. A programkonstrukcik s a kiszmthatsg 859.1. Parcilisan rekurzv fggvnyek . . . . . . . . . . . . . . . . . . . . 859.2. A parcilis rekurzv fggvnyek kiszmtsa . . . . . . . . . . . . . 869.3. Relcik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

    10. A tpus 9310.1. A tpusspecifikci . . . . . . . . . . . . . . . . . . . . . . . . . . . 9310.2. A tpus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9310.3. A tpusspecifikci ttele . . . . . . . . . . . . . . . . . . . . . . . . 9510.4. Absztrakt tpus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    10.5. Pldk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9710.6. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    11. Tpuskonstrukcik 10311.1. A megengedett konstrukcik . . . . . . . . . . . . . . . . . . . . . . 10311.2. Szelektorfggvnyek . . . . . . . . . . . . . . . . . . . . . . . . . . 10611.3. Az iterlt specifikcis fggvnyei . . . . . . . . . . . . . . . . . . . 10711.4. A fggvnytpus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10811.5. A tpuskonstrukcik tpusmuveletei . . . . . . . . . . . . . . . . . . 109

    12. Programozsi ttelek (Levezets) 11312.1. Programozsi ttelek intervallumon . . . . . . . . . . . . . . . . . . 113

    12.1.1. sszegzs . . . . . . . . . . . . . . . . . . . . . . . . . . . 11512.1.2. Szmlls . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11612.1.3. Maximumkeress . . . . . . . . . . . . . . . . . . . . . . . 11712.1.4. Feltteles maximumkeress . . . . . . . . . . . . . . . . . . 11812.1.5. Lineris keress . . . . . . . . . . . . . . . . . . . . . . . . 119

    12.2. Ttelek felttelig vltozata . . . . . . . . . . . . . . . . . . . . . 11912.2.1. sszegzs felttelig . . . . . . . . . . . . . . . . . . . . . . 12112.2.2. Szmlls felttelig . . . . . . . . . . . . . . . . . . . . . . 12112.2.3. Maximumkeress felttelig . . . . . . . . . . . . . . . . . . 12212.2.4. Feltteles maximumkeress felttelig . . . . . . . . . . . . . 122

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    5/194

    TARTALOMJEGYZK 3

    12.2.5. Lineris keress . . . . . . . . . . . . . . . . . . . . . . . . 12312.2.6. Ttelek mskppen . . . . . . . . . . . . . . . . . . . . . . . 125

    12.3. Bonyolultabb feladatok . . . . . . . . . . . . . . . . . . . . . . . . . 126

    12.3.1. Logaritmikus keress . . . . . . . . . . . . . . . . . . . . . . 12612.3.2. Visszalpses keress . . . . . . . . . . . . . . . . . . . . . 12712.3.3. Visszalpses szmlls . . . . . . . . . . . . . . . . . . . . 131

    12.4. Fggvnyrtk kiszmtsa . . . . . . . . . . . . . . . . . . . . . . . 13212.4.1. Fggvnykompozcival adott fggvny

    kiszmtsa . . . . . . . . . . . . . . . . . . . . . . . . . . . 13212.4.2. Esetsztvlasztssal adott fggvny kiszmtsa . . . . . . . 13212.4.3. Rekurzv formulval adott fggvny kiszmtsa . . . . . . . 13312.4.4. Elemenknt feldolgozhat fggvny . . . . . . . . . . . . . . 134

    12.5. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

    13. Transzformcik 14113.1. Visszavezets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

    13.2. Egyszeru programtranszformcik . . . . . . . . . . . . . . . . . . . 14213.3. Tpustranszformcik . . . . . . . . . . . . . . . . . . . . . . . . . . 14513.4. llapottr-transzformci . . . . . . . . . . . . . . . . . . . . . . . 149

    13.4.1. Szekvencilis megfelelo . . . . . . . . . . . . . . . . . . . . 14913.5. Plda llapottr-transzformcira . . . . . . . . . . . . . . . . . . . 15013.6. Programinverzi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

    13.6.1. Egyvltozs eset . . . . . . . . . . . . . . . . . . . . . . . . 15213.6.2. Ktvltozs eset . . . . . . . . . . . . . . . . . . . . . . . . 154

    13.7. Pldk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15613.8. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

    14. Absztrakcis stratgia 17114.1. Az idoszerusts defincija . . . . . . . . . . . . . . . . . . . . . . 17214.2. Idoszerusts egyrtelmu mdostfjllal . . . . . . . . . . . . . . . . 174

    14.2.1. Visszavezets halmazok unijra . . . . . . . . . . . . . . . 17414.2.2. Visszavezets egyvltozs elemenknti feldolgozsra . . . . . 17714.2.3. Visszavezets ktvltozs elemenknti feldolgozsra . . . . . 178

    14.3. Idoszerusts nem egyrtelmu mdostfjllal . . . . . . . . . . . . . 17914.3.1. Megolds adatabsztrakcival . . . . . . . . . . . . . . . . . 17914.3.2. Megolds fggvnyabsztrakcival . . . . . . . . . . . . . . . 181

    14.4. Feladatok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186

    Trgymutat 189

    Irodalomjegyzk 191

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    6/194

    4 TARTALOMJEGYZK

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    7/194

    Bevezets

    A knyvben ismertetett programozsi modell megfogalmazsnak elsodleges clja azvolt, hogy elmleti htteret adjon a lpsenknti finomts mdszerhez az algoritmu-sok s az adatszerkezetek vonatkozsban egyarnt. Idokzben ezen sikerlt jelentosentllpni, s a jelenlegi legfontosabb cl a tudatos programozs tmogatsa.

    Br a modell eszkzei segtsgvel a feladat specifikcijt helyettesteni tudjukolyan feladatok specifikciival, amely feladatok megoldsa esetn a rendelkezsre llmatematikai eszkzkkel belthat az eredeti feladat megoldsnak helyessge, nemclunk az automatikus programszintzis, ezrt nem fordultunk a formlis eszkzk,mdszerek fel.

    A programnyelvek, programok vizsglata, helyessgk bizonytsa mr tbb mintnegyven vre nylik vissza, sot nhny fontos eredmny ennl is rgebbi. Maga a prog-ramozs is nagyon hamar a vizsglatok trgyv vlt, mind elmleti, mind gyakorlatiszempontbl. Itt csak utalunk a relcis modell szmunkra legfontosabb elozmnyeire,s megprbljuk elhelyezni a vlemnynk szerint legjelentosebb irnyzatok kztt.

    Elozmnyek

    A bemutatott modell ngy fontos elozmnyre pt. Dijkstra programozsidiszciplnj-ra [Dij 76], Hoare tpuskezelsre [Hoa 72], Jackson programtervezsimdszerre [Jac 75] s Mills matematikai megkzeltsre [Mills 72].

    A 60-as vekben kibontakoz, szoftverkrzisnek nevezett jelensg jelentoslendletet adott a programozssal kapcsolatos kutatsoknak. Ezeknek szinte szim-blumv vlt Dijkstra nevezetes cikke [Dij 68], s a programnyelvek ltal a kezdetekta tmogatott modulris programozs mellett vagy inkbb utn a strukturlt progra-mozsnak nevezett irnyzat kiindul pontja lett.

    Az ltala bevezetett fogalmakra, mdszerekre [Dij 76] nagyon sokan ptettek, gya relcis modellnk is. Szmunkra legfontosabbak a leggyengbb elofelttel, a leve-zetsi szablyok, a nemdeterminisztikussg, az llapottr, a Dikstra ltal hasznlt, brHoare-tl szrmaz [Hoa 72] elo- s utfelttellel trtno specifikci.

    Habr Dijkstra ebben a knyvben logikai jellegu megoldsokat hasznlt, nemtrekedett szigor formalizlsra, ezt rvid idon bell nagyon sok cikk s knyv[Gri 81] megtette. A formalizls legtbbszr logikai eszkzkkel trtnt, aminekkvetkeztben httrbe szorult az llapottr fogalma s a leggyengbb elofeltteltprediktum-transzformtorknt kezeltk.

    Jelentosen befolysolta a relcis modellnk kialaktst Mills [Mills 72] matema-tikai megkzeltsi mdja. A programfggvny fogalma, a fggvny lezrtjnak s aciklusnak a kapcsolata, a memria modellezse az, amit elsosorban figyelembe vettnk.A nemdeterminisztikussg kezelsre kzenfekvo megolds volt a relcik hasznlata.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    8/194

    6 TARTALOMJEGYZK

    A programozs problminak ms jellegu megkzeltst adta Jackson [Jac 75],ami a napjainkban flformlisnak nevezett mdszerek egyik osnek tekintheto, sa gyakorlatban sokszor alkalmaztk. Ezeket a programtervezsi mdszereket is

    igyekeztnk kezelhetov tenni a relcis modellben.

    Programozsi paradigmk

    A jelenlegi fo programozsi irnyzatok kt nagy csoportba sorolhatk. Az egyikbe tar-toznak a formlis mdszerek, amelyeknek az alapja egy-egy formlis matematikai disz-ciplna.

    A kalkuluson, illetve annak kiterjesztsein alapul a funkcionlis paradigma. Anagy megbzhatsg, bonyolult feladatokat megold programok irnti igny s a ren-delkezsre ll eroforrsok hihetetlen nvekedse miatt a funkcionlis megkzeltsmr nem elmleti, hanem elsosorban gyakorlati jelentosgu.

    A logikai alap programozs (modellezs) klnsen a logika klnbzo kiter-

    jesztsei, pl. temporlis logika kvetkeztben sok ltalnos s specilis rendszerkeretben jelenik meg.

    Figyelemre mlt karriert fut be a B-mdszer [Abr 96], ami Dijkstra s Hoareemltett munkin alapul. Az absztrakt gp fogalmra pl, s a ZermeloFraenkel axi-omkon alapul B nyelvet hasznlja a rendszerkszts minden fzisban.

    A msik nagy csoportba tartoznak az gynevezett flformlis rendszerek. Ezekltalban az objektumelvu modellalkots tmogati, mint pl. az UML, de ide sorol-hatjuk a tervmintaalap tervezst [GHJV 95] is, ami a klasszikus eljrsknyvtr l-talnostsnak is tekintheto. Ezeknek a rendszereknek lnyeges gyakorlati eleme akd-jrafelhasznls, amit szintn az eroforrs-nvekeds tesz lehetov.

    A relcis modellt az elso csoporthoz a levezets, a msodikhoz a visszavezetsfogalma kapcsolja.

    A legjabb irnyzatok kz tartoznak a multiparadigmlis megkzeltsek[Bud 95], amikor a mdszer alapja nem egyetlen absztrahl fogalom, illetve abszt-rakcis stratgia. Ebbe a csoportba soroljuk relcis modellnket is, de mi nem azeszkzkkel, hanem a mgttk levo elmleti sszefggsekkel foglalkozunk.

    Az egyes fejezetekrol

    Az elso rszben sszefoglaljuk a knyvben felhasznlt legfontosabb matematikai fo-galmakat, jellseket, s bevezetnk a relcikkal kapcsolatban nhny specilis fogal-mat.

    A kvetkezo kt rszben bevezetjk a relcialap modell alapfogalmait: llapottr,feladat, program, megolds. Megadjuk a megolds egy elgsges felttelt, a gyakor-

    lati szempontbl is fontos specifikci ttelt, ehhez felhasznljuk a vltoz s a leg-gyengbb elofelttel fogalmt.

    A 4. s az 5. fejezetben ltalnostjuk az eddig bevezetett fogalmakat. E fejezetekjelentosge elsosorban elmleti. Elso olvassra kihagyhatk.

    A kvetkezo hrom rszben a szoksos szekvencilis programkonstrukcikatvezetjk be, s megfogalmazunk nhny velk kapcsolatos, a lpsenknti finomtsszempontjbl hasznos ttelt.

    A 9. fejezet szintn elmleti szempontbl rdekes, s nem szksges a tovbbiakmegrtshez.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    9/194

    TARTALOMJEGYZK 7

    Ezutn a programozs legfontosabb fogalmval, a tpussal foglalkozunk a 10. sa 11. fejezetben. A tpussal kapcsolatos fogalmak nemcsak fontosak, hanem elg bo-nyolultak is. Elso olvassra nem is kell trekedni alapos megismerskre. Clszeru az

    egsz knyv vgigolvassa utn visszatrni ezekre a fejezetekre.A kvetkezo hrom fejezetben azt mutatjuk meg, hogyan lehet gyakorlati progra-mozsi feladatokat megoldani. A 12. fejezetben a levezetsi szablyok alkalmazsval,a feladatot lpsenknt finomtva jutunk el a bizonytottan helyes megold programhoz.A 13. fejezetben a visszavezetst mutatjuk be, azaz meglvo megoldsokat, ttelekethasznlunk fel. A 14. fejezetben egy sszetettebb feladatot oldunk meg klnbzo m-dokon.

    Az utols rszben a fejezetek vgn szereplo feladatok megoldshoz adunk tmu-tatt, sot sok esetben megadunk egy lehetsges megoldst is.

    Ksznetnyilvnts

    Ez a knyv az Etvs Lornd Tudomnyegyetemen a programtervezo matematikusokszmra tartott eloadsaim alapjn kszlt. A tbb mint hsz ve megjelent jegyzethezkpest sok minden vltozott. Ez alatt az ido alatt sok volt s jelenlegi kollgm vettrszt e trgy oktatsban, s segtette fejlodst. A hsz v alatt tbb ezer hallgatvaltallkoztam ezen eloadsok kapcsn, az o negatv s nha pozitv vlemnyk is soksegtsget jelentett nekem.

    Jelenlegi s volt kollgim: Fekete Istvn, Gregorics Tibor, Horvth Zoltn,Konczn Nagy Mrta, Kozics Sndor, Kozsik Tams, Nykyn Gaizler Judit, Sike Sn-dor, Steingart Ferenc, Szabn Nacsa Rozlia, Toke Pl, Varga Zoltn, Vargyas Mikls,Venczel Tibor segtsgrt ksznettel tartozom.

    Kln ksznm Steingart Ferencnek azt a nagy munkt, amit a knyv elso elekt-ronikus jegyzet vltozatnak elksztsvel vgzett, nlkle nem vgtam volna beleennek a knyvnek a megrsba.

    Ksznm Bozsik Jzsef, Kovcs Pter, Risk Gergely s Sztupk Szilrd Zsolthallgatknak, hogy elksztettk a feladatok megoldst. Kovcs Pter Bozsik Jzsefsegtsgvel a 15.1.15.8., Risk Gergely a 15.9. s 15.11., Sztupk Szilrd Zsolt a15.10. rsz megoldsait ksztette el.

    Ksznm Hunyadvri Lszl gondos lektori munkjt, rengeteg hasznosszrevtelt.

    Ajnls

    Ajnlom e knyvet elsosorban a programtervezo matematikus, programtervezo infor-matikus hallgatknak. Ajnlom azoknak is, akik programozssal foglalkoznak, szeretik

    a kihvsokat s nyitottak. Ez a knyv nem knnyu olvasmny s nem is hasznos is-meretek, receptek gyujtemnye, de aki figyelmesen, gondolkodva elolvassa, valszn-leg ms szemmel fogja ltni az eddigi munkjt is.

    A jrt t biztonsga helyett ajnlom a jratlan t izgalmt s remnyt.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    10/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    11/194

    1. fejezet

    Alapfogalmak

    Ebben a rszben bevezetjk azokat a jellseket s alapveto defincikat, amelyeket a

    tovbbiakban gyakran fogunk hasznlni. Ezek legnagyobb rsze kzpiskolbl vagybevezeto jellegu matematikai tanulmnyokbl ismert.

    1.1. Halmazok

    Eloszr bevezetjk a matematikban gyakran hasznlt halmazok jellseit.

    N a termszetes szmok halmaza,N0 a nemnegatv egszek halmaza,Z az egsz szmok halmaza,L a logikai rtkek halmaza, az res halmaz.

    Szoks a termszetes szmok halmazba a nullt is belerteni, de ebben a knyvbenerre kln jellst (N0) hasznlunk.

    A halmazokat gyakran vagy az elemeik felsorolsval

    L ::= {igaz, hamis},vagy egy tulajdonsg megfogalmazsval

    [a..b] ::= {x Z | x a s x b}adjuk meg.

    Termszetesen hasznlni fogjuk a matematikban megszokott halmazelmletimuveleteket

    uni, metszet,\ klnbsg

    s relcikat is eleme, rszhalmaza, valdi rsze.

    Egy H halmaz szmossgt |H|jelli. Azt, hogy egy H halmaz vges, nha gy isrjuk: |H| < .

    9

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    12/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    13/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    14/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    15/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    16/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    17/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    18/194

    16 1. ALAPFOGALMAK

    Az implikci jellsre gyakran hasznljk a jelet a helyett, mi az elobbit akvetkezik relci jellsre hasznljuk, azaz

    p q p q.Megjegyezzk, hogy p q s p q = Igaz ugyanazt jelenti.

    A s a jeleket eddig is hasznlatuk mint a minden s ltezik szavak rvidt-seit. A fenti logikai kifejezsek esetn i I : jelentseiI , s i I :

    jelentseiI . Ha I = ,iI azonosan igaz,iI pedig azonosan hamis.

    1.6. Pldk

    1.1. plda: rjuk fel az A

    B, A

    C, (A

    B)

    C, s A

    B

    Chalmazok elemeit,

    ha A = {0, 1}, B = {1, 2, 3}, C = {p, q}!Megolds:

    A B={(0, 1), (0, 2), (0, 3), (1, 1), (1, 2), (1, 3)},A C={(0, p), (0, q), (1, p), (1, q)},

    (A B) C={((0, 1), p), ((0, 2), p), ((0, 3), p), ((1, 1), p), ((1, 2), p), ((1, 3), p),((0, 1), q), ((0, 2), q), ((0, 3), q), ((1, 1), q), ((1, 2), q), ((1, 3), q)},

    A B C={(0, 1, p), (0, 2, p), (0, 3, p), (1, 1, p), (1, 2, p), (1, 3, p),(0, 1, q), (0, 2, q), (0, 3, q), (1, 1, q), (1, 2, q), (1, 3, q)i}.

    1.2. plda: Legyen R {1, 2, 3, 4, 5} {1, 2, 3, 4, 5}.

    R = {(1, 2), (1, 4), (2, 1), (3, 4), (3, 3), (3, 5), (4, 5)}.

    a) Mi a relci rtelmezsi tartomnya s rtkkszlete?

    b) Determinisztikus-e, illetve fggvny-e a relci?

    c) Mi R 0., 2. hatvnya, mi R inverze?

    d) Mi a {4, 5} halmaz inverz kpe, illetve oskpe?e) Hny eleme van R rtkkszlete hatvnyhalmaznak?

    Megolds:

    a)DR =

    {1, 2, 3, 4

    },

    RR = {1, 2, 3, 4, 5}.

    b) A relci nem determinisztikus, ugyanis pl. |R(1)| = 2! Mivel a relci nem deter-minisztikus, fggvny sem lehet.

    c) A relci 0. hatvnya az identikus lekpezs, azaz:

    R0 = {(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)}.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    19/194

    1.6. PLDK 17

    Mivel R2 = R R, azt kell megvizsglnunk, hogy mely pontokbl hogyan lehet arelcit egyms utn ktszer alkalmazni:

    (1, 2)

    (2, 1)

    (1, 4) (4, 5)(2, 1) (1, 2)(2, 1) (1, 4)(3, 4) (4, 5)(3, 3) (3, 4)(3, 3) (3, 3)(3, 3) (3, 5)

    A fenti tblzat alapjn:

    R2 =

    {(1, 1), (1, 5), (2, 2), (2, 4), (3, 5), (3, 4), (3, 3)

    }.

    R(1) a relci inverznek defincija alapjn:

    R = {(2, 1), (4, 1), (1, 2), (4, 3), (3, 3), (5, 3), (5, 4)}.

    d) rjuk fel, hogy mit rendel a relci az rtelmezsi tartomny egyes pontjaihoz:

    R(1) = {2, 4}R(2) = {1}R(3) = {3, 4, 5}R(4) = {5}

    Az inverz kp defincija alapjn:R(1)({4, 5}) = {1, 3, 4}.

    Az oskp defincija alapjn:

    R1({4, 5}) = {4}.

    e) |(RR)| = 2|RR| = 25 = 32.

    1.3. plda: Megadhat-e valamilyen sszefggs egy H halmaz inverz kpnek kpes a H halmaz kztt?Megolds:

    Legyen R A B, H B. EkkorR(R(1)(H)) = R({a A | R(a) H = }) =

    =

    R(a)H=

    R(a).

    Vegyk szre, hogy ltalnos esetben nem tudunk mondani semmit a kt halmaz viszo-nyrl, ugyanis

    1. ha H RR, akkor H R(R(1)(H)), s

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    20/194

    18 1. ALAPFOGALMAK

    2. ha a R(1)(H) : R(a) H, akkor R(R(1)(H)) H.Tekintsk e fenti esetet egy egyszeru pldn: Legyen A = B = {1, 2, 3}, R =

    {(1, 1), (1, 2)

    }. Ekkor H =

    {2, 3

    }esetn R(R(1)(H)) =

    {1, 2

    }, azaz egyik irny

    tartalmazs sem ll fenn.

    1.4. plda: Legyen R AB, P, Q B. Hogyan lehetne jellemezni az R1(P Q)s az R1(P Q) halmazt az R1(P) s R1(Q) halmaz segtsgvel?Megolds:

    R1(P Q) = {a DR | R(a) (P Q)} {a DR | R(a) P} {a DR | R(a) Q}.

    A msik irny tartalmazs azonban nem ll fenn, ugyanis lehet olyan a DR, amelyreR(a) P, s R(a) Q, de R(a) P Q.

    Nzzk ezt egy pldn: Legyen A = B =

    {1, 2

    }, R =

    {(1, 1), (1, 2)

    }, P =

    {1

    },

    Q = {2}. Ekkor R1(P) s R1(Q) res, de R1(P Q) = {1}.Vizsgljuk most meg a metszetet!

    R1(P Q) = {a DR | R(a) (P Q)}= {a DR | R(a) P} {a DR | R(a) Q}= R1(P) R1(Q).

    Teht bebizonytottuk, hogy kt tetszoleges halmaz metszetnek oskpe egyenlo a kthalmaz oskpnek metszetvel.

    1.5. plda: Legyenek F A B, G B C. Igaz-e, hogy(G F)(1) = F(1) G(1)?

    Megolds:

    (G F)(1) = {(c, a) C A | b B : (a, b) F s (b, c) G}= {(c, a) C A | b B : (b, a) F(1) s (c, b) G(1)}= F(1) G(1).

    1.6. plda: Legyenek F A B, G B C. Igaz-e, hogyY C : (G F)1(Y) = F1(G1(Y))?

    Megolds:A szigor kompozci defincijbl azonnal addik, hogy ha a A sa DGF, akkor G F(a) = G(F(a)), ezt felhasznlva:(G F)1(Y) = {a A | a DFG s (G F)(a) Y}

    = {a A | a DF s F(a) DG s G(F(a)) Y}= {a A | a DF s F(a) {b B | b DG s G(b) Y}}= F1(G1(Y)).

    1.7. plda: W = N1 N2 N3. W, ahol Ni = N (i = 1, 2, 3). 1 = (1, 1, 1).Az sorozat tovbbi elemeit gy kapjuk meg, hogy a pontok koordintit az elsokoordintval kezdve ciklikusan 1-gyel nveljk. red(prN1N3()) =?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    21/194

    1.6. PLDK 19

    Megolds:rjuk fel eloszr a sorozat elso nhny tagjt:

    =< (1, 1, 1), (2, 1, 1), (2, 2, 1), (2, 2, 2), (3, 2, 2), (3, 3, 2)

    >

    Az sorozat projekcija N1 N3-ra:prN1N3() =< (1, 1), (2, 1), (2, 1), (2, 2), (3, 2), (3, 2) >

    A fenti sorozat redukltja:

    red(prN1N3()) =< (1, 1), (2, 1), (2, 2), (3, 2) >A fentiekbol jl lthat, hogy a redukci pontosan azokat az elemeket hagyjaki a sorozatbl, amelyekben a nvels a msodik komponensben trtnt, gy azeredmnysorozat elemeit is a koordintk ciklikus eggyel nvelsvel kapjuk meg, az(1, 1) pontbl kiindulva.

    1.8. plda: Legyen A ={

    1, 2, 3, 4, 5}

    s R

    A

    A. R ={(1, 2), (1, 4), (2, 1), (3, 4), (3, 3), (3, 5), (4, 5)}. Mi lesz R lezrtja s korltoslezrtja?Megolds:

    Mivel DR = {1, 2, 3, 4}, azt kell csak megvizsglni, hogy honnan jutunk el biz-tosan a relci ismtelt alkalmazsval 5-be. R(1) = {2, 4} s R(2) = {1}, ezrt1, 2 / DR, a 3 sem, mert a 3-bl akrhnyszor eljuthatunk 3-ba, 4-bol egy lpsben,5-bol nulla lpsben jutunk 5-be. Teht R = {(4, 5), (5, 5)} s R = R.1.9. plda:

    A = {1, 2, 3, 4, 5}, R A A. R = {(1, 2), (1, 5), (2, 5), (3, 2), (3, 4), (5, 2)}. = {1, 2, 3, 4}. rjuk fel a relci felttelre vonatkoz lezrtjt!Megolds:

    R| = {(1, 2), (1, 5), (2, 5), (3, 2), (3, 4), (4, 4)}. Az (5, 2) kimaradt a szukts mi-att, a (4, 4) pedig bekerlt a bovts miatt. R| = {(1, 5), (2, 5), (5, 5)}.1.10. plda: Van-e olyan nem res relci s felttel, hogy a relci lezrtja reshalmaz, s a felttelre vonatkoz lezrtja azonos a relcival?Megolds:

    Legyen A tetszoleges halmaz. Nyilvn idA = . Ha = Hamis, idA| = ,aminek a lezrtja idA.

    1.11. plda: R N0 N0.

    R(a) =

    {a 2}, ha a > 1;{2k | k N}, ha a = 1.

    Mi az R relci lezrtja s korltos lezrtja?Megolds:

    DR = N. Minden a-hoz, ha a pros, a relci a/2 lpsben hozzrendeli a 0-ts csak azt, ha pedig pratlan, az 1-et, aminek a kpe az sszes pros kettohatvny.A kettohatvnyokbl, mivel mind pros, az R ismtelt alkalmazsa 0-ba vezet. TehtDR = N0, s termszetesen a N0 : R(a) = 0.

    Mivel nincs felso korltja a kettohatvnyoknak, ezrt DR

    nem tartalmazza a prat-lan szmokat.

    Megjegyezzk, hogy ha a feladatban {2k | k N} helyett {2k | k N0} szere-pelne, DR sem tartalmazn a pratlan szmokat.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    22/194

    20 1. ALAPFOGALMAK

    1.7. Feladatok

    1.1. Legalbb, illetve legfeljebb hny eleme van egy m elemu s egy n elemu halmaz

    metszetnek; egyestsnek; Descartes-szorzatnak; klnbsgnek?

    1.2. Bizonytsa be, hogy H A B esetn ((a, b), (c, d) H : (a, d) H) (K A : L B : H =

    K L); ha H nem res, akkor K s L egyrtelmu.

    1.3. R A B. Mivel egyenlo R1(B)?1.4. R = {((x, y), (x + y, y)) | x, y N}. Mi a H = {(a, b) | a, b N s a + b < 5}

    halmaz inverz kpe, illetve oskpe?

    1.5. R = {((x, y), (x + y, y)) | x, y N} {((x, y), (x y, y)) | x, y N}. Mi aH = {(a, b) | a, b N s a + b < 5} halmaz inverz kpe, illetve oskpe?

    1.6. R = {((x, y), (f(x, y), y)) | x, y N}, ahol f : N N N. Mi a H ={(a, b) | a, b N s a + b < 5} halmaz oskpe, illetve inverz kpe?

    1.7. R A B, Q B. Van-e valamilyen sszefggs az R1(B \ Q) halmaz saz A \ (R1(Q)) halmaz kztt?

    1.8. Ksztsen olyan nem res relcit, amelyre igaz, hogy rtkkszlete mindenvaldi rszhalmaznak oskpe res halmaz!

    1.9. Legyen F, G N N, Y = {1, 2}. F = {(a, b) | b|a s b = 1 s b = a}.G = {(a, b) | 2|a s a = 2b}.

    G F =? G F =?F(1) G(1) =? F1(G1(Y)) =?(G F)1(Y) =? (G F)(1) =?

    1.10. Legyen A = {1, 2, 3, 4, 5}, R A A, R = {(1, 2), (1, 4), (2, 1), (3, 4), (3, 3),(3, 5), (4, 5)}, f AL s f = {(1, i), (2, i), (3, i), (4, h), (5, i)}. Mi f, illetve(f R) igazsghalmaza s gyenge igazsghalmaza?

    1.11. R, Q A A. Igaz-e, hogy (R Q)(1) = Q(1) R(1)?1.12. F A B, G B C. Igaz-e, hogy Y C : (G F)1(Y) =

    F1(G1(Y)). Igaz-e az llts, ha G vagy F fggvny?

    1.13. F A B, G B C. Igaz-e, hogy (G F)(1) = F(1) G(1). Igaz-eaz llts, ha G vagy F fggvny?

    1.14. Mi az sszefggs kt relci kompozcijnak rtelmezsi tartomnya sugyanezen kt relci szigor rtelemben vett kompozcijnak rtelmezsi tar-tomnya kztt?

    1.15. Ksztsen olyan nem res R relcit s f logikai fggvnyt, hogy f Rigazsghalmaza res legyen!

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    23/194

    1.7. FELADATOK 21

    1.16. R A A. Igaz-e, hogy (R(1))2 = (R2)(1)?1.17. R A A. Igaz-e, hogy H A : R1(R1(H)) = (R2)1(H)?

    1.18. P, Q NN. Q = {(a, b) | 2|a s b|a s prim(b)}.a) P = {(a, b) | b|a s b = 1 s b = a}b) P = {(a, b) | b|a}Adja meg a Q(1), Q P s Q P-t relcit!

    1.19. H A B, G B C, F C D. Igazak-e az albbi lltsok?a) Ha a DGH DGH, akkor G H(a) = G H(a).b) DGH DGH.c) (a DH : |H(a)| = 1) G H = G H.

    d) DG = B G H = G H.1.20. Asszociativits: H A B, G B C, F C D. Igazak-e:

    (F G) H = F (G H),(F G) H = F (G H)?

    1.21. Legyen Q,R,S A A, s vezessk be az albbi jellst: ha X A Atetszoleges relci, akkor X komplementere:

    X = {(a, b) A A | (a, b) X}.Igaz-e, hogy

    Q R S Q(1)

    S R?Igaz-e a fenti llts nemszigor kompozci esetn?

    1.22. Legyen Q,R,S A A. Igaz-e, hogy

    R S R Q S Q,R S Q R Q S?

    1.23. Legyen R s Q kt relci a termszetes szmok halmazn! R egy termszetesszmhoz rendeli nmagt s a ktszerest, Q egy pros termszetes szmhoz afelt.

    a) rja fel a kt relcit, s addja meg az rtelmezsi tartomnyukat!

    b) rja fel az R relci k. hatvnyt (k 1) s ennek az rtelmezsi tartomnyt!c) rja fel a Q R relcit s annak rtelmezsi tartomnyt!d) F = Q R. rja fel az F relcit s az rtelmezsi tartomnyt!

    1.24. F A B, G B C. Igaz-e, hogy:a) DGF = F1(DG),b) DGF = F1(DG)?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    24/194

    22 1. ALAPFOGALMAK

    1.25. P N0 N0. P = {(a, b) | b|a s b = 1 s b = a}. Mi lesz P lezrtja skorltos lezrtja?

    1.26. RN

    N. R =

    {(a, b)

    |b

    |a s b

    = 1 s b

    = a

    }.

    =

    {x

    | k

    N0 : x =

    2k}. rjuk fel az R| relcit, lezrtjt s korltos lezrtjt!1.27. Adjunk pldt olyan nem res relcira, amelynek lezrtja res halmaz, s van

    olyan felttel, hogy a relci felttelre vonatkoz lezrtjnak rtelmezsi tar-tomnya megegyezik az eredeti relci rtelmezsi tartomnyval!

    1.28. R A A. Tegyk fel, hogy az R rtelmezsi tartomnya egyenlo azR rtelmezsi tartomnynak R-re vonatkoz oskpvel. Mit mondhatunk Rlezrtjrl?

    1.29. R N0 N0.R(a) =

    {a 3}, ha a > 2;{3k | k N}, ha a = 1.

    Mi az R relci lezrtja s korltos lezrtja?1.30. R NN. Az R relci minden sszetett szmhoz a legnagyobb valdi osztjt

    rendeli. Legyen q

    a) egy rgztett sszetett termszetes szm!

    b) egy rgztett prmszm!

    Legyen Pq(a) = (k N : a = qk)! Mi lesz az R relci Pq felttelrevonatkoz lezrtjnak rtelmezsi tartomnya?

    1.31. R N0 N0.

    R(x) = {b | k N0 : b = 2k + 1}, ha x = 0 s x pros;

    {x

    7

    }, ha x

    7 s x pratlan;

    {0}, ha x = 1;{7}, ha x = 0.

    Mi lesz R lezrtja s korltos lezrtja?

    1.32. R legyen az 1.29. feladatban adott relci. (k) = (k pratlan szm). Adja megaz R| relcit, lezrtjt s korltos lezrtjt!

    1.33. Igazak-e az albbi lltsok?

    a) Ha a DR DR, akkor R(a) = R(a).b) D

    R DR.

    c) Ha az A halmaz vges s R

    A

    A, akkor R = R.

    d) Ha A megszmllhatan vgtelen, R A A, sa A : (n(a) N0 : |R(a)| n(a)) R = R.

    1.34. Legyen R N0 N0.

    R(x) =

    {b|b > 0 s b < x s 2|b}, ha x pratlan;{x 1}, ha x pros;

    (x) = (x pros termszetes szm). Mi az R relci felttelre vonatkozlezrtja s korltos lezrtja?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    25/194

    1.7. FELADATOK 23

    1.35. Legfeljebb, illetve legalbb milyen hossz egy m s egy n hosszsg sorozatredukltjnak konkatencija, illetve konkatencijnak redukltja?

    1.36. Igaz-e, hogy egy sorozat redukltjnak projekcija ugyanolyan hossz, mintaz sorozat redukltja?

    1.37. Igaz-e, hogy egy sorozat projekcijnak redukltja ugyanolyan hossz, mintaz sorozat redukltja?

    1.38. Legyen A = N1 N2 N3 N4, B = N4 N1, ahol Ni = N (i = 1..4). = a) prB() =?

    b) red(prB()) =?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    26/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    27/194

    2. fejezet

    A programozs alapfogalmai

    Ebben a fejezetben a programozs legfontosabb alapfogalmait vezetjk be. Nagyon

    fontos szempont, hogy figyelmnket nem a programok tulajdonsgainak vizsglatra,hanem a programok elolltsra fordtjuk. Ezrt feltesszk a krdst, mirt is runkprogramot? Az erre a krdsre adott vlasz meghatrozza gondolkodsunk irnyt. Avlaszunk az, hogy azrt, mert van valami megoldand feladatunk, problmnk. Tehta gondolkodsunk kiindul pontja az, hogy kell lennie valaminek, amit feladatnakhvunk, s ez a feladat hatrozza meg az elrendo clt.

    A gyakorlatban nagyon sokfle feladat van. Mi bennk a kzs? Ez a krds istbbflekppen kzeltheto meg. A mi megkzeltsnk szerint a feladat lnyege az,hogy meghatrozzuk, milyen llapotban vagyunk s milyen llapotba akarunk jutni.Az, hogy mik az llapotok, a konkrt problmtl fgg. Pldul, ha egy autt akarunkegy hosszabb tra felkszteni, az llapott jellemezheti az, hogy mennyi a tankban abenzin, mennyi az ablakmos folyadk, mekkora a nyoms a kerekekben, mukdik-e

    az irnyjelzo s gy tovbb. A lnyeg az, hogy van a rendszernek valahny jellemzoje,ezen jellemzok lehetsges rtkei egy-egy halmazt alkotnak. Egy ilyen halmaz llhat amennyisget kifejezo szmokbl, lehet akr a { mukdik, nem mukdik} halmaz is.

    Ha mindegyik jellemzo lehetsges rtkeinek halmazbl vlasztunk egy-egyrtket megkapjuk az aut egy lehetsges llapott. Mr csak az hinyzik, hogy szre-vegyk, a lehetsges llapotok halmaza matematikailag egy direktszorzat.

    2.1. Az llapottr fogalma

    Az elsoknt bevezetendo absztrakt fogalom a fent emltett lehetsges llapotok hal-maza.

    2.1. DEFINCI: LLAPOTTRLegyen I egy vges halmaz s legyenek Ai, i I tetszoleges vges vagy meg-szmllhat, nem res halmazok. Ekkor az A =

    i I Ai halmazt llapot-

    trnek, az Ai halmazokat pedig tpusrtkhalmazoknaknevezzk.

    Amikor egy modellt ksztnk, el kell dntennk, hogy a valsg mely rszt kvn-juk modellezni, s melyek azok a jellemzok s milyen rtkeket vehetnek fel , ame-lyeket a modellnkben figyelembe akarunk venni.

    25

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    28/194

    26 2. A PROGRAMOZS ALAPFOGALMAI

    Az llapottr fenti defincijban az egyes komponenseket tekintsk gy, mintegyes jellemzok lehetsges rtkeinek halmazt. A tpusrtkhalmaz elnevezs arrautal, hogy ezek a halmazok bizonyos kzs tulajdonsggal rendelkezo elemekbol ll-

    nak. A ksobbiekben majd kitrnk arra is, hogy ez a kzs tulajdonsg mit is jelent.Mivel a jellemzok rtkhalmaza lehet azonos, az llapottr komponensei kztt egyhalmaz tbbszr is szerepelhet.

    Kiktttk, hogy az llapottrnek csak vges sok komponense legyen. Lehetne l-talnosabb defincit is adni gy, hogy nem ktjk ki az I halmaz vgessgt, ekkor afent definilt llapotteret az ltalnostott llapottr egy (vges) nzetnek nevezzk.

    Az, hogy a komponensek legfeljebb megszmllhatk, azt is jelenti, hogy a kom-ponensek kztt nem szerepelhet pl. a vals szmok halmaza. Termszetesen ettol mgegy tpusrtkhalmaz tartalmazhatja akr

    2-t is. Az {x | n N : x = n} lehet

    llapottr-komponens.

    2.2. A feladat

    Az llapottr fogalmnak segtsgvel knnyen megfogalmazhatjuk, hogy mit rtnkfeladaton. Azt kell megfogalmaznunk, hogy egy adott llapotbl (azaz az llapottregy elembol, pontjbl) milyen llapotba (azaz az llapottr mely pontjba) akarunkeljutni.

    2.2. DEFINCI: FELADATFeladatnakneveznk egy F A A relcit.

    A feladat fenti defincija termszetes mdon addik abbl, hogy a feladatot egylekpezsnek tekintjk az llapottren, s az llapottr minden pontjra megmondjuk,hova kell belole eljutni, ha egyltaln el kell jutni belole valahova.

    Az, hogy egy feladatnak mi lesz az llapottere, termszetesen magtl a feladat-tl fgg, m mg a feladat ismeretben sem egyrtelmu. Pldul egy pont skbeli ko-ordintit megadhatjuk derkszgu koordinta-rendszerben, de megadhatjuk polrko-ordintkkal is.

    Mgis, az, hogy mit vlasztunk llapottrnek, nagyon fontos, hiszen meghatrozza,hogy a tovbbiakban mit s hogyan tudunk lerni. Ha tl kevs jellemzot vizsglunk azaz az llapottr tl kevs komponensbol ll , akkor lehetnek olyan fogalmak,amelyeket nem tudunk benne lerni, ha tl sok a komponens, akkor flslegesen tlbonyolult lesz a modell.

    Tekintsk azt az egyszeru feladatot, hogy ssze kell adni kt termszetes szmot.Az llapotteret elg kzenfekvo mdon hrom komponensunek vlaszthatjuk. A hromkomponens a kt sszeadand s az sszeg. Teht A = NNN, s a feladat

    F = {((a,b,c), (x,y,z)) A A | a + b = z},

    vagy

    G = {((a,b,c), (x,y,z)) A A | b = x s c = y s a + b = z}.

    A kt feladat nem azonos, br mindketto kt termszetes szm sszegrol szl. Aklnbsg kztk az, hogy az F feladat nem mond semmit arrl, mi legyen azsszeadandkkal, a G pedig kikti, hogy maradjanak vltozatlanok.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    29/194

    2.3. A PROGRAM 27

    Felvetodik, hogy nem lenne elg a kt komponensu llapottr is? Legyen A =N N s

    H = {((a, b), (x, y)) A A | a + b = x}.Ezt a feladatot azonban nem gy interpretlnnk, hogy adjunk ssze kt termszetesszmot, hanem gy, hogy nveljnk meg egy termszetes szmot egy termszetesszmmal.

    Megjegyezzk, gyakran fogalmaznak meg feladatot gynevezett input-outputmodellben is, azaz milyen bemeno adatokhoz milyen kimeno adatokat rendelnk. Ez asztvlaszts az F s a G feladat esetben nem okozna gondot, de a H-hoz hasonl fel-adatok esetben mr problms lehetne, nem is beszlve a bevezetoben emltett autsfeladatrl. Az llapotr modell igazi elonyeit a ksobbiekben mg tapasztalni fogjuk.

    Felhvjuk a figyelmet arra, hogy a definci szerint a feladat relci, azaz l-talban nem determinisztikus, pldul G s H. A nemdeterminisztikussg azonbanmg rdemibb is lehet. Legyen a feladat a kvetkezo: hatrozzuk meg egy ter-mszetes szm egy valdi osztjt (a szm megvltoztatsa nlkl)! Ebben az esetben

    A = NN sF = {((a, b), (x, y)) A A | a = x s y|x s x = y s y = 1}.

    Pldul (6, 5) pont F szerinti kpe{(6, 2), (6, 3)}. A 6-nak 2 is, meg 3 is valdi osztja,azaz |F(6, 5)| = 2.

    Nagyon fontos, hogy pontosan lssuk a klnbsget az elozo feladat s a kvetkezokztt: hatrozzuk meg egy termszetes szm sszes valdi osztjt! Ebben az esetbenaz llapottr is ms lesz, hiszen egy termszetes szm sszes valdi osztja nem egyszm, hanem egy halmaz. Teht A

    = N F, ahol F az N vges rszhalmazainakhalmaza.

    G = {((a, b), (x, y)) A A | a = x s y = {n N | n|x s x = n s n = 1}}.

    Most |G(6, {5})| = 1 s G(6, {5}) = {(6, {2, 3})}.Megjegyezzk mg, hogy DF = A, pldul (5, 5) / DF, de DG = A , pldul

    (5, {5}) DG s G(5, {5}) = {(5, {})}.

    2.3. A program

    Amikor a program fogalmt igyeksznk tisztzni, a szmtgpen fut programokras az ltaluk megvalstott algoritmusokra figyelnk. Ha egy szmtgpen egy prog-ram fut, az abban jelentkezik, hogy a szmtgp memrijnak tartalma folyam-atosan vltozik. Itt most a memrit ltalnosan rtelmezzk, belertnk a szukenvett memritl a regisztereken keresztl a kpernyoig mindent, ami informcit hor-doz.

    Egy program jellemzo tulajdonsga, hogy mukdik, azaz idoben dinamikusfolyamat. A dinamikus rendszerek ltalban nehezebben kezelhetok, vizsglhatk,mint a statikusak. Ezrt arra gondolunk, lehet-e helyettesteni egy dinamikus folyama-tot egy statikus modellel?

    Tekintsk pldul az albbi a programozstl igazn messze eso problmt.Adott egy kmiai ksrlet, amely tl gyorsan jtszdik le ahhoz, hogy az ember pon-tosan regisztrlni tudja az egyms utni esemnyeket. Ez a programfutshoz hasonlanegy idoben dinamikusan lejtszd folyamat. Hogyan kvetheto nyomon mgis a ksr-let? Pldul gy, hogy a ksrletet filmre vesszk, s a tovbbiakban a kpkockk ltal

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    30/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    31/194

    2.5. MEGOLDS 29

    lpsre vltozik az llapot, mukdik a program. Ha vgl olyan llapotba jut az aut,hogy most mr nyugodtan el lehet vele indulni egy hosszabb tra, akkor a programmegoldotta a feladatot.

    Ahhoz, hogy egy program s egy feladat viszonyt megvizsgljuk, elegendo, ha aprogramrl tudjuk, hogy az llapottr egy adott pontjbl kiindulva az llapottr melypontjba jut, mert a megolds szempontjbl a kzblso llapotok lnyegtelenek.

    Az elobbiek miatt bevezetjk a programfggvny fogalmt, amely a programfutsnak eredmnyt jellemzi.

    2.4. DEFINCI: PROGRAMFGGVNYA p(S) A A relci az S A A program programfggvnye, ha

    1. Dp(S) = {a A | S(a) A},2. p(S)(a) = {b A | S(a) : () = b}.

    Az elso kvetelmny azt fogalmazza meg, hogy csak azokban a pontokban vanrtelme azt vizsglni, hogy hova jut egy program, ahonnan kiindulva a program nemszll el. A msodik pont rtelemszeruen azt rja le, hogy ahova a program eljut, az asorozat utols eleme.

    Ha kt program programfggvnye megegyezik, az azt jelenti, hogy a kt programmukdsnek eredmnye ugyanaz. Ezrt mondjuk ebben az esetben azt, hogy a ktprogram ekvivalens.

    A programfggvny elnevezs megtveszto lehet, hiszen egy program program-fggvnye nem felttlenl fggvny, sot az sem biztos, hogy determinisztikus relci(parcilis fggvny). Jobban kifejezi a fogalom tartalmt a hatsrelci elnevezs.Mindkettot hasznlni fogjuk.

    Megjegyezzk, hogy a programfggvnyen tl termszetesen vannak a program-nak olyan jellemzoi, melyek a program minosgre vonatkoznak, s ezek szempont-

    jbl egyltaln nem mindegy, hogy a program hogyan oldja meg a feladatot (ilyen

    lehet pldul a hatkonysg, a program ido- s trignye), de a tovbbiakban ezekkelegyelore nem foglalkozunk.

    2.5. Megolds

    Fontos, hogy a programfggvny ugyanolyan tpus relci, mint a feladat volt. gyteht a programfggvny fogalmnak bevezetsvel lehetosgnk nylik arra, hogykapcsolatot teremtsnk egy adott feladat s egy adott program kztt. Termszetesenennek a kapcsolatnak azt kell lernia, hogy mikor mondjuk egy programrl azt, hogymegold egy adott feladatot.

    2.5. DEFINCI: MEGOLDS

    Azt mondjuk, hogy az Sprogram megoldja az F feladatot, ha1. DF Dp(S),2. a DF : p(S)(a) F(a).

    Ezzel a defincival vgl is azt kvnjuk meg, hogy az llapottr olyan pontjai-hoz, ahol a feladat rtelmezve van, a program csak vges sorozatokat rendeljen (ter-minljon), s a sorozatok vgpontjait a feladat hozzrendelje a kezdoponthoz.

    Nha gondot okoz ennek a defincinak a megrtse. Mirt a programfggvnyszerinti kp rsze a feladat szerinti kpnek? gy nem kapunk meg minden megoldst!

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    32/194

    30 2. A PROGRAMOZS ALAPFOGALMAI

    Dp(S)

    p(S)(a)

    F(a)

    DF

    A A

    a

    2.1. bra. Megolds

    Pedig elg csak az auts pldra gondolni. Pldul a fkfolyadk szintjnek a minimums a maximum szint jelzse kztt kell lennie. Ezt a karbantarts eredmnyekppenteljestjk, de egyltaln nem egytelmu, hogy mi lesz a belltott szint. Annak megnincs is rtelme, hogy minden lehetsges szintet belltsunk.

    Sokszor felmerl a krds, hogy van-e sszefggs kt feladat kztt a megoldsszempontjbl. Ezzel kapcsolatos a kvetkezo definci.

    2.6. DEFINCI: SZIGORTSAzt mondjuk, hogy az F1 A A feladat szigorbb, mint az F2 A Afeladat, ha

    1. DF2 DF1 ,2. a DF2 : F1(a) F2(a).

    A szigorts defincijt sszevetve a megolds defincijval knnyen addik akvetkezo egyszeru, de fontos llts:

    2.1. llts: HaF1 szigorbb, mint F2, s S megoldsaF1-nek, akkor S megoldsaF2-nek is.

    2.6. Programozsi feladat

    Ltezik-e tetszoleges feladathoz megoldprogram? Legyen F = A A. DefiniljukS-et a kvetkezokppen: a DF : S(a) = {red(a, b) | b F(a)} s a /DF : S(a) = {a , . . . }. Nyilvnval, hogy p(S) = F, teht S megoldsa F-nek.Vagyis tetszoleges feladathoz knnyen tudunk megoldprogramot csinlni. Ebbol ki-indulva azt gondolhatnnk, hogy a programozs nagyon egyszeru feladat. Ez perszenem igaz. A programozs feladata valjban sokkal sszetettebb, mert egy programotadott programokbl, rgztett szablyok szerint kell sszeraknunk, pldul egy prog-ramnyelv eszkzeit kell hasznlnunk.

    2.7. DEFINCI: PROGRAMOZSI FELADAT

    Legyen A =

    i I Ai. Programozsi feladatnak nevezzk az (F,P,K) hr-mast, ahol F A A egy feladat; P a primitv (megengedett) programok vges

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    33/194

    2.7. PLDK 31

    halmaza, S P : S A A; K a megengedett programkonstrukcik vgeshalmaza, K K, egy az A-n rtelmezett programok halmazn rtelmezettmuvelet.

    2.8. DEFINCI: PROGRAMOZSI FELADAT MEGOLDSAAz (F,P,K) programozsi feladatnak az Sprogram megoldsa, ha Sa primitvprogramokbl a megengedett konstrukcikkal elollthat, s megoldsa F-nek.

    A programozsi feladat kt rtelemben is ltalnosthat: egyrszt kibovt-heto a program mukdsre vonatkoz felttelekkel, ezzel ebben a knyvbennem foglalkozunk. Msrszt nem kveteljk meg az azonos llapotteret, ehhezltalnostjuk a megolds fogalmt, illetve bevezetjk a tpusspecifikci, tpus,megfelels s a tpuskonstrukcik fogalmt.

    Az, hogy milyen programkonstrukcikat engednk meg, sok mindentol fgg, mi akvetkezokben csak a legegyszerubbekkel fogunk foglalkozni, mivel ezek is elgsge-

    sek egy programozsi feladat megoldshoz.Mr most felhvjuk a figyelmet arra a fontos szempontra, hogy valjban nagyongyakran nem azt az utat kvetjk, hogy meglevo programokbl rakjuk ssze amegoldprogramot, hanem a feladatot bontjuk fel rszfeladatokra, gy, hogy az ezeketmegold programokbl automatikusan megkapjuk az eredeti feladatot megoldprogramot.

    2.7. Pldk

    2.1. plda: Legyen A1 = {1, 2}, A2 = {1, 2}, A3 = {1, 2, 3, 4, 5}, A = A1 A2 A3. F = {((a,b,c), (d,e,f)) | f = a + b}. F(1, 1, 1) = ? Hny olyan pontja van azllapottrnek, amelyekhez a feladat ugyanazt rendeli, mint az (1, 1, 1)-hez?Megolds:

    F(1, 1, 1) = {(1, 1, 2), (1, 2, 2), (2, 1, 2), (2, 2, 2)}.Mivel a feladat hozzrendelse nem fgg az llapottr harmadik komponenstol, a fel-adat ugyanezeket a pontokat rendeli az sszes (1, 1, ) alak ponthoz. Ms pontokhozviszont nem rendelheti ugyanezeket a pontokat, mert akkor az sszeg nem lehetne 2!Teht t olyan pontja van az llapottrnek, amelyhez a feladat ugyanazt rendeli, mintaz (1, 1, 1)-hez.

    2.2. plda: Legyen A = {1, 2, 3, 4, 5}, S A A.S = { (1, 1251), (1, 14352), (1, 132 . . . ), (2, 21),

    (2, 24), (3, 333333 . . . ), (4, 41514), (4, 431251),(4, 41542), (5, 524), (5, 534), (5, 5234) }

    F ={

    (2, 1)(2, 4)(4, 1)(4, 2)(4, 5)}

    .

    a) Adjuk meg p(S)-t!

    b) Megoldja-e Sa feladatot?

    Megolds:

    a) Mivel a program az 1-hez s a 3-hoz vgtelen sorozatot is rendel, a program-fggvny rtelmezsi tartomnya:

    Dp(S) = {2, 4, 5}.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    34/194

    32 2. A PROGRAMOZS ALAPFOGALMAI

    Ekkor a programfggvny:

    p(S) = {(2, 1), (2, 4), (4, 4), (4, 1), (4, 2), (5, 4)}.

    b) A megolds defincija kt pontjnak teljeslst kell beltnunk.

    i. DF = {2, 4} {2, 4, 5} = Dp(S).ii. p(S)(2) = {1, 4} {1, 4} = F(2),

    p(S)(4) = {4, 1, 2} {1, 2, 5} = F(4),teht az Sprogram nem megoldsa az F feladatnak.

    2.3. plda: Fejezzk ki a programok unijnak programfggvnyt a programokprogramfggvnyeivel!Megolds: Legyenek S1, S2 A A programok. Ekkor a programfggvnyrtelmezsi tartomnynak defincijbl kiindulva:

    Dp(S1S2) = {a A | (S1 S2)(a) A} == {a A | S1(a) A s S2(a) A} == Dp(S1) Dp(S2).

    Legyen a Dp(S1) Dp(S2). Ekkorp(S1 S2)(a) = {() | (S1 S2)(a)} =

    = {() | S1(a) vagy S2(a)} == p(S1)(a) p(S2)(a).

    2.4. plda: Legyen F1 s F2 egy-egy feladat ugyanazon az llapottren! Igaz-e, hogyha minden program, ami megoldsa F1-nek, az megoldsa F2-nek is, s minden prog-

    ram, ami megoldsa F2-nek, az megoldsa F1-nek is, akkor F1 s F2 megegyeznek?Megolds: A leggyakoribb hiba, amit ennek a feladatnak a megoldsakor el szoktakkvetni, az az, hogy sszekeverik az llts felttelrendszert magval a bizonytandlltssal, s azt prbljk bebizonytani, hogy valamelyik feladatnak minden programmegoldsa. Termszetesen ltalban ez nem igaz, de nem is ez a feladat! Abbl kellteht kiindulnunk, hogy pontosan ugyanazok a programok oldjk meg mindkt felada-tot, s meg kell vizsglnunk, hogy kvetkezik-e ebbol az, hogy a kt feladat mege-gyezik.

    Induljunk ki abbl, hogy minden program, ami megoldsa F1-nek, az megoldsaF2-nek, s vlasszunk egy olyan programot, amelynek programfggvnye megegyezikaz F1 relcival. Ekkor a vlasztott program trivilisan megoldja az F1 feladatot, tehtmeg kell oldania F2-t is, azaz:

    i. DF2 DF1 ,ii. a DF2 : F1(a) F2(a).

    Most felhasznlva, hogy minden program, ami megoldsa F2-nek, az megoldsa F1-nek is, s egy olyan program vlasztsval, amelynek programfggvnye megegyezikF2-vel, az elozoekkel analg mdon addnak a fordtott irny lltsok:

    iii. DF1 DF2 ,iv. a DF1 : F2(a) F1(a).

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    35/194

    2.8. FELADATOK 33

    Az i. s iii. lltsokbl kvetkezik, hogy a kt feladat rtelmezsi tartomnya meg-egyezik, mg az ii. s iv. lltsok garantljk, hogy e kzs rtelmezsi tartomnyegyes pontjaihoz mindkt feladat ugyanazokat a pontokat rendeli, azaz F1 = F2.

    2.5. plda: F1 F2. Az Sprogram megoldja F2-t. Igaz-e, hogy Smegoldja F1-et is?Megolds: Prbljuk meg bebizonytani az lltst. Ehhez a megolds defincijnakkt pontjt kell beltnunk.

    i. DF1 Dp(S),ii. a DF1 : p(S)(a) F1(a).

    Az i. pont teljeslse knnyen lthat, ugyanis Smegoldsa F2-nek, teht

    DF1 DF2 Dp(S).Az ii. pont bizonytsnl azonban gond van, hiszen az albbi kt llts ll ren-delkezsnkre:

    a

    DF1 : p(S)(a)

    F2(a),

    a DF1 : F1(a) F2(a),s ezekbol a kvnt llts nem bizonythat. Elakadtunk a bizonytsban, lehet, hogynem igaz az llts? Ksztsnk ellenpldt felhasznlva azt, hogy hol akadtunk el abizonytsban!

    Legyen A = {1, 2}, F1 = {(1, 1)}, F2 = {(1, 1), (1, 2)}, s p(S) egyezzen megaz F2 feladattal. Ekkor Strivilisan megoldja F2-t, de nem megoldsa F1-nek, ugyanis

    1 DF1 s p(S)(1) = F2(1) = {1, 2} {1} = F1(1).Teht az llts nem igaz.

    2.6. plda: Legyenek S1 s S2 A A programok, F A A pedig feladat.Tegyk fel tovbb, hogy S1 S2 s S2 megoldja az F feladatot. Igaz-e, hogy S1megoldja F-et?Megolds: Ha S1 S2, akkor mit tudunk a programfggvnykrol? Nzzk eloszraz rtelmezsi tartomnyokat! A definci szerint minden llapottrbeli ponthoz min-den program hozzrendel legalbb egy sorozatot, gy S1 s S2 is. Mivel S1 S2 ezrtcsak az fordulhat elo, hogy egy adott ponthoz S2 olyan sorozatokat is rendel, amit S1nem. Ha ezek a sorozatok mind vgesek, akkor az adott pont vagy benne van mindktprogram programfggvnynek az rtelmezsi tartomnyban, vagy egyikben sem;ha van kzttk vgtelen is, az adott pont biztosan nem eleme p(S2) rtelmezsi tar-tomnynak, de eleme lehet Dp(S1)-nek. Teht Dp(S2) Dp(S1) s a Dp(S2) :p(S1)(a) p(S2)(a).

    Mivel S2 megoldsa F-nek, ezrt DF Dp(S2) s a DF : p(S2)(a) F(a).A fentiek miatt DF Dp(S1) is s a DF : p(S1)(a) F(a) is teljesl, vagyis S1is megoldsa F-nek.

    2.8. Feladatok

    2.1. Legyen A = {, , , , }, S A A.S = { (, ), (, ), (, . . . ),

    (, ), (, ), (, . . . ),(, ), (, ), (, ),(, ), (, ), (, ) }

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    36/194

    34 2. A PROGRAMOZS ALAPFOGALMAI

    F = {(, )(, )(, )(, )(, )}.a) Adjuk meg p(S)-t!

    b) Megoldja-e Saz F feladatot?2.2. Legyen Sprogram, F olyan feladat, hogy Smegoldsa F-nek. Igaz-e, hogy

    a) ha F nemdeterminisztikus, akkor Ssem az?

    b) ha F determinisztikus, akkor S is az?

    c) ha F nemdeterminisztikus, akkor p(S) sem az?

    d) ha p(S) determinisztikus, akkor F is az?

    e) ha F determinisztikus, akkor p(S) is az?

    f) ha Snemdeterminisztikus, akkor p(S) sem az?

    2.3. Igaz-e, hogy p(S) rtelmezsi tartomnya ppen A oskpe S-re nzve?

    2.4. Mondhatjuk-e, hogy az Sprogram megoldja az F feladatot, ha igaz a kvetkezollts:

    q DF S(q) A s p(S)(q) F(q)?

    2.5. Legyen A = N N, F1, F2 A A.F1 = {((u, v), (x, y)) | y|u},F2 = {((u, v), (x, y)) | x = u s y|u}.Ugyanaz-e a kt feladat? (Van-e valamilyen sszefggs kzttk?)

    2.6. F A A. S1, S2 programok A-n. Az S1 s az S2 is megoldja az F feladatot.Igaz-e, hogy az S = (S1 S2) program is megoldja az F feladatot?

    2.7. Tekintsk a kvetkezo szvegesen megadott feladatot: Adott egy sakktbla skt rajta lvo bstya helyzete. Helyezznk el a tbln egy harmadik bstyt gy,hogy az mindkettonek az tsben lljon! Ksztsk el a modellt: rjuk fel azllapotteret s az F relcit!

    2.8. Tudjuk, hogy Smegoldja F-et (az A llapottren). Igaz-e, hogy ha a A, akkor

    S(a) A vagy p(S)(a) F(a) a / DF?

    2.9. Legyen F A A egy feladat s S A A egy program. Jelljk F P-velazt a relcit, amely F s p(S) metszeteknt ll elo. Igaz-e, hogy

    a) ha

    DFP =

    DF, akkor Smegoldja F-et?

    b) ha Smegoldja F-et, akkor DFP = DF?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    37/194

    3. fejezet

    Specifikci

    A megolds defincija kzvetlenl elg nehzkesen hasznlhat a programok ksz-

    tse sorn, hiszen az, hogy egy program megold-e egy feladatot, a megolds eddigidefincija alapjn csak nehezen ellenorizheto. Ezrt bevezetnk nhny j fogalmat,majd ezek segtsgvel megadjuk a megolds egy elgsges felttelt.

    3.1. A leggyengbb elofelttel

    Eloszr a program mukdsnek eredmnyt adjuk meg egy, a programfggvnynlknyelmesebben hasznlhat jellemzovel.

    3.1. DEFINCI: LEGGYENGBB EL OFELTTELLegyen S A A program, R : A L llts. Ekkor az S program Rutfelttelhez tartoz leggyengbb elofelttele az az lf(S, R) : A L fgg-vny, amelyre:

    lf(S, R) = {a Dp(S)|p(s)(a) R}.A leggyengbb elofelttel teht pontosan azokban a pontokban igaz, ahonnan kiin-

    dulva az Sprogram biztosan terminl, s az sszes lehetsges vgllapotra igaz R.Termszetesen a leggyengbb elofelttel igazsghalmazn kvl is lehetnek olyan

    pontok, amelybol a program egy futsa eljut az utfelttel igazsghalmazba, csakazokbl a pontokbl nem garantlt, hogy oda jut.

    Egy program mukdse gy is jellemezheto, hogy megadjuk a program tetszole-ges utfelttelhez tartoz leggyengbb elofelttelt. A feladat megoldsa sorn az aclunk, hogy olyan programot talljunk, amelyik bizonyos feltteleknek eleget tevopontokban terminl. Ezrt azt mondhatjuk, hogy ha a szmunkra kedvezo vgllapo-

    tokra megadjuk a program leggyengbb elofelttelt, akkor a programfggvny meg-hatrozsa nlkl jellemezzk a program mukdst.Emlkeztetnk arra, hogy definiltuk a relci szerinti oskp fogalmt is, ennek

    felhasznlsval azonnal ltszik, hogy

    lf(S, R) = p(S)1(R).Felhasznlva az igazsghalmaz defincijt s a szigor kompozci szerinti oskp tu-lajdonsgt:

    p(S)1(R) = p(S)1(R1({igaz})) = (R p(S))1({igaz}) = R p(S).

    35

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    38/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    39/194

    3.2. A FELADAT SPECIFIKCIJA 37

    A A

    R

    lf(S, R)

    lf(S, Q) Q

    p(S)

    3.2. bra. A leggyengbb elofelttel s az uni kapcsolata

    4. Legyen a lf(S, Q) lf(S, R). Ekkor a lf(S, Q) vagy a lf(S, R).Ha a lf(S, Q), akkor a monotonitsi tulajdonsg alapjn a lf(S, QR). Hasonlan, ha a lf(S, R), akkor a lf(S, Q R).

    A tulajdonsg visszafel nem igaz. p(S)(a) Q R-bol nem kvetkezik semp(S)(a) Q, sem p(S)(a) R. Termszetesen, ha p(S) determinisztikus, azaza A : p(S)(a) legfeljebb egy elemu halmaz, akkor az egyenlosg fennll.

    3.2. A feladat specifikcija

    A kvetkezokben bevezetjk a feladat megadsnak egy msik mdjt, s kimondunkegy, a gyakorlat szempontjbl nagyon fontos ttelt.

    ltalban a feladat nem fgg az llapottr sszes komponenstol, azaz az llapot-tr tbb pontjhoz is ugyanazt rendeli. Ezeket a pontokat fogjuk ssze egy pontt aparamtertr segtsgvel.

    3.2. DEFINCI: PARAMTERTRLegyen F A A feladat. A B halmazt a feladat paramterterneknevezzk,ha van olyan F1 s F2 relci, hogy

    F1 A B,F2 B A,F = F2 F1.

    Fontos szrevenni, hogy paramterteret mindig lehet tallni. Pldul maga a fel-adat llapottere minden esetben vlaszthat paramtertrnek gy, hogy a defincibanszereplo F1 relcinak az identikus lekpezst, F2-nek pedig magt az F feladatotvlasztjuk. m az, hogy egy konkrt esetben mit is vlasztunk paramtertrnek, a fel-adattl fgg. ltalban gy vlasztjuk meg a paramterteret, hogy a kvetkezo tteltknyelmesen tudjuk hasznlni.

    3.2. TTEL: SPECIFIKCI TTELELegyen F AA feladat, B az F egy paramtertere, F1 AB, F2 BA,F = F2 F1. Legyen b B, s definiljuk a kvetkezo lltsokat:

    Qb = {a A | (a, b) F1} = F(1)1 (b),Rb = {a A | (b, a) F2} = F2(b).

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    40/194

    38 3. SPECIFIKCI

    Ekkor ha b B : Qb lf(S, Rb), akkor az S program megoldja az Ffeladatot.

    Bizonyts: A megolds defincija kt pontjnak teljeslst kell beltnunk:

    1. DF Dp(S), ugyanis:Legyen a DF tetszoleges. Ekkor az F1 s F2 relcik defincija miatt a DF1 s

    b B : a Qb.De ekkor a ttel felttele alapjn:

    a Qb lf(S, Rb) Dp(S).

    2. a DF : p(S)(a) F(a), ugyanis:Legyen a DF tetszolegesen rgztett, b B olyan, amelyre a Qb. Ekkora felttel szerint:

    p(S)(a) Rb = F2(b) F2(F1(a)) = F(a).

    A specifikci ttele csak elgsges felttel a megoldsra, azaz nem megfordt-hat: lehet adni olyan feladat-program prt, ahol a program megoldja a feladatot, de aspecifikci ttele nem teljesl. Ez termszetesen attl is fgg, hogy a feladatot hogyanspecifikljuk, azaz milyen paramterteret vlasztunk, s hogyan bontjuk a feladatot F1s F2 relcik kompozcijra.

    Azonnal ltszik, hogy bB

    Qb = DF1 DF.

    Ha egy b B-re Qb DF, akkor Rb = .

    3.3. A vltoz fogalma

    Az eddig elmondottak alapjn a specifikci ttele mg nem lenne hatkonyan hasznl-hat, hiszen a paramtertr minden pontjra ellenoriznnk kellene a felttelek tel-

    jeslst. Ezrt bevezetjk a vltoz fogalmt, aminek segtsgvel a felttelrendszerteljeslse egyszerubben ellenorizhetov vlik.

    3.3. DEFINCI: VLTOZ

    Az A =

    i I Ai llapottr vi : A Ai egydimenzis projekcis fggvnyeit

    vltozknaknevezzk.A vltozk hasznlatval egyszerusthetjk az llapottren rtelmezett lltsok

    (elo- s utfelttelek, leggyengbb elofelttel) s relcik (programfggvny) lerst.Mivel minden vltoz rtelmezsi tartomnya az llapottr s rtkkszlete egy t-

    pusrtkhalmaz, egy vltozt jellemezhetnk egy tpussal, azaz beszlhetnk a vltoztpusrl.

    Ha a paramtertr is direktszorzat alak mrpedig ez gyakran gy van, ugya-nis ltalban az llapottr egy altere , akkor a paramtertr egydimenzis projekcisfggvnyeit paramtervltozknaknevezzk.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    41/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    42/194

    40 3. SPECIFIKCI

    A jells egyszerustheto, mivel nyilvnval, hogy a paramtervltozk argumen-tuma b, ezek el is hagyhatk, sot ltalban az sem okoz flrertst, ha az elo- sutfelttelek indexeit elhagyjuk. Ezek a felttelek a paramtertr pontjaihoz tartoznak,

    s gy a paramtervltozk rtkeitol fggnek. A feladat specifikcija teht:A = Z Z Z

    x y z

    B = Z Zx y

    Q : (x = x y = y)R : (z = x + y)

    A tovbbiakban a feladatot gy definiljuk, hogy megadjuk az llapottert (A),a paramtertert (B), valamint az elo- s utfelttelt (Q, illetve R) a paramtertrminden pontjra, azaz paramteresen. Ebben az esetben azt mondjuk, hogy a feladatotmegadtuk a specifikci ttelnek megfelelo formban, vagy ha nem okoz flrertst,

    specifikltuk a feladatot.Egy feladatot nagyon sokflekppen lehet specifiklni, a sok lehetosg kzl azegyik az, amit elo-, utfelttellel trtno specifikcinak szoktak nevezni, s nagyonhasonlt arra, amit most trgyalunk. Felhvjuk a figyelmet arra, hogy a hasonlsg el-lenre a ketto nem azonos.

    Paramtertrnek ltalban az llapottr egy altert szoktuk vlasztani. Azokat akomponenseket vlogatjuk ki, amelyek rtktol fgg, hogy a feladat mihez mit ren-del, amelyek paramterezika feladatot. Lnyegben azt fogalmazzuk meg, hogy azllapottr milyen tulajdonsg pontjaibl milyen tulajdonsg pontokba akarunk jutni.A paramterteret arra hasznljuk, hogy megadjuk, milyen sszefggs van az elrendos a kiindul llapotok kztt.

    Ha egy programnak meg tudjuk hatrozni a (paramteres) utfelttelhez tartoz

    leggyengbb elofelttelt, akkor a specifikci ttele alapjn knnyen eldnthetjk,hogy megoldsa-e a specifiklt feladatnak, ms szval bebizonythatjuk a prog-

    ram helyessgt. Megjegyezzk azonban, hogy legtbbszr a fordtott utat fogjukkvetni, nem a program helyessgt bizonytjuk, hanem bizonytottan helyes progra-mot lltunk elo.

    A ksobbiekben bevezetnk majd olyan eszkzket, amelyek segtsgvel a fel-adat specifikcijbl kiindulva olyan programokat kszthetnk, amelyek megoldjka feladatot.

    A vltozkhoz kapcsoldan bevezetnk mg nhny egyszeru fogalmat, ame-lyeknek a szemlletes jelentse elgg nyilvnval.

    Azt mondjuk, hogy az S program p(S) programfggvnye nem fgg az llapottrai : Ai vltozjtl, ha

    x, y Dp(S) : (k ([1, n] \ {i} : xk = yk) p(S)(x) = p(S)(b)).Azt mondjuk, hogy az Sprogram ai : Ai vltozja konstans, ha

    a A : S(a) : (k D : ki = ai).

    Azt mondjuk, hogy az Sprogram vgrehajtsa nem vltoztatja meg az ai : Ai vltozt,ha

    a Dp(S) : b p(S)(a) : bi = ai.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    43/194

    3.4. PLDK 41

    3.4. Pldk

    3.1. plda: Legyen A =

    {Bach,Bartok,Kodaly,Liszt, Mozart,V ivaldi

    }, S

    A A program.S = { V ivaldi V ivaldi, Bach, Bach Bach,Mozart,

    Bach Bach, Liszt, Bartok, M oz art Mozart, V ivaldi,Liszt Liszt, Bartok, Kodaly Kodaly,Mozart,Bartok Bartok,Bach,Liszt}

    Legyen tovbb az R : A L llts:x A : R(x) = (x magyar).

    Mi lesz a fenti program R-hez tartoz leggyengbb elofelttele?Megolds: rjuk fel eloszr a program programfggvnyt:

    p(S) =

    {(V ivaldi, Bach), (Bach,Mozart), (Bach,Bartok),

    (Mozart, V ivaldi), (Liszt, Bartok), (Kodaly,Mozart),(Bartok, Liszt) }

    Ezek utn, a leggyengbb elofelttel defincijt felhasznlva:lf(S, R) = {Bartok, Liszt}, ugyanis

    p(S)(V ivaldi) = {Bach} Rp(S)(Kodaly) = {Mozart} Rp(S)(Bartok) = {Liszt} R

    p(S)(Bach) = {Mozart, Bartok} Rp(S)(Mozart) = {V ivaldi} R

    p(S)(Liszt) = {Bartok} R3.2. plda: Legyen H1, H2 : A L. Igaz-e, hogy ha minden S AA programralf(S, H1) = lf(S, H2), akkor H1 = H2?Megolds: Felhasznlva, hogy a leggyengbb elofelttelek minden programra mege-gyeznek, egy alkalmas program vlasztsval a vlasz egyszeruen megadhat: rendeljeaz Sprogram az llapottr minden elemhez az nmagbl ll egy hosszsg soroza-tot. Ekkor knnyen belthat, hogy tetszoleges R utfelttel esetn:

    lf(S, R) = R.

    Ekkor viszontH1 = lf(S, H1) = lf(S, H2) = H2,

    teht a kt felttel megegyezik.

    3.3. plda: Specifikljuk a kvetkezo feladatot: A = L L, F A A,

    F = {((l, k), (m, n)) | n = k m = (l k)}.

    Megolds:

    A = L Lx y

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    44/194

    42 3. SPECIFIKCI

    B = L Lx y

    Q : (x = x y = y)R : (x = (x y) y = y)

    3.4. plda: Legyen F A A, S A A program, B egy tetszoleges halmaz.Legyenek tovbb F1 A B s F2 B A olyan relcik, hogy F = F2 F1,valamint b B:

    Qb = F11 (b),Rb = F2(b).

    Igaz-e, hogy ha b B : Qb lf(S, Rb), akkor Smegoldja F-et?Megolds: Prbljuk meg a megolds defincijnak kt pontjt beltni. Legyen a DF. Be kellene ltnunk, hogy a Dp(S). Nzzk meg a specifikci ttelnek bi-zonytst: ott felhasznltuk, hogy ekkor van olyan b B, hogy a Qb. Igaz eza Qb-re is? Sajnos mivel Qb-t oskppel definiltuk ez nem felttlenl van gy.Prbljunk a fenti gondolatmenet alapjn ellenpldt adni:Legyen A = {1}, B = {1, 2}, F = {(1, 1)}, F1 = {(1, 1), (1, 2)}, F2 = {(2, 1)}.Ekkor Q1 = Hamis s Q2 = Hamis, teht az llts felttelei teljeslnek, fggetlenla programtl (ugyanis hamisbl minden kvetkezik). Vlasszuk most az albbi prog-ramot: S = {(1, < 1, 1, ... >)}. Ez a program nem megoldsa a feladatnak, de teljesl-nek r is az llts felttelei. Teht az llts nem igaz.

    3.5. Feladatok

    3.1. Legyen A ={

    1, 2, 3, 4, 5}

    , S

    A

    A.

    S = { (1, 1251), (1, 14352), (1, 132 . . . ), (2, 21),(2, 24), (3, 333333 . . . ), (4, 41514), (4, 431251),(4, 41542), (5, 524), (5, 534), (5, 5234) }

    s R = {1, 2, 5}. rja fel az lf(S, R) halmazt!3.2. Mivel egyenlo lf(S,Igaz)?

    3.3. Legyen A tetszoleges llapottr, Qi : A L (i N). Igaz-e, hogy ha

    i N : Qi Qi+1,

    akkor

    (n N : lf(S, Qn)) = lf(S, (n N : Qn))?3.4. Igaz-e, hogy ha lf(S1, R) = lf(S2, R), akkor lf(S1 S2, R) = lf(S1, R)

    lf(S2, R)?

    3.5. Igaz-e, hogy ha x, y A : x lf(S1, P({y})) x lf(S2, P({y})),akkor Dp(S1) = Dp(S2)?

    3.6. S1, S2 AA programok. Igaz-e, hogy ha H : A L esetn lf(S1, H) =lf(S2, H), akkor S1 ekvivalens S2-vel?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    45/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    46/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    47/194

    3.5. FELADATOK 45

    3.16. Keressk meg egy termszetes szm egy osztjt.

    3.17. Keressk meg egy sszetett termszetes szm egy valdi osztjt.

    3.18. Keressk meg egy termszetes szm egy valdi osztjt.3.19. Keressk meg egy termszetes szm sszes valdi osztjt.

    3.20. Keressk meg egy termszetes szm legnagyobb prmosztjt.

    3.21. llaptsuk meg, hny valdi osztja van egy termszetes szmnak.

    3.22. Keressk az [m..n] intervallumban az elso olyan szmot, amelyiknek van valdiosztja.

    3.23. Keressk az [m..n] intervallumban azt a szmot, amelyiknek a legtbb valdiosztja van, de nem oszthat 6-tal.

    3.24. Az[m..n]

    intervallumban melyik szmnak van a legtbb valdi osztja?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    48/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    49/194

    4. fejezet

    Kiterjesztsek

    Az elozo fejezetekben bevezettk a program s a feladatat fogalmt, s definiltuk az

    azonos llapottren levo feladat-program prok kztt a megolds fogalmt. A gyakor-latban azonban ltalban a feladat s a program klnbzo llapottren van rtelmezve;pldaknt megemlthetjk azt az esetet, amikor egy feladat megoldsra a programbantovbbi vltozkat kell bevezetni, azaz a feladat llapottert jabb komponensekkelkell bovteni.

    A tovbbiakban megvizsgljuk, hogy mit tudunk mondani a klnbzo llapottrenadott programok s feladatok viszonyrl a megolds szempontjbl, s ennek alapjnltalnostjuk (kiterjesztjk) a megolds fogalmt erre az esetre is.

    4.1. A feladat kiterjesztse

    Ha egy feladat llapottert kibovtjk jabb komponensekkel, mit jelentsen ez a feladat

    vonatkozsban? Elg kzenfekvo, hogy ebben az esetben a feladat ne tartalmazzonsemmifle kiktst az j komponensekre.

    4.1. DEFINCI: FELADAT KITERJESZTSELegyen a B llapottr altere az A llapottrnek. Az F A A relcit azF B B feladat kiterjesztsneknevezzk, ha

    F = {(x, y) A A | (prB(x), prB(y)) F}.

    A defincit gy is megfogalmazhatjuk, hogy a feladat kiterjesztse az sszes olyanA A-beli pontot tartalmazza, amelynek B-re vett projekcija benne van F-ben.

    4.2. A program kiterjesztseA program kiterjesztsnek defincijban az j komponensekre azt a kiktst tesszk,hogy azok nem vltoznak meg a kiterjesztett programban. Ezzel azt a gyakorlatikvetelmnyt rjuk le, hogy azok a vltozk, amelyeket a program nem hasznl, nemvltoznak meg a program futsa sorn.

    4.2. DEFINCI: PROGRAM KITERJESZTSELegyen a B llapottr altere az A llapottrnek, s jellje B a B kiegszto

    47

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    50/194

    48 4. KITERJESZTSEK

    F

    F A

    B

    B

    4.1. bra. Feladat kiterjesztse

    altert A-ra. Legyen tovbb S program a B llapottren. Ekkor az S A-belirelcit az S program kiterjesztsneknevezzk, ha a A :S(a) = { A |prB() S(prB(a)) i D : prB(i) = prB(a)}.

    A fenti definci alapjn a kiterjesztett program rtkkszletben csak olyan soroza-tok vannak, amelyek prhuzamosak valamely sorozattal az eredeti program rtk-kszletbol.

    B

    B A

    4.2. bra. Program kiterjesztse

    Vajon a kiterjeszts megtartja-e a program-tulajdonsgot? Erre a krdsre vlaszolaz albbi llts.

    4.1. llts: Legyen a B llapottr altere az A llapottrnek, s jellje B a Bkiegszt o altert A-ra. Legyen tovbb S program a B llapottren, s S azSkiterjesztseA-ra. EkkorS program.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    51/194

    4.3. KITERJESZTSI TTELEK 49

    A bizonyts rendkvl egyszeru, a feladatok kztt szerepel.Kt azonos llapottren definilt programot ekvivalensnek neveztnk, ha a prog-

    ramfggvnyk megegyezett. Most ezt a fogalmat is ltalnostjuk.

    4.3. DEFINCI: PROGRAMOK EKVIVALENCIJALegyenek S1 A1 A1 , S2 A2 A2 programok, B altere mind A1-nek,mind A2-nek. Azt mondjuk, hogy S1 ekvivalens S2-vel B-n, ha

    prB(p(S1)) = prB(p(S2)).

    Nyilvnval, hogy a definci valban ltalnostsa az egyszeru esetnek. A defin-cinak egyszeru kvetkezmnye az is, hogy a kt ekvivalens program a kzs altrenpontosan ugyanazokat a feladatokat oldja meg.

    Valjban attl, hogy kt program ekvivalens azaz megegyezik a programfgg-vnyk , egyb tulajdonsgaik nagyon eltrok lehetnek. Ilyen nem elhanyagolhat klnbsg lehet pldul a hatkonysgukban. Egyltaln nem mindegy, hogy egy prog-

    ram mennyi ideig fut, s mekkora memrira van szksge. A program e jellemzoinekvizsglatval azonban itt nem foglalkozunk.

    A defincikbl kzvetlenl addik a kvetkezo llts:

    4.2. llts: Egy program kiterjesztse s az eredeti program az eredeti llapottrenekvivalens.

    4.3. Kiterjesztsi ttelek

    Az albbiakban kvetkezo ttelcsoport a megolds s a kiterjesztsek kztti kapcso-latot vizsglja.

    Legyen A egy llapottr, amelynek B altere. A B-n definilt feladatok s prog-ramok megfeleloinek tekinthetjk A-n a feladatok s programok kiterjesztseit A-ra,az A-n definilt feladat megfelelojnek B-n pedig a feladat vetlett B-re. Az A-ndefinilt programok esetben a B-re val vetts kzvetlenl nem alkalmazhat, mivelegy program vetlete nem biztos, hogy program, ugyanis nem biztos, hogy a sorozatokredukltak. Termszetesen, ha S A A program, akkor az

    S = {(b, ) B B | (a, ) Ss b = prB(a) s = red(prB())}mr program, s a B llapottren S s S ekvivalens. Teht egy S A A prog-ramhoz mindig tallhat olyan S B B program, amely vele ekvivalens B-n.

    Ilyen mdon, ahogy a 4.3. bra is mutatja, a kiterjeszts s a vetts segtsgvelkapcsolatot ltestnk az A s B llapottereken definilt programok kztt.

    Termszetesen ltalban sok olyan feladat van A-n, aminek a vetlete F, ilyenpldul az F kiterjesztse, de nem csak az. Teht a 4.3. brn flfel mutat nyilakinjektv megfeleltetsek, a lefel mutatk pedig szrjektvek.

    Megjegyezzk mg, hogy F, vagyis egy olyan feladat, amelynek a vetlete F,mindig rsze F kiterjesztsnek. Ugyanez a programok (programfggvnyek) esetbennem igaz.

    Megvizsgljuk, milyen esetekben kvetkeztethetnk az A llapottren fennllmegoldsbl, ugyanerre a B llapottren, s fordtva. Ahhoz, hogy a feltteleket meg-fogalmazhassuk, szksgnk lesz nhny defincira.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    52/194

    50 4. KITERJESZTSEK

    F

    F SB

    ASSF

    kiterjeszts

    vetts

    kiterjeszts

    vetts

    4.3. bra. Kapcsolat A s B kztt.

    4.4. DEFINCI: B OVTETT IDENTITSLegyen B altere A-nak, B a B kiegszto altere A-ra, G A A relci.A G bovtett identits B felett, ha (a, a) G : a A, hogy (a, a) G

    prB(a) = prB(a

    )

    prB(a

    ) = prB(a).

    B

    a

    G

    G

    a

    a

    B

    A

    4.4. bra. Bovtett identits

    Ha egy feladat bovtett identits, az azt jelenti, hogy a feladat megengedi, hogy akiegszto altrbeli komponensek vltozatlanok maradjanak. Knnyu ltni a defincikalapjn, hogy egy feladat kiterjesztse s egy program kiterjesztsnek a programfgg-vnye egyarnt bovtett identits.

    4.5. DEFINCI: VETTSTARTSLegyen B altere A-nak, G A A feladat. A G vettstart B felett, haa1, a2 DG : (prB(a1) = prB(a2)) (prB(G(a1)) = prB(G(a2))).

    A vettstarts nem jelenti azt, hogy a relci nem fgg a kiegszto altr kompo-nenseitol, hiszen mint a 4.5. bra mutatja, kt azonos vetletu pont kpe lehet kln-bzo, csak a vetletk azonos. Ebben az esetben is igaz, hogy egy feladat kiterjesztsevettstart (mg a kpek is megegyeznek), s a program kiterjesztse, gy a kiterjesztsprogramfggvnye is vettstart.

    4.6. DEFINCI: FLKITERJESZTSLegyen B altere A-nak, G A A feladat, H B. Azt mondjuk, hogy a Gflkiterjeszts H felett, ha pr1B (H) DG.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    53/194

    4.3. KITERJESZTSI TTELEK 51

    B

    B

    A

    a1

    a2

    G(a1)

    G(a2)

    4.5. bra. Vettstarts

    H

    B

    B

    A

    DG

    4.6. bra. Flkiterjeszts

    A flkiterjeszts szemlletes jelentse, hogy a kiegszto altr felol nzve azrtelmezsi tartomnyban nincsenek lyukak. Most is igaz, hogy egy feladat kiter-

    jesztse a feladat rtelmezsi tartomnya fltt flkiterjeszts. Ugyancsak igaz, hogy aprogram kiterjesztsnek programfggvnye az eredeti programfggvny rtelmezsitartomnya fltt flkiterjeszts.

    Az imnt bevezetett defincik segtsgvel kimondhatk azok az lltsok, ame-lyek a kiterjesztsek s a projekci, valamint a megolds kztti kapcsolatot vizsglttelcsoportot alkotjk. A jellsek a 4.3. brnak megfeleloek.

    4.1. TTEL: KITERJESZTSI TTELEKLegyen B altere A-nak, B a B kiegszto altere A-ra, S program B-n, F B B feladat, S, illetve F S-nek, illetve F-nek a kiterjesztse A-ra. Legyentovbb F A A olyan feladat, melyre prB(F) = F, S A A pedigolyan program, amely ekvivalens S-sel B-n. Ekkor az albbi lltsok teljesl-nek:

    (1) ha S megoldsa F-nek, akkor Smegoldsa F-nek;

    (2) ha S megoldsa F-nek, akkor Smegoldsa F-nek;

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    54/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    55/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    56/194

    54 4. KITERJESZTSEK

    (2) Legyen a DF , a p(S)(a) s b = prB(a). Ekkor b p(S)(prB(a)),hiszen p(S) az S vetlete. Mivel S megoldja F-et, addik, hogy b F(prB(a)), de a feladat kiterjesztsnek defincija alapjn x pr1B (b) :x F

    (a), gy b

    F

    (a). Teht a megolds msodik felttele is teljesl.Ezzel a (7) lltst is bebizonytottuk.

    4.4. A feladat kiterjesztse s a specifikci ttele

    Emlkeztetnk a specifikci ttelnek megfelelo formban megadott llapottr,paramtertr, elo- s utfelttelek feladatokra. Pldaknt felrtuk kt szm sszegt:

    A = Z Z Zx y z

    B = Z Zx y

    Q : (x = x y = y)R : (z = x + y)

    Mi lesz ennek a feladatnak a kiterjesztse egy A = ZZZNL llapottrre?A vlasz elso pillantsra meglepo.

    A = Z Z Z N Lx y z u v

    B = Z Zx y

    Q : (x = x y = y)R : (z = x + y)

    ltalnossgban is igaz, hogy a feladat kiterjesztsnek specifikcija, a kibovtettllapottrtol eltekintve, megegyezik az eredeti feladat specifikcijval.

    4.5. A paramtertr kiterjesztse

    Termszetesen nemcsak az llapottr, de a paramtertr is kiterjesztheto. A specifikcittele szempontjbl kt esetet klnbztetnk meg.

    Legyen B egy paramtertr s B egy kiterjesztse. Ha egy feladat specifiklsraB helyett B-t hasznljuk gy, hogy az elo- s utfelttelek nem fggenek a csak aB-ben szereplo paramtervltozktl, akkor a feladat nem vltozik, hiszen b B :b pr1B (b) : (Qb = Qb s Rb = Rb).

    Ellenkezo esetben a feladat is megvltozhat. Tegyk fel, hogy az j feladatra tel-

    jeslnek a kvetkezo felttelek:

    b B : Qb =

    bpr1B (b)

    Qb

    b B : b pr1B (b)(Rb = s Rb Rb),ekkor azt mondjuk, hogy az j feladat finomtsa a rginek.

    4.3. llts: Ha egyF feladat finomtsa egyG feladatnak, akkorF szigorbb, mintG.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    57/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    58/194

    56 4. KITERJESZTSEK

    Teht az Sprogram megoldja az F feladat kiterjesztettjt.

    4.3. plda: Igaz-e, hogy ha S B B, A altere B-nek, akkor

    DprA(p(S)) = prA(Dp(S))?Megolds: Prbljuk meg az lltst ktirny tartalmazs beltsval bizonytani.DprA(p(S)) prA(Dp(S)) : Legyen a DprA(p(S)). Ekkor

    a A : (a, a) prA(p(S)) (b, b) p(S) : prA(b, b) = (a, a) b Dp(S) prA(b) = a prA(Dp(S)).

    prA(Dp(S)) DprA(p(S)) : Legyen a prA(Dp(S)). Ekkor

    b Dp(S) : prA(b) = a

    b

    B : (b, b)

    p(S)

    (a,prA(b)) prA(p(S)) a DprA(p(S)).s ezzel az lltst bebizonytottuk.

    4.7. Feladatok

    4.1. B = N, A = B N. F B B. F = {(q, r) | r = q + 1}. Mi az Fkiterjesztettje A-ra?

    4.2. Igaz-e, hogy ha S A A program, B altere A-nak, akkor S B B-ratrtno projekcijnak kiterjesztse A-ra azonos S-sel?

    4.3. Bizonytsuk be, hogy egy program kiterjesztettje valban program!

    4.4. A = A1A2 An. Mondjunk pldt olyan programra, amelynek egyetlenvaldi altrre vett projekcija sem program. (Ak = N, k = 1, . . . , n).

    4.5. Legyen A altere B-nek, F A A, F B B, F az F kiterjesztettje B-re.Igaz-e, hogy

    a) ha F = prA(F), akkor F az F kiterjesztettje?

    b) F = pr(1)A (F) ? ill. F = pr1A (F) ?

    4.6. Legyen F AA, F BB, F CC, F DD, ahol B = AA1,C = A

    A2, D = A

    A1

    A2, s legyen F, F, F az F kiterjesztse rendre

    B-re, C-re, D-re. Igaz-e, hogy F az F kiterjesztse D-re? Adja meg az F saz F kztti kapcsolatot a projekci s a kiterjeszts fogalmnak segtsgvel!

    4.7. B s C altere A-nak. F A A, F1 B B, F2 C C. F1 az Fprojekcija B-re. F az F2 kiterjesztse A-ra. Igaz-e, hogy az F1 feladat A-raval kiterjesztettjnek C-re vett projekcija megegyezik F2-vel?

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    59/194

    5. fejezet

    A megolds fogalmnakltalnostsa

    Ebben a fejezetben a megolds fogalmt ltalnostjuk. Eredetileg fltettk, hogy aprogram s a feladat llapottere azonos. Ezt a kiktst fogjuk kt szempontbl isgyengteni.

    5.1. A megolds fogalmnak kiterjesztse

    Eloszr a kiterjesztsi ttelek alapjn ltalnostjuk a megolds fogalmt. Az llapot-terek azonossga helyett csak azt kveteljk meg, hogy egy kzs llapottrre kiter-

    jesztve a feladatot s a programot, teljesljenek a megolds felttelei.

    5.1. DEFINCI: A MEGOLDS FOGALMNAK KITERJESZTSEA =

    i I Ai s B =

    j J Aj . F A A feladat s S B B

    program. Ha ltezik C llapottr, amelynek A s B is altere, s S kiterjesztseC-re eredeti rtelemben megoldsa F C-re val kiterjesztettjnek, akkor aztmondjuk, S kiterjesztettrtelemben megoldsa F-nek.

    Ez a definci az eredeti definci ltalnostsa, hiszen A = B = C esetn vissza-kapjuk azt.

    A kiterjesztsi ttelekbol, mghozz az 1-bol s az 5-bol azonnal addik, hogya definciban a ltezik szt minden-re cserlhetnnk. Az is nyilvnval, hogykzs tbbszrs tulajdonsg llapottr, vagyis aminek A is s B is altere, mindig

    ltezik: k I J Ak.Ezrt a defincit gy is megfogalmazhatjuk, hogy a C =

    k I J Ak llapot-

    trre kiterjesztve a feladatot s a programot, teljeslnek a megolds felttelei.A kiterjesztett megolds fogalmnak ismeretben rdemes a kiterjesztsi tteleket

    jra megvizsglni. Az 1. s 5. ttel jelentosgt a defincinl mr trgyaltuk. A 2.,illetve 3. ttel azt jelenti, hogy ha egy program megoldsa egy feladatnak, akkor akra program, akr a feladat llapottern is teljeslnek a megolds felttelei. Ugyanezfordtva mr csak bizonyos felttelek teljeslse esetn igaz (5., 6. ttel).

    57

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    60/194

    58 5. A MEGOLDS FOGALMNAK LTALNOSTSA

    5.2. Megolds ekvivalens llapottren

    Az ekvivalens direktszorzat defincijnak megfeleloen megmondjuk, hogy kt llapot-teret mikor tekintnk ekvivalensnek.

    5.2. DEFINCI: EKVIVALENS LLAPOTTR

    Azt mondjuk, hogy az A =

    i I Ai llapottr ekvivalens a B =

    j J Bjllapottrrel, ha ltezik olyan f : I J klcsnsen egyrtelmu megfeleltets(bijekci), hogy i I : Ai = Bf(i).

    Azt, hogy A,B,f-re a fenti definci teljesl, Af B-vel jelljk.

    Ha kt llapottr ekvivalens, akkor nemcsak az rtelmezsi tartomnyok, hanem azllapotterek kztt is ltezik klcsnsen egyrtelmu megfeleltets:

    f : B A s b B : i I : f(b)(i) = b(f(i)).

    5.3. DEFINCI: MEGOLDS TNEVEZSSELLegyenek A

    f B, F A A feladat s S B B program. Azt mondjuk,hogy Saz f tnevezssel megoldsa F-nek, ha

    1. DF Dfp(S)(1)f ,

    2. a DF : f p(S) (1)f (a) F(a).

    A definciban gy is fogalmazhattunk volna, hogy f p(S) (1)f megoldsa az eredeti rtelemben F-nek. A f p(S) (1)f relci jelentst gy is megfo-galmazhatjuk, hogy egy A-beli elemet tneveznk B-beliv, alkalmazzuk r a prog-

    ramfggvnyt, s a kapott elemeket visszanevezzk A-beliv.Vilgos, hogy a definci az eredeti ltalnostsa, hiszen ha A = B s f = idA,akkor visszakapjuk az eredetit.

    A kiterjeszts s az tnevezs segtsgvel megfogalmazhatjuk a megolds l-talnos defincijt:

    5.4. DEFINCI: AZ LTALNOSTOTT M EGOLDSLegyen F A A feladat s S B B program. Ha ltezik olyan C s Dllapottr, hogy C

    f D, A altere C-nek, B altere D-nek, s Skiterjesztse C-retnevezssel megoldsa F C-re val kiterjesztettjnek, akkor azt mondjuk, S ltalnos rtelemben megoldsa F-nek.

    5.3. Relci szerinti megoldsNem csak tnevezssel s nem csak ekvivalens llapottereket feleltethetnk megegymsnak. A megoldst definilhatjuk tetszoleges llapottereken definilt programs feladat esetn is, ha az llapottereket valahogy megfeleltetjk egymsnak.

    5.5. DEFINCI: RELCI SZERINTI MEGOLDSLegyen A s B tetszoleges llapottr, F A A, S B B program s B A. Azt mondjuk, hogy S szerint megoldsa F-nek, ha

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    61/194

    5.3. RELCI SZERINTI MEGOLDS 59

    1. DF Dp(S)(1) , s2. a DF : p(S) (1)(a) F(a).

    Emlkeztetnk arra, hogy a kompozci s a szigor kompozci megegyezik, halegalbb az egyik relci fggvny. Ezrt a megolds tnevezssel a relci szerintimegolds specilis esete. gy a kvetkezo ttel arra is alkalmazhat.

    5.1. TTEL: RELCI SZERINTI MEGOLDS TTELELegyen F tetszoleges feladat, az llapottere A, egy paramtertere B, elo- sutfelttele pedig Qb s Rb. Legyen S C C program s C Atetszoleges olyan relci, amelyre DF R . Definiljuk a kvetkezo fg-gvnyeket:

    Qb = Qb ,Rb = Rb .

    Ekkor ha b B : Qb lf(S, Rb ), akkor az Sprogram szerint megoldja azF feladatot.

    Bizonyts: A szerinti megolds defincija kt pontjnak teljeslst kell beltnunk.

    1. DF Dp(S)(1) .Legyen a DF. Ekkor b B : a Qb. Mivel DF R ,

    (1)(a) = s (1)(a) Qb .Felhasznlva, hogy Qb lf(S, Rb ):

    (1)

    (a) Dp(S) s p(S)((1)

    (a)) R

    b .Mivel Rb = Rb ,

    p(S)((1)(a)) D ,teht

    a Dp(S)(1) .

    2. a DF : p(S) (1) F(a).Legyen a DF. A bizonyts elso rszben lert lpseket folytatva: mivelp(S)((1)(a)) Rb ,

    (p(S)((1)

    (a))) Rb F(a).

    A kvetkezo pldban megmutatjuk, hogy ha Qb -t gyenge igazsghalmaz helyettigazsghalmazzal definilnnk, akkor a ttel nem lenne igaz.

    Legyen T = {1, 2}, F llapottere A = T, s a paramtertr is legyen ugyanez:B = T. Legyen F specifikcija:

    Q1 = {1}, R1 = {2};Q2 = , R2 = {1}.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    62/194

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    63/194

    6. fejezet

    Programkonstrukcik

    Ebben a fejezetben azzal foglalkozunk, hogyan lehet meglevo programokbl j

    programokat kszteni. Termszetesen sokflekppen konstrulhatunk meglevo prog-ramjainkbl j programokat, de most csak hromfle konstrukcis muveletet fo-gunk megengedni: a szekvencia-, az elgazs- s a cikluskpzst. Ksobb megmu-tatjuk, hogy ez a hrom konstrukcis muvelet elegendo is a programozsi feladatokmegoldshoz. Nemcsak definiljuk ezeket a konstrukcikat, de megvizsgljuk prog-ramfggvnyket s leggyengbb elofelttelket is.

    6.1. Megengedett konstrukcik

    Az elso definci arrl szl, hogy egy programot kzvetlenl egy msik utn vgezznkel. A definciban hasznlni fogjuk a kvetkezo jellst: legyen

    A,

    A,

    2(, ) ::= red(kon(, )).

    S1

    S1 S2

    S2

    6.1. bra. Szekvencia

    61

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    64/194

    62 6. PROGRAMKONSTRUKCIK

    6.1. DEFINCI: SZEKVENCIALegyenek S1, S2 A A programok. Az S A A relcit az S1 s S2szekvencijnaknevezzk, s (S1; S2)-vel jelljk, ha a A:

    S(a) = { A | S1(a)} {2(, ) A | S1(a) A s S2(())}.

    Vegyk szre, hogy ha kt olyan program szekvencijt kpezzk, amelyekrtkkszlete csak vges sorozatokat tartalmaz, akkor a szekvencia is csak vgessorozatokat rendel az llapottr pontjaihoz.

    Hasonlan egyszeruen ellenorizheto az is, hogy determinisztikus programokszekvencija is determinisztikus relci (fggvny).

    A programkonstrukcikat szerkezeti brkkal, gynevezett struktogramokkal szok-tuk brzolni.

    Legyenek S1, S2 programok A-n. Ekkor az S = (S1; S2) szekvencia struk-togramja:

    S

    S1

    S2

    A msodik konstrukcis lehetosgnk az, hogy ms-ms meglevo programot hajt-sunk vgre bizonyos felttelektol fggoen.

    6.2. DEFINCI: ELGAZSLegyenek 1, . . . , n : A L felttelek, S1, . . . , S n programok A-n. Ekkor azIF A A relcit az Si-kbol kpzett, i-k ltal meghatrozott elgazsnaknevezzk, s (1 : S1, . . . , n : Sn)-nel jelljk, ha a A:

    IF(a) =

    ni=1

    wi(a) w0(a),

    ahol i [1..n]:

    wi(a) =

    Si(a), ha i(a); klnben;

    s

    w0(a) =

    {a , a , a , . . . } , ha i [1..n] : i(a); klnben.

    Az elgazs defincijban nem ktttk ki, hogy a felttelek diszjunktak, teht azllapottr egy pontjban tbb felttel is igaz lehet. Ebben az esetben az elgazs azsszes olyan sorozatot hozzrendeli ehhez a ponthoz, amit legalbb egy olyan programhozzrendel, amelynek a felttelrsze ebben a pontban igaz. Ezrt ha a felttelek nemdiszjunktak, akkor a determinisztikus programokbl kpzett elgazs lehet nemdeter-minisztikus is.

    Az elgazs defincijt gy is felrhattuk volna:

    IF =

    ni=1

    Si|i {a , . . . A | a ni=1

    i}.

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    65/194

    6.1. MEGENGEDETT KONSTRUKCIK 63

    1

    2

    S2

    S2

    S1

    S2

    S1

    6.2. bra. Elgazs

    Ha csak olyan programokbl kpznk elgazst, amelyek csak vges sorozatokatrendelnek az llapottr minden pontjhoz, az elgazs akkor is rendelhet valamelyikponthoz (azonos elemekbol ll) vgtelen sorozatot, ha a felttelek igazsghalmazainem fedik le az egsz llapotteret.

    Megjegyezzk, hogy a definci szerint, ha egy pontban egyik felttel sem teljesl,az elgazs elszll, ellenttben a legtbb gyakorlatbab hasznlt programnyelvvel.

    Legyenek S1, S2, . . . , S n programok, 1, 2, . . . , n felttelek A-n. Ekkor azIF = (1 : S1, 2 : S2, . . . , n : Sn) elgazs struktogramja:

    IF

    \ 1 \ 2 \ . . . \ nS1 S2 . . . Sn

    A harmadik konstrukcis lehetosgnk az, hogy egy meglevo programot egyfeltteltol fggoen valahnyszor egyms utn vgrehajtsunk. A ciklus definilshozszksgnk van tovbbi kt jellsre: vges sok, illetve vgtelen sok sorozatkonkatencijnak redukltjra.

    Legyenek 1, 2, . . . , n1 A s n A,n(

    1, 2, . . . , n) ::= red(kon(1, 2, . . . , n)).

    Legyenek i

    A (i

    N),

    (1, 2, . . . ) ::= red(kon(1, 2, . . . )).

    6.3. DEFINCI: CIKLUSLegyen : A L felttel s S0 program A-n. A DO A A relcit azS0-bl a felttellel kpzett ciklusnaknevezzk, s (, S0)-lal jelljk, ha

    a / :DO(a) = {a}

  • 7/31/2019 Bevezetes a Programozasba-Konyv

    66/194

    64 6. PROGRAMKONSTRUKCIK

    a :DO(a) = { A | 1, . . . , n A : = n(1, . . . , n) s

    1

    S0(a) s i [1..n 1] : (i

    A

    si+1 S0((i)) s (i) ) s (n A vagy(n A s (n) ))}

    { A | i N : i A : = (1, 2, . . . ) s1 S0(a) s i N : (i A s i+1 S0((i)) s(i) )}.

    Elso rnzsre a definci kiss bonyolult. Nzzk meg alaposabban! A ciklus-

    S0

    S0S0

    S0

    S0

    S0

    A

    a2

    a3

    a1

    S0

    S0

    S0

    6.3. bra. Ciklus

    magot S0 vges sokszor alkalmazhatjuk egyms utn, mert vagy olyan pontbajutunk, ahol a ciklusfelttel nem teljesl (a 6.3. brn az a1 pont), vagy az S0vgtelen sorozatot rendel egy ponthoz (a 6.3. brn az a2 pont). Ezeket az esetekettartalmazza a definciban az elso halmaz. A harmadik lehetosg (a 6.3.