Strukturált és nem strukturált programok Szlávi Péter ELTE Informatika Szakmódszertani Csoport szlavi@ludens.elte.hu http://izzo.inf.elte.hu/szlavi
Strukturált és nem strukturált programok Tartalom 1. Alapvető definíciók 2. Alapvető tételek 3. A nem-strukturáltság jellemzői 4. A program bonyolultsága 2019.08.21. Strukturált és nem strukturált programok
Strukturált és nem strukturált programok 1. Alapvető definíciók Alapirodalom: Varga L. -- Programok analízise és szintézise Strukturált programszerkezetek: blokk-szekvencia (begin f; g end = B(f,g)) elágazás (if p then f else g = ITE(p;f,g)) ciklus (while p do f = WD(p;f)) Program (vezérlő-) gráf: csomópontok függvény-csomópont predikátum-csomópont gyűjtő csomópont irányított élek 2019.08.21. Strukturált és nem strukturált programok
1. Alapvető definíciók (folytatás) Valódi program, amely gráfja teljesíti: 1. Egy bemenő- és egy kimenő él 2. Csomópontjai: predikátum-/függvény-/gyűjtő csomópont 3. Minden csomóponton át vezet út a bemenő élből a kimenő élbe. Egy rossz példa: Továbbiakban program alatt valódi programot értünk. * a kékkel jelölteken át nem vezet út a kimenőélhez 2019.08.21. Strukturált és nem strukturált programok
1. Alapvető definíciók (folytatás) Elemi programgráfok (strukturált programszerkezetek gráfjai): * 2019.08.21. Strukturált és nem strukturált programok
1. Alapvető definíciók (folytatás) A vezérlőgráf lebontása: a gráfban előforduló elemi programgráfok helyettesítése függvény-csomóponttal 2019.08.21. Strukturált és nem strukturált programok
1. Alapvető definíciók (folytatás) 2019.08.21. Strukturált és nem strukturált programok
1. Alapvető definíciók (folytatás) 2019.08.21. Strukturált és nem strukturált programok
1. Alapvető definíciók (folytatás) Strukturált program: az a program, amely gráfja lebontható egyetlen függvény-csomóponttá. Egy példa. 2019.08.21. Strukturált és nem strukturált programok
Strukturált és nem strukturált programok 2. Alapvető tételek Lemma: Ha egy (valódi) program gráfjának élei száma: e, pred./ függv./gyűjtő csomópontjainak száma: //, akkor teljesülnek: e = 3++1, ill. = Biz.: megszámolni az egyes bemenő és kimenő éleket: be = ++2, ki = +2+. Nyilvánvaló: e = be+1 = ki+1. Ebből már következik az állítás. Jelölések: P programgráfhoz: e(P)/ (P)/(P)/ (P):=... 2019.08.21. Strukturált és nem strukturált programok
2. Alapvető tételek (folytatás) Böhm-Jacopini tétele (a strukturált programozás alaptétele): Bármely valódi programhoz meg lehet konstruálni a vele ekvivalens strukturált programot. Biz.: f-hez megkonstruáljuk a vele ekvivalens strukturál-tat… … f-t esetleg ekvivalensen transzformálva felbontjuk valahány valódi (rész)programra: f B(g,h)/ITE(p;g,h)/WD(p;g) ahol g, h éleinek száma kevesebb f élszámánál. 2019.08.21. Strukturált és nem strukturált programok
2. Alapvető tételek (folytatás) Tfh: e(f)>2 azaz legalább 2 csomópontja van (ahol e(x):= x programgráf éleinek száma) 1. eset: f=B(g,h) ekkor h valódi program és e(h)=e(f)-1. Vizsgálandó: h. 2. eset: f=ITE(g,h) ahol g, h valódi programok és (g)<(f), (g)=(f) és a lemmából: e(g)=(g)+3(g)+1<(f)+3(f)+1=e(f) ... h-ra hasonlóan. Továbbvizsgálandó: h és g. g h p g p h 2019.08.21. Strukturált és nem strukturált programok
2. Alapvető tételek (folytatás) 3. eset: Mivel 2 kimenő él jön ki az f’-ből, ezért biztosan van legalább egy predikátum csomópont az f’-ben. 3 al-eset a gyűjtőpontot követő csomópont fajtája szerint: 3a) 3b) 3c) f’ Cél a 3c) esethez eljutni p 2019.08.21. Strukturált és nem strukturált programok
2. Alapvető tételek (folytatás) 3b) 3c) f” f” f” p g h Ki p f” Persze be kell látni, hogy a transzformációk során a továbbelemzendő struk-túra élszáma (a sorozatos transzformáció után) kisebb. 2019.08.21. Strukturált és nem strukturált programok
2. Alapvető tételek (folytatás) Felülről-lefelé kifejtés: Az f programot az első szinten megvalósítjuk B(g,h)/ITE(p;g,h)/WD(p;g) valamelyikével, majd a p/g/h finomításokként kapott programokat ugyanígy valósítjuk meg, amíg „elemi” utasításokig el nem jutunk. Felülről-lefelé kifejtés tétele: Az f program felülről-lefelé kifejtésekor: a) f=B(g,h): g megválasztható, h egyértelmű; b) f=ITE(p;g,h): p megválasztható; g,h egyértelmű; c) f=WD(p;g): p megválasztható; g egyértelmű; 2019.08.21. Strukturált és nem strukturált programok
3. A nem-strukturáltság jellemzői Nem strukturált alapszerkezetek: Ciklusok -- 2019.08.21. Strukturált és nem strukturált programok
3. A nem-strukturáltság jellemzői (folytatás) Nem strukturált alapszerkezetek: Elágazások -- 2019.08.21. Strukturált és nem strukturált programok
3. A nem-strukturáltság jellemzői (folytatás) Tétel: Egy program akkor és csak akkor nem strukturált, ha annak részgráfjaként előfordul a több ki-, ill. belépő éllel rendelkező ciklus vagy elágazás. Tétel: A nem strukturált programnak a nem strukturált alapszerkezetek közül legalább kettőt kell tartal-maznia. 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága Ciklikus bonyolultság: A P program ~ m(P)=e(P)-((P)+(P)+(P)) Tétel: P: m(P)=(P)+1 Biz.: lemmából m(P)= e(P)-((P)+(P)+(P))= =3(P)+(P)+1-((P)+(P)+(P))= =2(P)-(P)+1= =2(P)-(P)+1=(P)+1 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Tétel: Ha P nem strukturált, akkor m(P)>2 Példa: m(P)=5+1=6 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Lényeges bonyolultság: M(P):=m(P)-k ahol k:=a P-beli alapszerkezetek száma Tétel: Ha P strukturált, akkor M(P)=1, egyébként >1 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Példa: M(P)=m(P)-k=6-2=4 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Más bonyolultságmértékek „Alapelképzelés”: a program bonyolultsága () additíven függ részeinek bonyolultágától, azaz f=B(g,h) (f)=(g)+(h) f=ITE(p;g,h) (f)=(p)+(g)+(h) f=WD(p;g) (f)=(p)+(g) Megjegyzés: több dimenziós ( ) esetben koordinátánként 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Más bonyolultságmértékek Módosított ciklikus bonyolultság: m’(P):=(m(P), m(P)+l(P)), ahol l(P):=logikai kifejezések bonyolultsága Példák: f m(f) m’(f) Ha p akkor g 2 (2,2+0) Ha pq akkor g 2 (2,2+1) Ha p akkor Ha q akkor g 3 (3,3+0) (p, q = „egyszerű” feltétel; g „egyszerű” utasítás) 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Mélységi bonyolultság (m”): m”(értékadás):=1 f=B(g,h) m”(f)=m”(g)+m”(h) f=ITE(p;g,h) m”(f)=2*(m”(g)+m”(h)) f=WD(p;g) m”(f)=2*m”(g) Megjegyzés: csak a struktúrát veszi figyelembe, hatványozottan növeli a bonyolultságot a „mélyen beágyazás” 2019.08.21. Strukturált és nem strukturált programok
4. A program bonyolultsága (folytatás) Példák: f m”(f) Ha pq akkor g 2 *m”(g) Ha p akkor Ha q akkor g 2*(2*m”(g))= =4*m”(g) Absztrakciós bonyolultság (m”’): m”’(P):=N+(i=1..N) m”(Pi), ahol N=eljárások/függvények... száma Pi=i. eljárás/függvény... 2019.08.21. Strukturált és nem strukturált programok