az internet ablakok Android

Blokkszerkezet. Programszerkezet: blokk

Általános szabályok szerint az eljárások és funkciók az eljárások és funkciók partícióiban találhatók, azaz a programokba vagy más szubrutinokba ágyazódnak. Ilyen rögzítéssel a szubrutin leírása az egység összetevője, és a szubrutin maga is tartalmaz egy blokkot, majd beírhatja a külső és belső egység megjelenését.

A külső egység egy blokk, amelyben a szubrutin fektet be. A belső blokk maga a szubrutin. Az alprogramok külső blokkjaiban található összes leírást globálisnak nevezik a blokkra, amely ezt a szubrutint alkotja. A belső blokkban található összes leírást helyinek nevezik. Beírhatja a fészkelő szintek fogalmát. Ha az eljárások leírása és a funkciók két vagy több szubrutinot írnak le, azt mondják, hogy ezek egy szintű fészkelés alprogramjai. A külső blokkhoz képest belsőek. Az alprogramokhoz kapcsolódóan maguk nem használhatjuk a külső vagy belső feltételeket, mivel ezek egy szintje a fészkelés. Ha a szubrutin beágyazódik a külső blokk eljárásainak és funkcióinak leírásába, amelyen belül egy másik szubrutin ugyanabban a szakaszban található, különböző szintekről beszélünk ezeknek a szubrutinoknak. A harmadik blokk esetében, amely a legszebb alprogram, mindkét blokk, amelyben beágyazódik, külső lesz. Az alprogram fészkelő szintje 2. A második blokk esetében a harmadik blokk belsõ lesz, és az első külső. A második blokk fészkelő szintje 1. Az első blokk (külső) második és harmadik blokk belsõ lesz. Az első 0 blokk fészkelő szintje, azaz Ez a készülék a fő program.

Például fontolja meg a nyelv szerzője által javasolt blokkok szerkezetét (19.16. Itt az A program hetedik szakaszában a B és C szubrutinok beágyazódnak. A szubrutin D. szubrutinban. A D. szubrutinban a g alprogram szubrutinja az alprogramba beágyazódott. A szubrutin két és F.

Ábra. 16.16. - Példa a blokkszerkezetre

Meg fogjuk érteni a leírások körét. A címkék leírása csak a blokk-üzemeltetők szakaszában érvényes, amelyekben leírják őket. Az összes többi leírás nemcsak a blokkban van, amelyben azokat leírják, hanem az e készülékbe ágyazott összes belső blokkban is (függetlenül a fészkelő mélységétől). Úgy tűnt, hogy felmerülhetnek a globális és a helyi leírások közötti konfliktusokMivel a különböző fogalmak megnevezhetők az azonos nevek különböző blokkjaiban. Annak érdekében, hogy az ilyen konfliktusok ne forduljanak elő, a következő szabály születik - a helyi leírásokban meghatározott összes név megszünteti a globális leírásokban leírt egybeeső nevek cselekvését. Ábrán. 16.17 A blokkok helyét mutatja példaként. Itt a nyílvonalak a globális leírások cselekedeteit mutatják. Tehát a g blokkban a D, B, A. külső blokkok leírása van.

Ábra. 16.17. - blokkok helye a szinteken és a globális leírásokról

Különösen a szubrutinokhoz való hozzáférést fogjuk tartani. Bármely szubrutin hívható:

    a blokk-üzemeltetőktől, amelyekben leírják;

    maga az üzemeltetők partíciójától (közvetlen rekurzió);

    az e (közvetett rekurzió) bármely belső szubrutin üzemeltetői részéről;

    a korábban leírt bármely alprogram operátorai közül, ugyanabban a blokkban, ahol ez a szubrutin.

Ezeket a szabályokat a következőképpen lehet reformálni - Bármely alprogram felhívhatja:

    a szubrációs szakaszban leírt bármely alprogram;

    én (közvetlen rekurzió);

    ehhez kapcsolódó összes külső alprogramok (közvetett rekurzió);

    az azonos fészkelési szinten korábban leírt alprogramok.

A példakörből származó blokkok (szubrutinok) kölcsönhatása az 1. ábrán látható. 16.18.

Ábra. 16.18 - A blokkok közötti kölcsönhatás példája

Itt a nyílvonalak megmutatják, hogy a végrehajtás a szubrutinok hívása (a nyilak jelzik a hívás irányát). Például a programból csak a hetedik szakaszba fektetett Subprogramok és C, amelyeket a hetedik szakaszba fektetnek be. A szubrutin f, a szubrutin f (közvetlen rekurzió), a c altroutin, amelyhez beágyazódik (közvetett rekurzió), és az E alprogram (ugyanolyan szinten van, és korábban le van írva). Az A programokat a B és C alprogramok okozhatják. A 16.9. Táblázat a blokkok közötti összes lehetséges kölcsönhatásokat sorolja fel. Itt a fő algoritmus egy olyan blokk, amelyből a szubrutin hívás történik, a segéd algoritmus az úgynevezett szubrutin.

16.9. Táblázat.A blokkok közötti kölcsönhatás példája

Eljárások és funkciók. Blokkszerkezet programok. Paraméterek.

Példa

Példa

Példa

A (10) egy (10) reálszámok tömbje van. rendezni ez a tömb Növekvő elemei, ᴛ.ᴇ. Hogy a tömb minden egyes eleme több lenne, mint az előző.

Fontolja meg az egyik leginkább egyszerű algoritmusaz ilyen jellegű feladatokhoz (5. ábra).

Ennek az algoritmusnak az elképzelése lényegében, hogy a kiindulási tömb elemeit az első 1 C A 2-es, majd a 2 C A 3-at, a továbbiakban: 3 C A 4, stb. Ha a pár első eleme több, mint a második, akkor a numerikus értékek megváltoznak, így az első elem megkapja a második értékét, a második pedig. Ellenkező esetben nincsenek helyettesítések egy párban, és kapcsolja be a második pár elemeinek összehasonlítását.

ᴀᴋᴎᴍᴀᴋᴎᴍ ᴏϭᴩᴀᴈᴏᴍ, a tömb végén a legnagyobb elem fokozatos "nyomása", és az algoritmus "húzás" funkciója elvégzi a belső ciklust. Amint a tömb legnagyobb eleme elviszi az utolsó 10. helyre, a leírt eljárás megismétlődik a fennmaradó rendezetlen 9 elemekkel, amellyel a maradék elem legnagyobb része az öröklési helyet a tömbben stb.

A kívánt eredmény elérése érdekében az ilyen eljárást kilenc alkalommal kell elvégezni, minden egyes alkalommal, amikor a belső ciklus ismétléseinek száma 1-re csökken.

Ezt a feladatot a külső ciklus megoldja. Paramétere, amely a 9,8,7, ..., 1 ismétléshez való ismétléstől való ismétléséből indul, nemcsak az elvégzett ismétlések számának száma, hanem ugyanakkor, és a legnagyobb érték A belső ciklusparaméter.

program Fajta;

var.

i, K: intege. r;

b: igazi ;

a: sor. tőzsdei ;

kezdődik.

Írás ('írjon be egy tömböt -');

-Ért I: \u003d 1 nak nek. 10 tegye. Readln (a [i]);

writeln ("forrás tömb");

-Ért I: \u003d 1 nak nek. 10 tegye. Writeln (A [I]: 5: 2);

-Ért I: \u003d 9 le. 1 tegye.

-Ért K: \u003d 1 nak nek. ÉN. doifi A [K]\u003e a azután.

kezdődik.

b: \u003d a [k]; a [k]: \u003d a; A: \u003d b

vége.

writeln ("megrendelt tömb");

-Ért I: \u003d 1 nak nek. 10 tegye. Írjon (A [I]: 5: 2)

vége. .

DANA MATRIX IN (20 * 20). Vektor létrehozása (20), amelynek minden eleme a mátrix oszlopának elemeinek terméke, kivéve a fő átlós elem elemét. Az eredeti mátrix sorai és oszlopai a karcolásból indulnak, indexelő vektorelemek 10.

Az új tömb (vektor) kialakulása az elemek értékeinek rekordja a számukra fenntartott memóriakejtekhez. A C vektor egyes elemeinek numerikus értéke az algoritmus belső ciklusában van kialakítva, és a sejtbe való felvétel külső a belső ciklus testének következő ismétlésének befejezése után történik.

program Tömeges;

b: sor. tőzsdei ;

c: sor. tőzsdei ;

p: igazi ;

m, n: egész szám ;

kezdődik.

-Ért M: \u003d 0 nak nek. 19 tegye.

-Ért N: \u003d 0 nak nek. 19 tegye. readln (b);

-Ért N: \u003d 0 nak nek. 19 tegye.

kezdődik.

p: \u003d 1; -Ért M: \u003d 0 nak nek. 19 tegye.

ha. M.<>n. azután. (Munka kialakítása)

p: \u003d p * b; (a mátrix oszlopának elemei)

(az átlós kivételével)

c: \u003d p; (Felvétel)

(Vektoros elem a memóriacellában)

vége. ;

-Ért N: \u003d 10 nak nek. 19 tegye. Writeln (C [N]: 10: 3)

vége. .

Dana mátrix mat (5 * 5), amely valódi elemekből áll. Módosítsa a mátrix sztringet a maximális és minimális elemeket tartalmazó helyeken.

program Minimum maximum;

típus

m \u003d. sor. tőzsdei ;

var.

mat: sor. nak,-nek. m;

maxi, Mini, I, J, I1, J1: egész szám ;

kezdődik.

Írás ('Írja be a mátrixot -');

-Ért I: \u003d 1 nak nek. 5 csinálni érte J: \u003d 1 nak nek. 5 tegye. Olvasni (szőnyeg);

i1: \u003d 1; J1: \u003d 1; (Minimális elemindexek)

i2: \u003d 1; J2: \u003d 1; (Maximális elemindexek)

-Ért I: \u003d 1 nak nek. 5 tegye.

-Ért J: \u003d 1 nak nek. 5 tegye.

ha. Mat\u003e Mat.

azután.

kezdődik.

i2: \u003d I; J2: \u003d J (Ne feledje az új maximum indexeit)

vége.

mÁS.

ha. Szőnyeg.

azután.

kezdődik.

i1: \u003d I; J1: \u003d J; (Emlékezz az új minimum indexeire)

vége. ;

str: \u003d szőnyeg; (A szőnyeg mátrix sorának cseréje,)

mat: \u003d mat; (Maximális tartalmú)

mat: \u003d str; (elem, karakterlánc minimális)

(Név és fordítva)

-Ért I: \u003d 1 nak nek. 5 tegye.

kezdődik.

-Ért J: \u003d 1 nak nek. 5 tegye. Írás (szőnyeg);

vége.

A program két fő feladatot megold: a sorok keresése, amelyben a mátrix legnagyobb és legkisebb elemei találhatók, és ezeken a vonalakban található adatok cseréje.

Az első feladat egyfajta tipikus maximális keresési feladat, vagy minimális.

A tipikus különbség ténylegesen megállapítja, hogy meghatározzák a mátrix maximális és minimális elemeit, de az indexüket. A változókat az indexek tárolására használják i1, J1. - a minimális elemre és i2, J2 - Maximálisan.

A második feladat megoldásához három hozzárendelési operátort használnak, amelyekben a mátrix sorok a maximális és minimális elemek és egy segéd egydimenziós tömb. str..

< Что такое подпрограмма и для чего она нужна >

Pascalban kétféle szubrutin létezik: eljárások és funkciók. A fő különbség közöttük az, hogy a függvény visszaadja az értéket, és kifejezést használhat, például:

míg az eljárást egy vagy több feladat elvégzésére hívják:

A Writeln ("Ez az ellenőrzés");

Az eljárások és funkciók lehetővé teszik, hogy további blokkokat tartalmazzon a fő szoftveregységben. Az eljárás vagy függvény minden leírása tartalmaz egy fejlécet, amelyet egy szoftverblokk követ.

Az eljárások és funkciók bárhol megjelenhetnek a program fő testéhez. Eljárások esetén a következő formátumot használjuk:

eljárás. Eljárás neve (paraméterek);

A funkciók ugyanolyan formátumúak, mint az eljárások, kivéve, hogy a címmel kezdődnek funkció.és a visszatérési funkció adattípusával végződik:

funkció. Function_name (paraméterek): adattípus;

Eljárások és fuchs lehet saját konstans, adattípusok, változók és még saját eljárásaik és funkciói is. De ezek az elemek csak olyan eljárásokban és funkciókban használhatók fel, amelyekben meghatározzák őket.

Az eljárás az eljáráskezelő segítségével aktiválódik. A funkció akkor aktiválódik, amikor kiszámítjuk expressziós amely egy funkciót hívást, és a visszaadott érték érték helyettesíthető be ezt a kifejezést.

Eljárások és funkciók. A program blokkja. Paraméterek. - koncepció és fajok. A kategória osztályozása és jellemzői "Eljárások és funkciók. Programblokkszerkezet. Paraméterek." 2017, 2018.

4.8. Blokkszerkezet.

A "C" nyelv nem egy blokkszerkezetű nyelv

le pl / 1 vagy algola; Nem lehet néhány funkción leírni.

másokban.

Változók, másrészt meghatározható

blokkolja a strukturálási módszert. Változó leírások (beleértve a

tea inicializálás) Kövesse a bal oldali kulcsot

aki megnyitja az üzemeltetőt, és nem csak erre

roy elkezdi a funkció testét. Az ilyen által leírt változók

egyszerre, a külső blokkok bármely változóinak elmozdítása

ugyanazok a nevek, és biztosak maradnak a megfelelőnek

jobb ábra brace. Például

Int i; / * Kijelent egy új I * /

Mert (i \u003d 0; i< N; I++)

Az I változó akcióterülete "igaz" ág

HA; Ez nem kapcsolódik a program bármely máshoz

A blokk struktúrája befolyásolja a külső hatókörét

változók. Ha leírások vannak megadva

Ezután az x függvényen belüli megjelenése f a belső újra-

menna kettős típusú, és az F kívül - a külső teljes változóhoz.

igaz a formális paraméterek nevére:

A F funkció belsejében az x név a formális paraméterre vonatkozik, és

nem a külső változóhoz.

4.9. Inicializálás.

Még sokszor említettük az inicializálást, de

mindig áthalad, többek között. Most, utána

hogyan vitattuk meg a memória különböző osztályát, ebben a szakaszban vagyunk

Összefoglaljuk az inicializálással kapcsolatos szabályokat.

Ha nincs kifejezett inicializálás, majd külső és

a változó változók nullára vannak hozzárendelve; automatikus

és a regisztrációs változók ebben az esetben vannak

megosztott értékek (szemét).

Egyszerű változók (nem tömbök vagy szerkezetek) lehetnek

a nevüket a névjegy után kalcálják

egyenlőség és állandó kifejezés:

Char squote \u003d "\\";

Hosszú nap \u003d 60 * 24; / * Perc egy nap alatt * /

Külső és statikus változókhoz, inicializálás

csak egyszer, a fordítási szakaszban. Automatikus I.

a regisztrációs változókat minden alkalommal inicializálják

funkcióban vagy blokkban.

Automatikus és regisztráló változók esetén inicializálás

torus nem köteles állandónak lenni: valójában lehet

bármilyen jelentős kifejezés, amely bizonyos

korábban értékeket, és még a funkciókra is fellebbezhető. Például,

a 3. fejezet szerinti bináris keresési program inicializálása lehet

az űrlapon rögzítenék

Int magas \u003d n - 1;

INT alacsony, magas, közepes;

Ennek eredménye szerint az automatikus változás inicializálása

rövidített felvétel a hozzárendelési operátorokról.

Milyen formában szeretne - alapvetően az íz. mi általában

használunk explicit megbízásokat, mert inicializálása

a leírások kevésbé észrevehetőek.

Az automatikus tömböket nem lehet inicializálni. Külső

és statikus tömbök inicializálhatók

a leírást követően a göndör zárójelben található lista

tiszta értékek vesszővel elválasztva. Például egy program

a karakterek száma az 1. fejezetből, amely elkezdett

Int c, i, nwhite, nos;

Nwhite \u003d nosher \u003d 0;

Mert (i \u003d 0; i< 10; I++)

Az űrlapon átírható

Int ndigit \u003d (0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

Main () / * számjegyek, fehér tér, mások * /

Ezek az inicializálás valójában nem szükséges, mivel minden feladat

az értékek nulla, de jó stílus - tedd őket

nyilvánvaló. Ha a kezdeti értékek száma kisebb, mint

a tömb mérete, a fennmaradó elemek tele vannak

nevezetességek. Lista is nagy szám Kezdeti értékek

hiba. Sajnos ez nem lehetséges

utasításokat, hogy néhány kezdeti jelentést megismételjük, és

lehetetlen inicializálni az elemet a tömb közepén

az összes korábbi.

A szimbolikus tömbökre különleges út

inicializálás; A göndör zárójelek és vesszők helyett használhatod

használja a karakterláncot:

Char minta \u003d "a";

Ez hosszabb, de egyenértékű felvétel:

Char Pattern \u003d ("T", "H", "E", "\\ 0");

Ha bármilyen típusú tömb méretét elhagyják, a fordítót meghatároztuk

hosszúságát határozza meg, számolja a kezdeti értékek számát. BAN BEN

ez a konkrét eset négy (három karakter)

plusz véges \\ 0).


Alapok. Ugyanakkor a nyelv filozófiai absztrakciója elválaszthatatlanul kapcsolódik a filozófia egészének fő témáival és mozgásaival. Pontosabban, a hagyományosan a rendes nyelv AF analízisének keretében megfontolt korai szakaszokat mélyen befolyásolta Je Mura filozófiája, különösen a józan ész, amely szerint az ilyen fogalmak "férfi", "béke", " I "," Külső világ "," ...

És más FÁK-országok, valamint az orosz és a világ kultúrájához és tudományához való hozzáférés megkönnyítése. Így a kutatásunk adatainak megítélése, az orosz nyelv igénye továbbra is magas maradt a Köztársaságban. Sok képviselői modern moldvai fiatalok továbbra is, mint apáik és nagyapák, eléri az orosz kultúra, a tudományos és technikai eredmények Oroszországban. Az orosz nyelv továbbra is nyelv ...

Festői verbális szótag levél). A középső elámi periódus emlékművei (14-12 évszázadok. BC) az Akkadian Clean End végeznek. A novoelamian időszak emlékei 8-6 évszázadra vonatkoznak. IDŐSZÁMÍTÁSUNK ELŐTT. Hivatalos nyelv volt Ahemenidov perzsa államban 6-4 században. Feltételezzük, hogy az ősi parsida befolyásolja, amelyet a korai középkorra megőrzik. 7. Burusa nyelv nyelv Buruski (...

... / dialektus), szkíta, sogdysky, középső percidan, tadzsik, tajirishi (nyelvi / dialektus), talysh, tatky, khorezmisian, khotańsk, shullo-rushanskaya csoport, yagnobskiy, yazgulam és mások. Ők az indorán ághoz tartoznak az indoeurópai nyelvekről. Elosztási területek: Irán, Afganisztán, Tádzsikisztán, Irak, Törökország, Pakisztán, India, Grúzia területe, Orosz Föderáció. Tábornok ...

A modul egy olyan program funkcionálisan független része, amely tartalmaz egy sor összekapcsolt változókat, konstansokat, funkciókat és eljárásokat, amelyeket bárki megvalósíthat funkcionalitás. A modul más programmoduloktól függetlenül hibakerhető, és így szervezhető közös munka Számos programozó egy program fölött a modulokba törött.

A modulok használatával olyan linkkönyvtárakat hozhat létre, amelyek a forrás- és objektumkód formájában tárolhatók (Kód, amely készen áll a közös összeállításra és más modulokkal kombinálva). A Delphiben a modul összeállított objektumkódja a ".dpu" kiterjesztésű fájlokban tárolódik.

A modul szerkezete hasonló a Pascal program szerkezetéhez. A modul címe szükséges, és elkezdődik a szóegységgel (a program helyett a szokásos programban):

Mértékegység.<имя модуля>;

A modul neve meg kell egyeznie a Pascal fájlnévvel. Amikor a Delphi automatikusan létrehozza a különböző modulokat, úgy teszi lehetővé, hogy a modul neve egybeesik a fájlnévvel.

A programtól eltérően a modul teste (az operátorok partíciója) hiányozhat. A modulváltozók inicializálására szolgál, és a fő programszolgáltatók végrehajtása előtt hajtják végre. A modul két kötelező alkatrészt tartalmaz: interfész és végrehajtó.

A modul interfészrészét is nyitottnak nevezik, és a végrehajtó zárva van. Az Interface szakaszban szereplő hirdetményeket gyakran nyitott felületnek nevezik, és a megvalósítási szakaszban szereplő hirdetések zárt felület. Az Interface szakaszban bejelentett összes változó és funkció minden olyan modulhoz és programhoz érhető el, amely csatlakoztatja ezt a modult. A végrehajtási szakaszban bejelentett összes változó és funkció csak ebben a modulban érhető el. Egy ilyen elválasztás alkalmazási területek Kifejezetten annak érdekében, hogy elrejtse a felhasználótól, a számítások köztes szakaszai, amelyekre nem kell tudnia, és amellyel gondatlan vagy szándékosan elronthat. Ez biztosított megbízható védelem Minden olyan funkciót és változót, amely csak a belső használatraBár ez nem mindig kényelmes, és meg kell írnod további funkciók A belső változók eléréséhez.

Az interfészrész a szó interfészével kezdődik. Az interfészen keresztül a fő program más modulokkal vagy modullal van csatlakoztatva. Az interfész részben tárgyak (eljárások, függvények, változók, konstansok, típusok), elérhető az igénybe ezt a modult, fel van tüntetve.

A modul eljárásai és funkciói között kiegészíthetők, amelyek a modulfejlesztő nem tartalmazhat az interfész leírásában, akkor el fognak rejteni a felhasználóktól, és nem állnak rendelkezésre a modulon kívül.

Ha a modul más modulok (eljárások, funkciók, változók) más modulok munkájában (eljárások, funkciók, változók) használ, ezt a modul elején jelezzük a felhasználási tervezéssel, majd az ehhez csatlakoztatott összes modul nevét megadjuk :

M1, m2 ...;

Ezután leírható az interfész részében, konstansok, típusok, változók, eljárások és funkciók, amelyeket a modul hívásakor használhatunk, és az eljárásokat és funkciókat címsorokként jelölik, test nélkül. A testületek magukat később a modul zárt végrehajtójával írják le. Nagyon fontos az interfész részében, a megjegyzések segítségével dokumentálta az interfész mindegyik elemét, minden paraméterét, állandóját és típust, hogy a modul felhasználók könnyen használhassák.

Az interfész rész véget ér az ügyvezető rész kezdetével. Az ügyvezető rész a kulcsszó végrehajtásával kezdődik. Tartalmazza az interfész részében leírt eljárások és funkciók testét. Ez magában foglalhatja a szolgáltatók tulajdonságainak és partícióinak helyi címkéit. Miután a szó végrehajtása követheti a szóhasználatokat is az Executive részben használt modulok listájával. A következő címkék, típusok, állandók, változók, eljárások és (modul Lubrics.

Az ügyvezető rész után az adatok inicializálásának opcionális részét kell követni, a kulcsszó inicializálásával kezdődően. A modul első fellebbezésében egyszeri üzemeltetőket tartalmaz,

A modul végén a befejezés opcionális része elindulhat, a véglegesítési kulcsszóval kezdődően, amelyben a modul működés bármely befejezése során végrehajtott üzemeltetők. A modul befejeződött kulcsszó - Vége. Kötelező ponttal.

Röviden szintaxis A modul leírása így néz ki:

Ha különböző modulokban változókat használnak, az előtagot a változó modul eléréséhez kell használni:

<имя модуля>. <имя переменной>.

10.1. Fontolja meg a modulok összekapcsolásának lehetőségét. A program rövidebbé válhat, ha lehetővé teszi a modulok, hogy használják egymás belső elemeit.

jelölés "\u003e A modulok (vagy nagyfokú kapcsolási modulok közötti szoros kapcsolat), és ebben az esetben lehetetlenné válik külön-külön használni őket, ami megsérti a moduláris programozás elveit.

Ha keresztkapcsolatot készít az interfész partíciókban, a fordító javítja a hibát. A modulok keresztkapcsolatát csak a végrehajtási szakaszokban lehet elvégezni, de jobb, ha a modulok keletkező kölcsönös függősége miatt elkerülhető.

Általában a programok tervezése során a projektek felosztása a modulokon a fejlesztés kezdetén következik be szoftverrendszer. Ezt a folyamatot modularizációnak nevezik. Általános szabályként a projektelemző és annak csoportja foglalkozik ebben. Úgy gondolják, hogy a modul mérete ingadozik a forrásszöveg 30-300 sorának tartományában. A modul egyértelműsége jelentősen javul a megjegyzésmodul használatával a címben (kezdete) részletes leírás Funkciója. A tájékoztatás során elegendő elolvasni a címjegyzéket, gyakorlatilag nem figyel a szöveg többi részére.

Általában a modulosítás eredményét a modulok és (vagy) alrendszerek összefüggésének grafikonjaként ábrázolják. A grafikon alapja ("gyökér") főprogram. A grafikon minden csúcsa modul, és a csúcsok összekötő ív a modulok kapcsolatát mutatja egymás között.

A grafikon csúcsa közelében az előző interfész elemek: az eljárások, funkciók, konstansok, a modul nyitott részében bejelentett változók nevei, amelyeket tovább részletesen ismertetünk a modul megjegyzéseiben teljes leírás Interfészrész. Az ívek felett azokat a neveket írják fel, amelyeket a kapcsolódó (általában szülő) modulban használnak. Ebben az esetben a kapcsolat lehet kereszt, vagyis A modul a modul interfész elemeit használja és. Éppen ellenkezőleg, a B modul az A. modul interfész elemeit használja, amint azt már említettük, az ilyen kialakítás nem kívánatos, de talán. Ebben az esetben az alkalmazott interfészelemeket a modulok összekötő ív alatt és az ív alatt írják elő. Adunk példát egy ilyen grafikonra (10.1. Ábra
).

Itt a P főprogram három M1, M2, MH fő modulra oszlik. Ezekből a modulokból a program az A, B, C (első modulból) interfészelemeket használ, D (a második modulból), F, G, K, L (a harmadik modulból). Mindegyik modul kisebb, például kisebb, például M2,1, M2.2, M2.3, stb. Ebből a rendszerből, például az M2 és M3 modulok közötti keresztirányú hivatkozások láthatóak, és az M2.2 és az M2.3 között láthatóak.

A moduláció befejezése után minden modul a programozók közötti kódolásra kerül, hogy önállóan írja a kódot és a hibakeresést. Az ilyen esetekben azonban a helyzet gyakran akkor fordul elő, amikor a szülő modul feltételezhető, hogy a gyermekmodulok eljárásait és funkcióit használja, de a lánymodulokat még nem más programozók is kódolják. Például a K, L elemek a gyermekmodulokból származnak az MZ modulban, de ezek a modulok még nincsenek készen állnak. Hogyan lehet egy programozó végrehajtani az MZ modul kódot? A helyzetből származó kimenetet a szülő modul "dugók" eljárásainak (vagy funkcióinak) írásával végezzük, amely néven és paraméterek szerint teljesen egybeesik az elemekkel, az L. dugók lehetővé teszik, hogy összeállítsuk és végrehajtsák a programot hibakeresési módban .

"Plug" - Az eljárást pontos cím specifikációval (név és paraméterek) és egy üres test tartalmazza. "Dugós" - A funkciót a pontos cím specifikáció (név és paraméterek) képviseli, és csak egy üzemeltetője van a szervezetben, amely visszaadja a funkció értékét. Például a test-plug funkció l lehet, mint ez:

formula "src \u003d" http://hi-du.ru/e-books/xbook691/files/ris-page173.gif "Border \u003d" 0 "align \u003d" absmiddle "align \u003d" (! Lang: Lang: Lang:

Jó modulációval a modulok összekapcsolásának grafikonja, szabályként egy fa, és az interfészelemeket a fa oszlopának megfelelően használják magasabb szintű csomópontokba. Ez azonban nem mindig lehetséges, és a grafikon elemzéséhez és optimalizálásához szükséges. A modularizáció eredményeinek minőségének elemzéséhez két jellemzőt használunk: a modul csatlakoztatása és az alábbiakban figyelembe vett modulok tapadása.

Összekötő modul ként meghatározott a modul alkatrészek függetlenségi összetevőinek mérése. Minél nagyobb a modul összekapcsolása, annál jobb a design eredménye. A csatlakozás típusai (zárójelben vannak a csatlakozóerő együtthatója):

  • funkcionális (erős csatlakoztatva) - 10;
  • szekvenciális - 9;
  • kommunikációs - 7;
  • eljárási eljárás - 5;
  • ideiglenes - 3;
  • logikai - 1;
  • véletlen egybeesés (gyenge csatlakozás) - 0.

C. modul funkcionális összefüggés Nem lehet az azonos típusú két kapcsolattal. Ha vannak alprogramok szabályozására input-output áramok a modulba, és van egy jelentős részét Ezen adatok feldolgozásának, a modul elvégzi az egységes funkcionális feladat. Általában egy ilyen modult egy műveletek sorrendje hajtja végre egyetlen ciklus formájában, és funkcionális együtt van.

Modul következetesen csatlakozik A független funkciókat végző szekvenciális részekre osztható, de egyfunkciót kell végrehajtania. Ha ugyanazt a modult használják az értékeléshez, majd az adatfeldolgozáshoz, akkor konzisztens csatlakoztatással rendelkezik. A soros csatlakoztatott modul a műveletek sorozataként vagy ciklussorozatként valósul meg.

Ha a modul az adatstruktúrát elválasztó független modulokból áll, akkor van kommunikációs kapcsolat. Az átfogó adatszerkezet az alapja a szervezetnek egyetlen modulként. Ha a modul úgy van kialakítva, hogy egyszerűsítse a munkát egy összetett adatszerkezet, izolálja ezt a struktúrát, van egy kommunikációs csatlakoztatva. Ez a modul számos különböző és önállóan használt funkciót (memorizációs és adatkeresés) végez. Ha a modul úgy van kialakítva, hogy elkülönítse az algoritmusok kiválasztását, funkcionális csatlakoztatva van. Az ilyen modul feldolgozhatja az adatokat elszigetelt szerkezettel, de ha a hívást úgy tekintik, hogy az egyetlen funkciót elvégzi. A program hierarchikus szerkezetének legmagasabb szintű modulja funkcionális vagy következetes koherenciával kell rendelkeznie. A karbantartási modulokhoz (segéd), a kommunikációs kapcsolatok előnyösebbek. Ha a modulok eljárási, ideiglenes, logikai vagy véletlen kapcsolattal rendelkeznek, akkor ez nem megfelelően átgondolt tervezést jelez. A már meglévő program módosítása gyakran az ilyen típusú kapcsolatokhoz vezet.

Eljárási összefüggés A modulban megtalálható, amelyek szabályozó struktúrái a program strukturális rendszerén ábrázoltak. Egy ilyen szerkezet a modul fordulhat elő, ha feldarabolása a hosszú program része szerinti vezérlés adások, de anélkül, hogy a meghatározás bármely funkcionális alapon kiválasztásánál elválasztási pontokat. Ha egy modul két független modulra van osztva, a méretek csökkentése érdekében (az eljárások és adatok hirdetéseinek feldolgozása, a második a kontrollstruktúrák elvégzéséhez), mindegyikük eljárási kapcsolatban áll. A legjobb megoldást úgy kell tekinteni, amelyben a kezdeti modul több más modulra utal (szabályként három-négyre), mindegyikük különböző funkciókat hajt végre.

Az alkatrészeket tartalmazó modul funkcionálisan inkoherens, de az egyszerre szükséges feldolgozás ideiglenes kapcsolat (összekapcsolt osztály). Vannak olyan esetek, amikor a bejelentkezés időpontjában szükséges összes beállított funkciót egy független aktiváló modul hajtja végre. Ahelyett, hogy egy független modult használna a program elején, és a másik pedig a passzív állapotba való átvitelhez a program végén a funkciót különböző modulok között kell elosztani.

Ha az üzemeltetőket csak funkcionális hasonlóság alapján határozzák meg (ha az összes operátor az adatok olvasására vagy írására szolgál), és a kapcsolási algoritmus a modulparaméterek konfigurálására szolgál. Ez a modul rendelkezik logikai kapcsolat Mivel nem társul alkatrészeket, de enyhe hasonlósággal rendelkezik egymás között, például egy olyan modul, amely a hibakezeléshez különböző rutinokból áll. Másrészt a különböző hibaüzenetek rögzítésére tervezett modul kommunikatív kapcsolattal rendelkezik, ha az összes kimeneti információ a hibaüzenetek fájljaiból származhat.

Ha a modulüzemeltetőket önkényesen kombinálják, például amikor megadja az elhelyezését a memóriaterületen, egy ilyen modul rendelkezik zavaros egybeesés.

A program három gyengébb típusa, mivel a program helytelen kialakításának eredményeképpen funkcionális, következetes, kommunikációs vagy eljárási kapcsolatot kell elérni.

Tengelykapcsoló modulok ként meghatározott mérje meg a modulok relatív függetlenségét. A független modulok bármely más modul megváltoztatása nélkül módosíthatók. A gyenge tengelykapcsoló kívánatosabb Mivel ez a modul magas szintű függetlenségét jelenti. A modulok teljesen függetlenek, ha mindegyikük nem tartalmaz információt a másikról. Minél több információt tartalmaznak más modulokról, annál kevésbé függetlenek és a felhősebbek. Az ilyen információk a modulok nevének kereszthasználatának eredményeképpen jelennek meg, a nevezett szekvenciák hozzárendelését, implicit módon alkalmazzák a bemeneti és kimeneti kódokat, valamint a közös memória régiók struktúrái által meghatározott adatokat. Minél láthatatlanabban két összekapcsolt modul kölcsönhatás, annál könnyebb az, hogy meghatározzák az egyik modul szükséges kiigazítását, attól függően, hogy milyen változásokat állítanak elő másokban. A modulok nagy szigetelése és közvetlen kölcsönhatása nehézségekbe ütközik az egyik modulban bekövetkező változások határainak meghatározásához, ami kiküszöböli a hibákat másokban. Az alábbiakban a modulok példakénti kapcsolási intézkedései (a tengelykapcsoló becslésének különböző forrásai eltérnek) (10.1. Táblázat).

Gyakran nagy programokban a segéd algoritmusok végrehajtásához szubprogramokat használnak. YA-ban a szubrutinok eljárások formájában készültek.

Eljárás Leírás

(százaléknév) proc (paraméter) (test százalék) (százalék neve) Endp, ahol (százaléknév) - meg kell ismételni kétszer, és az eljáráshoz való fellebbezésre használják; (paraméter) két érték közül választhat - (alapértelmezett) vagy . A (belső) eljárás bezárásához csak a leírt parancsok szegmensével is kapcsolatba léphet. A távoli (külső) eljárással kapcsolatba léphet bármely programparancsszegmensekkel, beleértve a leírást is. Az eljárásban leírt nevek és címkék nem lokalizálódnak benne, így egyedinek kell lenniük a programban . Bár lehet leírni egy eljárást a másik belsejében, nincs előnye, és általában nem használják.

Kihívás eljárások

A YA-nál minden olyan átmenetet a fő program és az eljárás között maguknak kell megszervezniük. Ha az eljárásból visszatérhet a DOS-hoz való visszatérés, akkor az átmeneti parancsnak nevezhető a JMP-eljárás neve (százalék neve), ha vissza kell térnie a hívó programhoz, a legegyszerűbb használni a hívást a hívás parancsra (százalék) ) Ezután az eljárás testében meg kell adni a RET RET parancsot egy másik funkcióval: Emlékezzen vissza a címre a verem segítségével, és szervezze meg az átmeneti parancsok visszatérését. Az eljárás felhívásakor figyelembe kell venni a továbbított eljárást, és helyét a hívási ponthoz képest, azaz Automatikusan meghatározza a hívás parancsban lévő átmenet típusát, például (az eljárás). P hívás p Ha ez egy közeli hívás (közel), akkor a következő műveletek készülnek: Stack: \u003d AB, IP: \u003d Offset P, ahol AV a visszatérési cím, azaz A kihívást követő parancs hatékony címe; Távoli hívás (Far) Műveletek: Stack: \u003d Cs, Stack: \u003d AB, CS: \u003d SEG P, IP: \u003d Offset P Ha az eljárás leírása a hívás parancs alatti szegmensben van, meg kell adnia az átmeneti attribútumot a PTR operátor. például, Hívja a PTR P-t; Távoli hívás P.

Az eljárások helye a szegmensben

    Belső eljárások Egy szegmensben vannak a hívóval.
Ugyanakkor 3 lehetőség lehetséges: a) Minden eljárást korábban helyeznek el, mint a fő (okozó) program, amely eljárásként is díszíthető. Például: Szövegszegmens "kód" feltételezi Cs: Szöveg, DS: Adatok, SS: Stack A1 Proc ... RET A1 ENDP MAY PROC MOV AX, DATA MOV DS, AX ... HASZNÁLJA A1 ... A fő Endp szöveg befejezi az adatszegmenset. .. adatok véget érnek verem szegmens 'Stack' ... Stack végek vége főb) Minden eljárás a hívási pont alatt. c) Eljárások - a fő eljárás belsejében is lehetséges, hogy az eljárás egy másik eljáráson belül van (bár nincs előny) Például, ... Main Proc ... Hívja az A1 ... MOV AX, C400H INT 21H A1 PROCUR ... RET A1 ENDP fő Endp szöveg vége 2) Külső eljárásokmás szegmensekben vagy más fájlokban található. Példáulp, a főprogram szövege a P.MASM szövegszegmens nyilvános "kód" fájljában található; A modulok egymás után történő kombinálása; A vállalat általános szegmensében Cs: Szöveg, DS: adatok, SS: Stack Extrn Stop: Proc; Hirdetmény a külső név Main Proc ... Call STOP ... Main ENDP szöveg vége az adatszegmens ... Adatok végei Stack szegmens "Stack" ... Stack végek Vége Fő A forráskód eljárás található a P1.asm szövegben Szegmens nyilvános "kód" feltételezi, hogy cs: szöveges nyilvános megáll; A külsõ stop proc ...

Stop Endp szöveg véget ér; A fájl vége a belépési pont nélkül, ezeknek a fájloknak a kombinációja az elrendezési lépésben, azaz Szükséges adás szükséges. Például a MASM MASM / ZI PR MASM / ZI P1 esetében, ahol a ZI egy olyan lehetőség, amely lehetővé teszi, hogy teljes információt tegyen a forrásmodul (IM) számairól és szimbólumairól. A pr.oBj és a P1.OBJ kialakulása után egyetlen indítható linkre / C0 PR P1, CompoZ fájlba kell összpontosítani, ahol a C0 olyan opció, amely szimbolikus információkat továbbít, amely lehetővé teszi, hogy a CV hibakeresője megjelenítse a teljes szöveget, beleértve a címkéket és megjegyzéseket a képernyőn. A Compoz.exe modul készen áll a végrehajtásra. Tud csatlakoztassa az eljárást a könyvtárból. Ehhez a szegmensek előtt a közé tartozik az irányelv (könyvtár fájl neve) Példáulp, csatlakoztatása a iO.asm fájlt, írási közé intellude io.asm s szegmens 'verem' ... s végződik d Szegmens 'Data' ... D ENDS C szegmens 'kód' Tegyük fel CS: C, SS: S, DS: D Kezdje: ... ... C véget ér véget

A paraméterek átadása az eljárások között (szervezett a programozó kérésére)

    Paraméterek átadása az MP regisztereken keresztül
A programozó kérésére továbbíthatja az aktuális paraméterértékeket az MP regisztereken keresztül. például; Az AX: \u003d max (AX, BX) max. A fő eljárásban ... MOV AX, A; MOV BX, B paraméterek előállítása; A CALL MOX C, AX eljárás hívása; Az eredmény megőrzése ...
    Paraméter átvitel referenciávalazt jelenti, hogy az aktuális paraméternek megfelelő memóriacella címének (NAME) átadása (a PASCAL-ban az összeszerelővel ellátott értéket továbbítja). Ehhez használhatja a memóriacella nevét, vagy letöltheti a címet, mielőtt felhívná az eljárást a nyilvántartásba (BX, BP, SI vagy DI, mert az eljárás használhatja ezeket a regisztereket a címre).
például, Team Lea BX, B Hívás ......
    A paraméterek átvitele a veremen keresztül.
A paraméterek átvitele a regisztereken keresztül kis mennyiségű. Ha sok paramétert (legfeljebb 5), ők továbbítják a kéményen át az alábbiak szerint: - A fő program kiírja az aktuális paraméterek (az értékek vagy címeket) a verem; - Az eljárás a veremben rögzített paramétereket használja. Például: ; Hívja a P (A1, ..., AK) push A1 ... Push AK Call P ... Az eljárásban az opcionális BP Stack pointer segítségével használhatja, de az eljárás elején meg kell menteni a bp értéket a hívóprogramban használták, azaz ; Az eljárás kezdete P PROC PHOSE BP; A BP MOV BP, SP mentése; A BP konfigurálása a verem tetejére ... Akkor használhatja az alapvető címzést. Például egy közeli hívás esetén a kötegen felsorolt \u200b\u200bvisszatérési cím automatikusan, az utolsó AK paraméter címe. Mielőtt visszatérne az eljárásból, vissza kell állítania a BP parancsot a POP BP parancs segítségével, majd törölje a veremet az átvitt paraméterekről, hogy az eljárások megismétlődése esetén ne terhelje túl, azaz az eljárások megismétlődését, azaz. Telepítse az SP-értéket, 2 * k-val több, mint az eljárás meghívása után. Az eljárásból 2 lehetőség van a helyes visszatérésre. a) Állítsa be az SP-t a hívó programban
; Az eljárás befejezése ; A hívó programban
POP BP. Hívja a P.-t
Ret. Add hozzá SP, 2 * K; Sp. Korrekció
P endp.
b) Használja a Visszatérési parancsot a verem helyreállításához, amelynek megtekintése a közeli hívás (CNT), ahol (CNT) számláló (állandó kifejezés), szóméret. A parancs a következő lépéseket hajtja végre: IP: \u003d Stack SP: \u003d SP + (CNT), majd az eljárás vége van: POP BP RET 2 * KP ENDP hosszú hatótávolságú hívás-eljáráshoz CNT) Megtekintheti és hajtja végre a következőket: IP: \u003d Stack Cs: \u003d Stack SP: \u003d SP + (CNT) Ezzel a visszatéréssel a hívóprogramban bekövetkezett eljárásból további műveletek nem szükségesek.
    Az eljárás elérésekor a nyilvántartások megtakarításának problémája
Annak érdekében, hogy az eljárás nem kiküldi a hívóprogramban használt regiszterek értékeit az eljárás szövegében, mielőtt bármilyen nyilvántartást használnánk, hogy mentse a "régi" értéket a veremben, és a végén a Eljárás, az összes mentett érték visszaáll. példáulHa a CH-regisztert az eljárásban használjuk, meg kell menteni a veremre, de a verem csak a szóval emlékszik, így az eljárás fragmentum lesz: push cx; A "régi" CX MOV CX, 0; Használja a CX-et az eljárásban ...; A POP CX eljárás elhagyása előtt; A "régi" CX helyreállítása így általános képletűek lesznek (közeli) eljárások, amelyek a nyilvántartásokon keresztül és a kötegen keresztül továbbított paraméterekkel rendelkeznek

(százaléknév) proc

Nyomja meg a BP karbantartást

MOV BP, SP Stack

Nyomja meg a mentő regisztereket

az eljárás során

testszázalék

Ror ... Regisztrálók helyreállítása

Ror bp restaurálás bp