A struktúrált programozás



Hasonló dokumentumok
ALGORITMUSOK, ALGORITMUS-LEÍRÓ ESZKÖZÖK

A pályázat címe: Új elméleti és numerikus módszerek tartószerkezetek topológiaoptimálására

Fuzzy rendszerek. A fuzzy halmaz és a fuzzy logika

KOMBINATORIKA ELŐADÁS osztatlan matematika tanár hallgatók számára. Szita formula

Vezérlési szerkezetek

/11 Változtatások joga fenntartva. Kezelési útmutató. UltraGas kondenzációs gázkazán. Az energia megőrzése környezetünk védelme

Algoritmizálás és adatmodellezés tanítása 1. előadás

Bevezetés a programozásba. 3. Előadás Algoritmusok, tételek

Algoritmusok és adatszerkezetek gyakorlat 09 Rendezések

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

Webprogramozás szakkör

Vezérlési szerkezetek

Egyszerű algoritmusok

Sugárszivattyú H 1. h 3. sugárszivattyú. Q 3 h 2. A sugárszivattyú hatásfoka a hasznos és a bevezetett hidraulikai teljesítmény hányadosa..

Java programozási nyelv

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

Dr. Mileff Péter

Adminisztrációs feladatok Strukturált programok A C programnyelv elemei

Békefi Zoltán. Közlekedési létesítmények élettartamra vonatkozó hatékonyság vizsgálati módszereinek fejlesztése. PhD Disszertáció

BASH script programozás II. Vezérlési szerkezetek

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Számítógép-architektúrák II.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

A C# programozási nyelv alapjai

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Amortizációs költségelemzés

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

Dr. Jelasity Márk Mesterséges Intelligencia I. (I602, IB602)

Üzemeltetési kézikönyv

8. Programozási tételek felsoroló típusokra

Algoritmus fogalma. Mi az algoritmus? HF: Al Khwarizmi. Egy adott probléma megoldásának leírása elemi lépések sorozatával

Statisztikai próbák. Ugyanazon problémára sokszor megvan mindkét eljárás.

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

4 2 lapultsági együttható =

Die Sensation in der Damenhygiene Hasznos információk a tamponokról

Algoritmizálás + kódolás C++ nyelven és Pascalban

Kinematika február 12.

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

Philosophiae Doctores. A sorozatban megjelent kötetek listája a kötet végén található

Programozási módszertan. Mohó algoritmusok

Táblázatok fontosabb műveletei 1

1. MECHANIKA-MECHANIZMUSOK ELŐADÁS (kidolgozta: Szüle Veronika, egy. ts.) 1. Alapfogalmak:

d(f(x), f(y)) q d(x, y), ahol 0 q < 1.

7. BINÁRIS FÁK 7.1. A bináris fa absztrakt adattípus 7.2. A bináris fa absztrakt adatszerkezet

Műszaki folyamatok közgazdasági elemzése. Kevert stratégiák és evolúciós játékok

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

1. Holtids folyamatok szabályozása

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

angolul: greedy algorithms, románul: algoritmi greedy

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Algoritmizálás és adatmodellezés 2. előadás

Cölöpcsoport függőleges teherbírásának és süllyedésének számítása

Algoritmusok tervezése

A C programozási nyelv II. Utasítások. A függvény.

AERMEC hőszivattyú az előremutató fűtési alternatíva

Szerelési útmutató FKC-1 síkkollektor tetőre történő felszerelése Junkers szolár rendszerek számára

Eljárások, függvények

Adatszerkezetek 7a. Dr. IványiPéter

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

A bankközi jutalék (MIF) elő- és utóélete a bankkártyapiacon. A bankközi jutalék létező és nem létező versenyhatásai a Visa és a Mastercard ügyek

Dinamikus programozás vagy Oszd meg, és uralkodj!

2018, Funkcionális programozás

Optikai elmozdulás érzékelő illesztése STMF4 mikrovezérlőhöz és robot helyzetérzékelése. Szakdolgozat

AWK programozás, minták, vezérlési szerkezetek

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

FFT =0.. 1! 1 %=0.. 1! 2. Legyen az ú.n. egységgyök a következő definícióval megadva: &# = 3

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Intelligens Rendszerek Elmélete

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Beépítési és kezelési utasítás. Einbau- und Bedienungsanleitung. Einbau- und Bedienungsanleitung F. Einbau- und Bedienungsanleitung

Periodikus figyelésű készletezési modell megoldása általános feltételek mellett

Rendező algoritmusok. Tartalomjegyzék. Készítette: Gál Tamás

METROLÓGIA ÉS HIBASZÁMíTÁS

ABB Teach Pendant programozás segédlet

Felvételi tematika INFORMATIKA

BASH SCRIPT SHELL JEGYZETEK

Algoritmusok és adatszerkezetek I. 1. előadás

Programozás alapjai (ANSI C)

Vezérlési szerkezetek

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Gyakorló feladatok Gyakorló feladatok

Kiegészítés a felületi hullámossághoz és a forgácsképződéshez. 1. ábra. ( 2 ) A szögváltozó kifejezése:

Forráskód formázási szabályok

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Példák ekvivalencia relációra (TÉTELként kell tudni ezeket zárthelyin, vizsgán):

2018, Diszkrét matematika

Bevezetés a kémiai termodinamikába

Algoritmizálás, adatmodellezés 1. előadás

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

Átírás:

Proramtervezés smeretek -8-1 - A struktúrált proramozás A struktúrált proramozás olyan proramozás elvek összessée, amelyek seítenek meteremten, oy a proram szöveszerkezete tükrözze a proram véreajtása során követett vezérlés folyamatot. A struktúrált proramozás során a műveletekre összpontosítunk, az adatok szerepe, szerkezete másodlaos, de eyáltalán nem lebecsülendő. Alkalmazásával könnyebben és atékonyabban leet proramot felépíten és könnyebb a proram meértése. A struktúrált proramozás elv mejelenését Edser W. Djkstra nevéez kapcsoljuk az 1968-as ckke révén. A jó proram smérve: 1. Keléít a követelményeket, a felasználó ényeket. 2. Helyesen, bamentesen működk. 3. Amennyre szüksées, atékony. 4. Teljesítése dő- és költséatáron belül történk. 5. A jövőben módosítató. (Uprade.) Ez mefelelő dokumentáltsáot s jelent. A struktúrált proramozás általában eyütt jár a felülről lefelé proramtervezés koncepcóval. (Lásd később.) A cél a bonyolultsá kézbentartása. Az ember ay általában neezen tud eyazon dőpontban több célra koncentráln. A struktúrált proramozás elvek előseítk ezen eybeesések szétválasztását. Ey skolapélda erre az alább mellékelt proram, amelyben kezdő proramozók által elkövetett tpkus ba találató. A proram a New Haven- esőátlaot kszámító proram néven vált smertté. A proram feladata: Nap csapadékmennyséeket kell ey proram számára meadn, amely számadatokból a proram átlaot számol. Az adatok sorát ey 99999-es szám zárja, amelyet már nem kell fyelembe venn a csapadékátla kszámításánál. Neatív számot nem szabad elfoadn csapadékmennysének, anem elyette az adatot újra be kell kérn. A bás verzó következk alább. // Soloway, CACM 9-86 p. 853 ckkbel proram pszeudokódosítva 1. 2. VÁLTOZÓK Össze, Eső, Átla R 3. Számláló N 4. 5. Össze 0 6. Számláló 0 7. OUTPUT ( Kérem az eső mennyséét! ) 8. INPUT (Eső) 9. WHILE Eső 99999 DO 10. WHILE Eső < 0 DO 11. OUTPUT ( Eső mennysée nem leet neatív. Adja me újra! ) 12. INPUT (Eső) 13. Össze Össze + Eső 14. INC (Számláló) 15. OUTPUT ( Kérem az eső mennyséét! ) 16. INPUT (Eső) 17. IF Számláló > 0 18. THEN OUTPUT ( Átlaos esőmennnysé =, Össze / Számláló) 19. ELSE OUTPUT ( Nncs értékelető adat, átlaszámítás nem történt! ) 20. STOP 21. // ------------- New Haven- esőátla proram vée -------------------------------------

Proramtervezés smeretek -8-2 - A fent bás verzó kpróbálását ey kapkodó felasználó a -3-as szám beépelésével kezdte, majd észrevéve a bát mejedt, és a 99999-cel k akart lépn a proramból, de az számoln kezdett. Nyílvánvalóan a proram nem felelt me az előírt elvárásoknak. Tanulsá: Neéz eydejűle több célt s követn! Alább mellékelünk ey leetsées elyes változatot. New Haven- esőátla, javított változat 1. 2. // ---------------------------- Ey procedúra a elyes nputra --------------------- 3. Helyes_Input (@x) // ------------------------------------------------ A procedúra fejléce 4. Output paraméter : x R 5. OUTPUT ( Kérem az eső mennyséét! ) 6. INPUT (x) 7. WHILE x < 0 DO 8. OUTPUT( Eső mennysée nem leet neatív. Adja me újra! ) 9. INPUT (x) 10. RETURN (x) // --------------------------------------------------------Procedúra vée 11. 12. // =================================================== Főproram 13. KONSTANS Szentnel = 99999 (Szentnel jelentése őrszem) 14. VÁLTOZÓK Össze, Eső R 15. Számláló N 16. 17. Össze 0 18. Számláló 0 19. CALL Helyes_Input (@Eső) 20. WHILE Eső Szentnel DO 21. Össze Össze + Eső 22. INC (Számláló) 23. CALL Helyes_Input (@Eső) 24. IF Számláló > 0 25. THEN OUTPUT ( Átlaos esőmennnysé =, Össze / Számláló) 26. ELSE OUTPUT ( Nncs értékelető adat, átlaszámítás nem történt! ) 27. STOP // ========================================= Főproram vée A Helyes_Input procedúra füvény formában s meírató lett volna. Ebben az esetben az alább alakban állatna. Helyes_Input R // ------------------------------------------------ A procedúra fejléce 1. // Nncs nput paramétere, a vsszaadott füvényérték valós 2. OUTPUT ( Kérem az eső mennyséét! ) 3. INPUT (x) 4. WHILE x < 0 DO 5. OUTPUT( Eső mennysée nem leet neatív. Adja me újra! ) 6. INPUT (x) 7. Helyes_Input x 8. RETURN // --------------------------------------------------------Procedúra vée A füvény változatot asználva a proramban a CALL Helyes_Input (@Eső) utasítás elyett az Eső Helyes_Input utasítást íratnánk.

Proramtervezés smeretek -8-3 - A struktúrált proramozás a proramokat (és folyamatábrákat) árom alapelemből épít föl: Szekvenca Cklus Eláazás p ams az p ams az Jellemzőjük: 1. Mnden építőelemnek csak ey belépés és ey klépés pontja van. 2. A belépés pont a struktúra elején, a klépés a véén van. Az eyes alapelemek formulával s leíratók. A szekvenca formulája: S( ) Ha több szekvenca követ eymást, akkor azokat íratjuk ey közös zárójelben felsorolva és vesszővel elválasztva eymástól. A pszeudokódban általában az értékadás, procedúraívás, nput-output, adatmozatás, füvényérték kszámítás, adattranszformácó a mefelelője. A cklus formulája: C( p; ) A p tt predkátum, a cklusma a predkátum az értéke esetén kerül véreajtásra. Pszeudokódban: WHILE p DO Az eláazás formulája: E( p;, ) A p tt predkátum, melynek az értéke esetén az elsőnek feltüntetett, ams értéke esetén a másodknak feltüntetett kerül véreajtásra. Eykük leet üres s. Ebben az esetben elyükre a mínusz ( - ) jelet, vay az üres almaz jelet íratjuk. Pszeudokódban: IF p THEN ELSE Fyeljük me, oy mnd a cklus, mnd az eláazás formulában a predkátum a formula elején folal elyet és a formula több részétől pontosvessző választja el, mí másol az elválasztás a vessző jellel történk Defnícó: Két proram ekvvalencája Két proramot ekvvalensnek nevezünk, a mnden leetsées uyanazon nput esetén uyanazon outputot eredményezk. (Uyanazon kezdőállapotból uyanazon véállapotba jutnak el.)

Proramtervezés smeretek -8-4 - Defnícó: Proramráf A proramráf, vay vezérlés ráf olyan összefüő rányított ráf, amely vonalakból (folyamatvonalakból), szekvencákból (füvényekből), eláazásokból (predkátumokból, ey befutó, két kfutó él) és yűjtő szmbólumokból (két befutó, ey kfutó él) épül fel. A vonalak a ráf élet adják, a többek ped a ráf csomópontjat. A predkátumok az adatmezőt osztják föl két dszjunkt részre. P ( d ) az, = ams a d D k a d D l D = Dk Dl és Dk Dl = A proramráf struktúrájának vzsálatakor ey bemenő (START) és ey kmenő (STOP) szmbólumra korlátozódatunk, am az általánossáot nem csorbítja, a sok STOP-ot eyetlen közös STOP-ba torkoltatjuk. Az ábrázolások során a bemenő és a kmenő szmbólumot el s fojuk ayn, mvel ez a mnket érdeklő következtetésenket nem foja befolyásoln. Az eláazásnak (predkátumnak) ey bemenő és két kmenő éle van, a yűjtő szmbólumnak két bemenő és ey kmenő éle van, pontosabban az általánossá csorbítása nélkül ezt feltételezetjük, meköveteletjük a proramráf lyen alakban történő felrajzolását. A leírtakból következk, oy a sokrányú eláazást több kétrányúval kell elyettesíten. A proramráf meadása, leírása élalmaz seítséével a következő módon történk. A ráf mnden csomópontja kap ey menevezést, azonosítót. Ksebb méret esetén ez leet ey betű például. Ezt követően felsoroljuk kapcsos zárójelek között a ráfot alkotó éleket, mnt aoy ey vées almaz elemet szokás felsoroln. Mnden él ey csomópont párosból áll. A páros első taja az él kezőpontja, a másodk ta az él vépontja. A párost zárójelbe tesszük és a páros két taját vesszővel választjuk el eymástól. Uyancsak vesszőt teszünk az eyes élek közé a felsorolásban. Eláazásból knduló élek vépontjánál ey / jellel elválasztva vay betűvel jelezzük, oy az az vay a ams áról van-e szó. Az élek felsorolás sorrendje általában kötetlen, tetszőlees leet. Ezt a precíz meadást, amely ey kcst terjenős, tömörebbé, uyanakkor talán ey kssé neezebben követetővé, de eyértelművé tudjuk tenn a következő módon. Ha csökkenten akarjuk a zárójelek számát, akkor az élt meadó párost közbezáró zárójelpárt elayatjuk, de ebben az esetben ey nylat teszünk a páros tajat elválasztó vessző elyére, szmbolzálva az él rányítottsáát. Tömör írásmódot s alkalmazatunk, a a yűjtő csomópontokat kayjuk a leírásból a belőle kvezető élt ozzáfűzve a bemenő élez. Tömörebben írató az eláazás s úy, oy a jelet követően először az az á élének vépontját, majd a ams á élének vépontját adjuk me vesszővel elválasztva eymástól. Ebben az esetben az az és a ams á élvéet zárójellel fojuk eybe. Példa: Leyen a feladat ey tömbben lévő elemek között a T tulajdonsáúaknak a tömb elejére yűjtése és a darabszámuk meállapítása, a T tulajdonsáal nem rendelkezőknek ped a tovább, a tömb véén lévő elyekre yűjtése. Az alortmus (most ey teljes proramot készítünk) lényee, oy két ndexet mozatunk a tömbön. Az eyk () az első eleme elé mutat, a másk (j) az utolsó elem möé kezdetben. Ezután felváltva mozatjuk az ndexeket mndadd, amí a j nem T tulajdonsáúra mutat, az ped T tulajdonsáúra. Amkor mndkettőnél meváltozk az elem mnősée (rendelkezés a T tulajdonsáal, vay nem), vay ped a két mutató elér eymást, elmey eymás mellett, akkor meállunk. Ha mé nem érték volna el eymást, akkor a mutatott két elemet felcseréljük, ezáltal a T tulajdonsáú felülre, a nem T tulajdonsáú alulra kerül. Ha a mutatók már elérték, vay elayták eymást, akkor befejeztük az átelyezéseket és következk a véeredmények kíratása.

Proramtervezés smeretek -8-5 - Alább meadjuk az alortmus folyamatábráját és mellette ey, a folyamatábrának mefelelő pszeudokódot. A proram neve leyen P. START X 0 j Hossz[X]+1 < j en DEC( j ) be nem X, j STOP k PROGRAM P VÁLTOZÓK X R 20,j N INPUT (X) 0 j Hossz[X]+1 WHILE < j DO DO DEC(j) WHILE DO INC() IF OUTPUT(X, j) STOP ( x ) ( j ) T j > WHILE T ( x ) ( j) < j THEN x és x j felcserélés en ( x ) ( j ) T j > nem INC( ) en ( x ) ( j) T nem nem <j en x és x j felcserélése A folyamatábra és a pszeudokód után most elkészítjük a proramráfot, amely a folyamtábrára épül. A folyamatábráról leválasztjuk a START és a STOP szmbólumokat meayva a ozzájuk kapcsolódó folyamatvonalakat. (Ha több STOP lenne az ábrán, akkor azokat eyetlen közös STOP-ba futtatnánk össze előbb yűjtő szmbólumok bektatásával.) A folyamatábrában az nput-output szmbólumokat télalappal elyettesítjük és a szmbólumokban lévő szöveet s jelekre, azonosítókra (a példánkban az ábécé naybetűre)

Proramtervezés smeretek -8-6 - változtatjuk, mert most nem az a lényees, oy azok mt csnálnak, bár me s ayatnánk őket. Ez azonban meneezítené a szerkezet áttekntését. A proramráf mellett meadjuk a proramráf élalmazos leírását teljes és rövdített, tömör formában s. Teljes élalmazos leírás A B C P = { (START, A), (A, B), (B, C), (C, D), (D, E/), (E, STOP), (D, F/), (F, G), (G, H), (H, I/), (H, F/), (I, J), (J, K), (K, L/), (K, I/), (L, N/), (L, M/), (M, C) } D nem E Tömör élalmazos leírás en F G P = { START A, A B, B D, D (G, E), E STOP, G H, H (G, J), J K, K (J, L), L (N, D)} en H nem I J en K nem M nem L en N Látatjuk, oy a proramráf merajzolása a teljes élalmazos leírásból eyszerűen mevalósítató, de leet, oy az eyes csomópontok eometrala másként elyezkednek majd el a papíron, mnt eredetle voltak, vszont a közöttük lévő kapcsolatok (élek) uyanolyanok maradnak. A tömör élalmazos leírásból már neezebb a rajz elkészítése, mvel látatóan a leírásból kmaradtak a yűjtő csomópontok, teát azokat rajzolás közben kell elyreállítan, amt leet, oy csak dőben eltolva tudunk metenn

Proramtervezés smeretek -8-7 - Defnícó: Valód proram Ey proramot valód proramnak nevezünk, a: 1. proramráfja vées számú nem zérus bemenő éllel és kmenő éllel rendelkezk, 2. proramráfjának csomópontja predkátumok, füvények és yüjtők, 3. proramráfjának mnden csomópontján keresztül vezet lealább ey útvonal, amely ey bemenő éllel és ey kmenő éllel rendelkezk ( a proramráf kezdő élétől a klépés él vezet). A valód proramok almaza meszámolató. Az ey élből álló proramból kndulva csomópontok eyenként ozzáadásával az összes valód proram előáll. Példa nem valód proramra: A B C D E Kváz-struktúrált szerkezet, az smétlés: Formulája I( p; ) Kváz-struktúrált smétlés Ekvvalens struktúrált proramráf p p Proramráf formulával: I( p; )=S(, C( p; ) )

Proramtervezés smeretek -8-8 - A későbbekben az smétlést s alapelemként fojuk véett. kezeln az eyszerűbb következtetések Példa nem struktúrált proramrész átalakítására ekvvalens struktúrálttá: Nem struktúrált proramrész Ekvvalens struktúrált proramrész K: S1 S1 IF B THEN S2 GOTO K WHILE B DO S2 S1 Proramráffal: S1 S1 B B S2 S2 S1 Proramráf élalmazzal: {START S1, S1 B, B (S2, STOP), S2 S1 } Proramráf formulával: S( S1, C( B; S( S2, S1 ) ) ) P éldák összetett struktúrára (több szntű struktúráltsá). A B C D E F E( A; S( B, D ), E( C; E, F ) )

Proramtervezés smeretek -8-9 - A B C D G E H F I E( A; E( B; S( D, G ), C( E; H ) ), S( C, F, I ) ) Kváz struktúrált folyamatábrák: a REPEAT UNTIL átírása struktúráltra. Kváz struktúrált proramrész Ekvvalens struktúrált proramrész REPEAT S S WHILE F DO UNTIL F S A DO WHILE átírása struktúráltra. Kváz struktúrált proramrész Ekvvalens struktúrált proramrész DO S S WHILE F DO WHILE F S Defnícó: A vezérlőráf lebontása A vezérlőráf lebontásának nevezzük azt az eljárást, melynek során a struktúrált alapszerkezetek valamelykét ey füvény csomóponttal elyettesítjük, és ezt mndadd folytatju k, amí ez leetsées. Az eyetlen csomópontból álló ráfot eye tlen éllel elyettesítjük. ( Az eyetlen rányított él neve üres proram.)

Proramtervezés smeretek -8-10 - Példák lebontásra.

Proramtervezés smeretek -8-11 - Defnícó: A struktúrált proram Struktúrált proramnak nevezzük azt a proramot, amelynek vezérlőráfja lebontató az önmaában álló rányított élre. Mnt látató, az előző két proramráf lebomlott az önmaában álló írányított élre, ezért a nekk mefelelő proram struktúrált. Példa valód, nem struktúrált proramra és lebontására. A jelen példában eyetlen lebontás lépést sem tudunk véezn. A proramráf nem bontató le az eyetlen önálló rányított élre, teát a proram nem struktúrált. Nem mnden eset lyen

Proramtervezés smeretek -8-12 - feszes, van, amkor néány lebontás lépés metétele után nem tudunk már tovább aladn mé melőtt elértük volna az eyetlen önálló rányított élt. Tétel: A struktúrált proram formulája Ey f proram akkor és csak akkor struktúrált proram, a formulája felírató az S() vay a C(p;) vay az E (p;,) alakban, aol p predkátum, és ped struktúrált proramok (beleértve az üres proramot s, azaz melynek proramráfja az önmaában álló rányított él). Példa struktúrált proram formulájára. Meadjuk a tömbelemeket a T tulajdonsá szernt a saját tömbjükben szétváloató proramnak a formuláját, mvel az (kváz)struktúrált proram. (Csak a csomópontok nevet asználjuk, a tartalmat nem írjuk k, oy rövdebb leyen a formula.) f = S( A, B, C( D; S( I( H; G ), I( K, J ), E( L, ) ) ), E ) Tétel: Bőm Jacopn tétel (a struktúrált proramozás alaptétele) Mnden valód proram meadató ekvvalens, struktúrált proram formájában s. A tétel csak az átalakítatósáot állítja, a oyanról nem nylatkozk. A tételnek azonban van konstruktív bzonyítása, azaz olyan, amely alortmust ad ey leetsées ekvvalens struktúrált proram konstruálására és bebzonyítja ezen konstrukcó elyesséét. Nemcsak eyféleképpen valósítató me az ekvvalens átírás, m ey konkrét alortmust founk meadn a későbbekben. A struktúrált szerkezetek asználata nem aranca ey proram jósáára. Ezekkel s leet bás proramot készíten. (Lásd a New Haven- esőátla proram esete.) Módszer valód proram proramráfjának átalakítására struktúrált proramráffá A proramot füvénynek tekntetjük, szen az x bemenetből az y kmenetet állítja elő a D meenedett nputok almazán, ezért ey y=f(x) formulával szmbolzálatjuk a proram működését. A formulát a proramráf tesz szemléletessé, és ez a formula struktúrált esetben a korábban táryalt S, C, és E (vay I) formulákon keresztül fel s írató. Nem struktúrált esetben ez nem teető me lyen eyszerű módon. Ezért fontos, oy a struktúrált proramráf a rendelkezésünkre álljon. A proramráf kezdőélén vzsáljuk az első csomópontot és a típusának mefelelően redukáljuk azt és alakítjuk k páruzamosan a formuláját. Füvény (szekvenca) csomópont esete: f=s(, )

Proramtervezés smeretek -8-13 - Predkátum (eláazás) csomópont esete: az p ams az p ams f=e(p;, ) f Az f -ben a p predkátum az áán aladó utakat -be, a ams áán aladókat -ba yűjtjük. Ha szüksées, akkor a csomópontokat mekettőzzük. Azok a csomópontok lesznek mekettőzve, amelyeken mndkét út átmey. Előfordulat, oy yűjtő csomópontok a kettőzés után keyszerűsödnek. G yűjtőpont csomópont esete: Ez az eset árom alesetre bomlk szét aszernt, oy a vzsált yűjtő csomópontra rákövetkező csomópont mlyen típusú. Ezek a következők. Gyűjtőpontot füvény követ aleset: f=s(, ) Gyűjtőpontot yűjtőpont követ aleset: A B A B

Proramtervezés smeretek -8-14 - Gyűjtőpontot predkátum követ aleset: be az p ams levesz az p ams vssza en nem levesz Ennél az esetnél a formula f=s(be, I(vssza; S(levesz, E(p;, ))), levesz). A be füvény ey extra btet defnál és beállít 1-re. A k füvény ey extra btet defnál és beállít 0-ra. A levesz füvény eltüntet, meszüntet az extra btet. A vssza predkátum az extra btet vzsálja. Ha az extra bt 1, akkor az en áon, a 0, akkor a nem áon lépünk k belőle. A és áak szerkezete az alábbak eyke. vay vay be k be k A ában a p az áán a kmenő élez (STOP) vezető (k), vay vssza a yűjtőbe (be) vezető utak vannak. A ában a p ams áán a kmenő élez (STOP) vezető (k), vay vssza a yűjtőbe (be) vezető utak vannak. Példa nem struktúrált proramráf átalakítására struktúrálttá.

Proramtervezés smeretek -8-15 - A B C D E F G H Szekvenca esete f = S( A, ), ezután yűjtőpontot predkátum követ. A be B levesz C D E F G be H 1 H 2 k k I J vssza levesz Az útvonalak bejárása során a H csomópontot me kellett kettőzn, mvel több úton s átaladtunk rajta. Ezek a mekettőzött yűjtők azután felesleesnek bzonyultak, mvel csak

Proramtervezés smeretek -8-16 - ey bemenetük maradt jelen esetben. Ezért a proramráfból el s ayatók. A véső formula: f = S(A, S(be, I(vssza; S(levesz, E(C; E(D; S(E,be), S(F, k) ), S(G, k)))), levesz) ). A nem struktúráltsá néy alapformája Ey proram nem struktúráltsáát meállapítatjuk a proramráfja vzsálatával azáltal, oy jellezetes, a struktúráltsá elvét mesértő részráfokat keresünk benne. Az alább vázolt néy eset lyen részráfokat ad me. Eláazás két bemenettel Eláazás két kmenettel Cklus két bemenettel Cklus két kmenettel Bőm Jacopn példája nem struktúrált proramra (proramráf). Melyk alapformákat találjuk me ebben a példában és ányszor? A fent néy alapforma a vázoltnál fontosabb, uyans kmondató a következő tétel. Tétel: A nem struktúráltsá karakterzálása Ey proram akkor és csak akkor nem struktúrált, a annak proramráfjában részráfként előfordul több k-, lletve belépő éllel rendelkező cklus, vay eláazás.

Proramtervezés smeretek -8-17 - Tétel: Alapformák a nem struktúrált proramban A nem struktúrált proram a néy nem struktúráltsá alapforma közül lealább kettőt mnd tartalmaz. Defnícó: A proram modul Modulnak nevezzük az ey fle-ban lévő, eyszerre fordítandó proramrészt. Ez általában ey vay több procedúra vay a főproram. Tovább elvek a struktúrált proramok írásáoz: a. asználjunk beszélő változóneveket! b. Névvel ellátott konstansokat asználjunk, melyek defnícója a proram meatározott elyén (általában az elején) leyen! c. Kerüljük a GOTO asználatát és soase írjunk spaett kódot! (A GOTO ey néybetűs szó! = Te GOTO s a four-letter word!) d. Modulárs proramokat írjunk, íy a részek kölcsönatása tszta és eyszerű. e. A modul része felfoatók leyenek és sorban olvasatók. f. A modulok eyke se tudjon túl sokat az eész proram erarcájából. Csak néány szomszédjával tartsa a kapcsolatot. Ez csökkent a veszélyt, oy ey változás sok részre kasson.. A modulok amennyre leet, leyenek eymástól füetlenek.. Rövd procedúrákat írjunk, amelyek csak ey dolot valósítanak me, de azt jól!. A procedúra leetőle ne leyen ey oldalnál osszabb! j. Mnden procedúra feladata ey-két sorban leírató leyen. k. A procedúra úy készüljön, oy a specfkácóját (a feladat leírását) keléítse, azaz először a specfkácó jön, majd a procedúra írása következk és nem fordítva! l. Használjuk k a bekezdések eltolatósáának leetőséét a proramszöveben! m. Mnél több értelmes kommentárt készítsünk, mnél teljesebb dokumentácót írjunk! n. Túl sok IF-et ne skatulyázzunk eymásba! o. A tervezés döntéseket és az adatszerkezeteket fedjük el. Amelyk procedúra nem asználja valamelyket, az ne s smerje, ne s lássa. p. A proram leyen mnél eyszerűbb. Veyük fyelembe a azdasáossá és szabványosítás szempontokat. A fejlesztés több lépésben történjen: először a központ részeket fejlesszük, a részletekkel ne folalkozzunk. q. Hayjuk, oy a feladat neezét más oldja me. Ez azt jelent, oy építsünk a saját maunk, vay más által elkészített munkákra, procedúrakönyvtárakra. A GOTO poléma 1. Túl sok célra asználató (mert túl eyszerű) és a környezetében nem derül k, oy m a célunk vele. 2. Ha ey címkét látunk ey proramszöveben, nem tudjuk, oy onnan leet odauran. 3. A proramszöve olvasása során yakran kell összevssza urálnunk a szöveben, am neézkessé tesz a szöve olvasását, neezen követetővé a vezérlést. Struktúrált esetben lefelé és balról jobbra olvasunk. 4. Struktúrál t proramnak könnyebb a proramelyessé vzsálata. Kváz struktúrált folyamatábrák: cklusból dő előtt kurás Be leet vezetn ey EXIT utasítást (a GOTO elyett!), amelynek a szerepe: klépés a struktúrából a struktúra véén, az eyetlen kmeneten.

Proramtervezés smeretek -8-18 - Az a elem keresése az X tömbben. Gyorsabb, de zavarosabb ép meoldás 1. FOR 1 TO Hossz[X] DO 2. IF x =a 3. THEN GOTO 6 4. // nncs me 5. GOTO 7 6. // mevan 7. Lassabb, de áttekntető ember meoldás 1. 1 2. WHILE Hossz[X] és x a DO 3. INC() 4. IF > Hossz[X] 5. THEN // nncs me 6. ELSE // mevan Nass Snedermann ábrák, a struktoram A struktúrált proramok vezérlés szerkezetének szemléltetésére jól asználatók az úynevezett Nass Snedermann ábrák, vay népszerű (németből átvett) nevén a struktoramok. Isaak Nass és Ben Snedermann fejlesztette k 1972-ben. A struktoramok a folyamatábra szabadossáát korlátozzák és csak (kváz)struktúrált szmbólumokat tartalmaznak. Ebből következk, oy csak (kváz)struktúrált proramok szerkezete ábrázolató a seítséükkel. Alapelem a télalap, amt különböző módokon osztunk fel részekre. Maa a proram eyetlen partíconált (felosztott) télalap. A következő leetőséek adottak. Szekvenca utasítás utasítás utasítás utasítás Eláazás (kétfelé) Ha a feltétel az, akkor az az alatt, a ams, akkor a ams alatt utasításnál folytatjuk lefelé. Ha valamely á üres, akkor az utasítás elyét kkszeljük. feltétel az aaa aa a ams utasítás utasítás Cklus (elöltesztelős) Ismétlés, amí a feltétel az. feltétel utasítás Eláazás (sokfelé) Ey feltételnek mnd teljesüln, kell és eydejűle csak ey teljesület. Ha valamely á üres, akkor az utasítás elyét kkszeljük. feltétel 1 feltétel 2 feltétel n utasítás 1 utasítás 2 utasítás n Cklus (átultesztelős) Ismétlés, amí a feltétel az. utasítás feltétel Eljárásdefnícó A lokáls változókat és a paramétereket a név mellett soroljuk fel a névez ozzákapcsolva. Név utasítás

Proramtervezés smeretek -8-19 - A struktoram előnye. Az struktoram tömörebb, mnt a folyamatábra, főként a folyamatvonalak kküszöbölése matt. Garantált a proram struktúráltsáa, mvel más szmbóluma nncsenek. Használató a lépésenként fnomítás módszerével történő proramfejlesztésre. A struktoram átránya. Neezebben követető, mnt a folyamatábra. A rajz matt terjedelmes, vszont a korlátozott szélessé matt neezen javítató. Gyakorlatla újra kell rajzoln. Nem ad leetőséet nem struktúrált utasításokra. Struktoramra példaként a fentebb táryalt proramot adjuk me, amelyben ey tömb elemet rendezzük át úy, oy a T tulajdonsáúak a tömb elején, a többek a véén elyezkedjenek el. Fentebb meadtuk a folyamatábrát és a pszeudokódot, most alább meadjuk a struktoramot. PROGRAM P 20 VÁLTOZÓK X R,j N INPUT (X) 0 j Hossz[X]+1 aa < j DEC(j) T ( x j ) ( j > ) INC() T ( x ) ( j) < j aaaaaa azaaa aa aa ams x és x j felcserélése OUTPUT(X, j) STOP

Proramtervezés smeretek -8-20 - FELADATOK 1. Tömör élalmazzal adottak alább proramráfok. Rajzoljuk me a proramráfot! Lássuk be, oy nem struktúrált, vay ped, oy az! Írjuk át struktúrálttá, a nem az! Írjuk fel ezután a formuláját! Rajzoljuk fel a struktoramot! a. {START A, A (D, B), B (C, E), C A, D A, E STOP} b. {START A, A (B, C), B C, C (B, STOP)} c. {START A, A (B, C), B (D, E), C STOP, D A, E STOP} d. {START A, A (B, C), B F, C (D, E), D F, E (G, F), F E, G (H, STOP), H A} e. {START A, A (C, B), B (E, D), C (F, E), D A, E G, F G, G (H, STOP), H F} f. { STAR T A, A (B, C), B STOP, C (STOP, D), D A}. {START A, A (B, C), B C, C (D, E), E STOP, D A}. {START A, A (B, STOP), B C, C (A, STOP)}. {START A, A (C, B), B STOP, C (D, STOP), D A} j. Leyen a proramráf a fent említet t Bőm Jacopn példa. (Adjuk me az élalmazt!) k. Leyen a proramráf a nem stru ktúráltsá néy ala pformája. (Adjuk me az élalmazt! Két bemenet esetén azokat a START-ból ey predkátum két kmenete adja, két kmenet esetén azokat futtassuk e ybe ey STOP-ba! ) l. 2. a. Készítsünk proramot ey 1 és 1000 között ondolt szám ktalálására. (A proram próbálkozzon ktaláln az általunk ondolt számo t, leetőle mnél kevesebb lépéssel. ) A proram teyen fel kérdéseket, amelyekre m csak az en vay nem választ adatjuk. Iyekezzünk struktúrált proramot készíten. H a nem az skeredne, alakítsuk át a tanult módszerrel struktúrálttá! Írjuk fel ezután a formuláját! Rajzoljuk fe l a struktoramot! b. Módosítsuk az előző pror amot úy, oy feltételezzük, oy a válaszadó esetle csalat. Ekkor a véén rák érdezünk a ondolt számra, és a a válasz az, oy a ondolt szám nem a metalált, akkor bekérjük a válaszoló szernt elyes számot és rámutatunk, oy ol csalt először.

Proramtervezés smeretek -8-21 - 3. Adott az alább formáls pszeudokód. Rajzoljuk me a proramráfot! Írjuk át struktúráltra, a nem az! Írjuk fel ezután a formuláját! Rajzoljuk fel a struktoramot! a. 1. IF A 2. THEN B 3. GO TO 8 4. ELSE IF C 5. 6. 7. THEN ELSE GO TO 8 D GOTO 1 8. STOP b. 1. A 2. IF B 3. THEN C 4. GO TO 1 5. STOP c. 1. WHILE B D O 2. A 3. IF C 4. THEN 5. ELSE 6. STOP D E d. 1. A 2. IF B 3. THEN 4. IF D 5. THEN F 6. GOTO 4 7. ELSE D 8. E 9. G 10. STOP