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