Algoritmusok ágyazott hurkok
Térjünk vissza a blokk diagram látható. 6. A téma az ő ciklus blokk által reprezentált 4. Az szerepet játszott a változó az i ciklusszámláló, amelynek meg kell változtatni a ciklus 1 és N. lépés óta nincs megadva, az alapértelmezett azt jelentette, hogy 1. A hurok test formáját 5 és 6 blokkok.
Amint a 7. ábrán a ciklus egy fejlécet és egy test. Minden ciklus szükségszerűen saját számlálója.
Ábra. 8, ami azt mutatja, a szerkezetét és paramétereit egy fejléc ciklus, elvégzi a szerepe a számláló i változó. Bent a fejléc számláló, és miután a „=” szimbólum egy vessző jelzi, kezdeti és végső értékei a számláló és változása pitch (ábra. 8. szerepüket változó j, k, l -kal). Ha az érték a lépésben L = l, akkor el is hagyható.
7. ábra. A szerkezet a ciklus. 8. ábra. A szerkezet a ciklus fejlécében
Bent a fejléc számláló kezdeti beállítása i = j. Ezután a blokkokat alkotó hurok testet. Feidolgozőblokk hurkon belül készül az óramutató járásával megegyező irányban. Ennek eredményeként az első A ciklus végrehajtása test ismét kontroll át a fejlécet. Itt az aktuális számláló értékét lépésben adjuk hozzá. Most, ha az új számláló értéke nem haladja meg a határértékeket (.. Azaz, már nem volt a végső érték egy pozitív lépés, vagy kevesebb, mint a végső érték - negatív lépés), majd ismét végre a ciklus törzse után visszatér a címet a számláló hozzáadott lépés . Így a ciklus kerül végrehajtásra, amíg a számláló értéke egy nem haladja meg az előírt határértéket. A korlát leküzdése, akkor kilép a hurok, és a vezérlés visszakerül blokkolni után következő ciklusban.
Közvetlenül azután, hogy belépett a ciklusváltozó i, hogy a kezdeti érték i = 1 Ezután az 5 blokk, egy csekket pozitivitás az első elem a tömb Z (azaz. A. I = 1). Ha ez az elem valóban pozitív, akkor a B blokk akkor hozzá kell adni az S változó, ami után vissza fog térni a fejléc ciklust. Ha ez nem pozitív (azaz. E. Nulla vagy negatív), akkor ugrik közvetlenül a fejléc ciklus, megkerülve az összegző egység 6.
A második körben a i ciklusszámláló cím nőtt 1 és egyenlővé válik 2. Most, amikor egy új A ciklus végrehajtása test a blokkban ellenőrizzük 5 pozitivitás második eleme a tömb Z, és ha az pozitív, ez hozzáadódik az összeg, és így tovább. D. Utolsó szer a hurok test fut, ha i = N. ha ezt az értéket a számláló van jelölve az utolsó eleme a tömb. Végül, az i értéket veszi N + 1 ciklus fejléc. Ez az érték meghaladja az előírt határértéket, ezért kilép a hurok, és adja át vezérlőegység 7. Ebben az egységben jeleníti meg a kumulált és az algoritmus befejezi a munkát.
Gyakran előfordul, hogy az algoritmikus megoldás a probléma, hogy létre kell hozni egy hurkot, amely tartalmazza a testében egy másik ciklus. Az ilyen beágyazott hurok olyan struktúrák egymásba ágyazott hurkok. Az, hogy a fészkelő ciklus, amikor a test a belső hurok tartalmaz más ciklusokkal lehet elég nagy. Ez a sorrend határozza meg olyan módszer, amely révén érhető el a megoldást a problémára. Például a feldolgozó a egydimenziós tömbök, mint a szabály, akkor lehet építeni egy algoritmikus rendszer nélkül beruházások ciklus. Ugyanakkor bizonyos esetekben a megoldás az ilyen problémákra nem nélkülözheti ágyazott hurkok.
9. ábra. rendezési algoritmusnak tömb
Megjegyezzük, hogy az összes beágyazott hurok, egy külső, számlálók kell egy másik nevet. Kívül ezek a ciklusok számlálók lehet használni, mint a rendszeres változók vagy számlálók más ciklusban.
Példa 1. Tekintsünk egy egydimenziós tömb rendezési feladatot Z hossza N. szűrő Array - azt jelenti, hogy gondoskodjon annak elemeit annak érdekében, növekvő vagy csökkenő.
Leírunk egy tömb rendezési módszert annak érdekében növekedés. Először egy átmennek a tömb meghatározása érdekében a legkisebb elem benne. Ezután a permutáció az elem az első. Következő végezzük egy második áthaladásra a tömb, kezdve a második elem. Talált legkisebb elemet átrendeződik, hogy a második, és így tovább. D. Miután a (N-1) -edik át a végrehajtása e műveletek lenne rendezve tömb.
A blokkdiagramja a rendezési algoritmus ábrán látható. 9. Ez áll 12 blokkokat. Elindítása után a blokk 2, és a tömb N Z változó töltve állandók. Ezután a 3 blokk állapotban van jelölve, hogy szükség van-e rendezni a tömböt.
Ez csökken fennállásának megállapításához több a tömb elemeinek, azaz a. K. Egy elem a tömb mindig rendezve. Ha ezt a tényt létre, akkor az algoritmus továbblép válogatás. rendezési eljárás lefut egy hurokban, amely egyesíti blokkok 4-10. A szervezet ennek ciklus tartalmaz egy másik hurok van, amelyet blokkok 6-8. Kinevezése világos lesz a következő elemzési algoritmust.
Miután belépett a külső hurok a számlálót 1-be, hogy a mi a módszer egy első áthaladnak a tömbben.
Hivatkozni fogunk tenni 5-10 blokkok alkotó külső hurok teste. A blokk 5 két segédváltozókat V. és L. Ezek közül az első az, hogy rögzítse a legkisebb elemet, és a második - tárolja a index. Mivel i = 1, akkor az első lépésben, az blokk 5 V értéket veszi fel az első elem, és az L értéke 1. Ezután a belső hurok által alkotott blokk 6-8, ahol ez meg fogja változtatni a számláló j 2 és N, egymást követően összehasonlítja a mindenkori Z elemeit a tömb a változó érték V. ebben az esetben minden alkalommal található kisebb, mint az elem v, V értéket helyébe a elem értékét, és a variábilis L lesz meghatározva az index. Magától értetődik, hogy miután a belső hurok változtatható V fog tartalmazni az értéke egyenlő a legkisebb elemet, és az L - az index ennek az elemnek. Az egység 9 továbbá megvizsgálja, hogy a legkisebb elem az első tömb elem. Ha nem, akkor a 10 blokkban helyett a legkisebb elem (száma L) van írva az első (azaz az első menetben, hogy L = 1 ..), és az a hely az első tag - a legkisebb (ez egyenlő V). Ezt követően, a vezérlés visszatér a ciklus fejléc a külső blokk 4. egyenlő lesz a számláló értékét i = 2.
Aztán megint végre a testét, de ezúttal az új számláló értékét i. Most keresztül blokkok 5-10 legkisebb eleme a tömb keresett, kezdve a 2-es szám Ezután 9-10 blokk megy végbe a második tömb, és így tovább. D. Ha a külső hurok végrehajtódik (N-1) -szer a tömb rendezve.
A 12. rovatban a rendezett tömb lesz látható 13 blokk, és az algoritmus befejezi munkáját.
Algoritmusok ágyazott hurkok gyakran használják megoldásában a kétdimenziós tömb feldolgozási feladatokat. Ilyen algoritmusok ciklus számláló használják manipuláció az index.
2. példa kap egy kétdimenziós négyzetes elrendezés Z, amely a nitrogén- sorból és n oszlopból. Meg kell találni a számtani középértékét S és negatív elemeket cserélni pozitív szekunder diagonális elemei a tömb számtani közép S.
Ábra. 10. A folyamatábra
A folyamatábra ábrán látható. 10. Ez áll 13 blokkokat. A 2. blokk az n változó és Z kitöltve a teljes tömb konstans. Blokkban 3, a működési változók S és a K van hozzárendelve a nulla értéket. A változtatható S először játszani a szerepét egy összeadó negatív elemek a tömbben, majd miután a felhalmozódása az összeg ez lesz az érték a számtani átlaga. A k változót a szükséges megszámoljuk a negatív elemeket a tömbben.
A blokkok 4-7 végezzük felhalmozódó mennyisége negatív elemek a tömbben.
Ezek a blokkok képezik a két beágyazott hurok, egy belső hurok, ahol a számláló j értéke a test a külső hurok i számlálót. Elemzése az e struktúrát.
Miután belépett a külső hurok 4 egység, a i változó értékét veszi i = 1. Továbbá, a test kerül végrehajtásra (blokkok 5-7), amely viszont, egy ciklus. Miután belépett a belső hurok a Block 5, a variábilis J értéket veszi J = 1. Ekkor, a blokk 6 ellenőrizzük a negatív elemeket a tömb Z, található az első sorban és első oszlop, azaz. Hogy. I = 1, és j = 1.
Ha ez negatív, akkor a blokkban 7 változó K 1-gyel növekszik, és az S adunk az értékét ezt az elemet. Ezt követően, a visszatérés következik az 5 blokknak, azaz. E. A fejléc a belső hurok. Itt, j 1-gyel növekszik egyenlővé válik J = 2, és a vezérlés a blokk 6. ellenőrizzük tagja Állandó még mindig ugyanaz az első sorban, de a második oszlopban (i = 1, j = 2). Ha ez negatív, akkor K ismét nőtt 1, és ez alkalommal a felhalmozott hozzáadott értéket S az elem, stb .. Amikor a belső hurok végrehajtódik teljesen, azaz változó j „fog futni” 1-től N, hogy a variábilis S felhalmozódott összegét az összes negatív a tömb elemeinek az első sor, és a K - számuk. Most vezérlés átkerül a 4 blokk, a külső hurok fejléc, ahol i egyenlő lesz i = 2 Itt ismét ki kell dolgozni a test, azaz a. E. Cycle 5-7. Ha ezt az összeget talált már negatív elemei az első tömb két sor és a K maradnak száma ezeket az elemeket. Amikor végre a teljes külső hurok, S egy állandó összegével egyenlő az összes negatív elemeket a tömb, és a K - számuk. Most, vezérlő blokkhoz kerül 8. Ha úgy tűnik, hogy vannak negatív a tömb elemeinek (K> 0), akkor a blokk 9 számított számtani átlaga az arány a elemek számuk. Az eredmény kerül, mint az azonos változó S. Megjegyzendő, hogy ha nem volt ellenőrző egység 8, lenne hiba történt a K = 0 (a tömbben nincsenek negatív elemet) a blokk 9 miatt nullával osztani. Ez a hiba vezetett, hogy összeomlik vége előtt a számítási algoritmus.
További végrehajtott blokkok 10-11, amely szintén hurkot képez. Ez magában foglalja a hőcserélő elemek járulékos számtani középértéke az átlós S (másodlagos átlós egyenes vonalú lánc sejtek közötti tartományban van a bal alsó, hogy a jobb felső sarokban a tömb). Felhívjuk figyelmét, hogy az i változó, amelyet korábban használt annak érdekében, hogy mentse a memória újra használható.
Nézzük a működését ebben a ciklusban. Amikor belép a 10 egység veszi számláló értéke i = 1. Ekkor, a blokk 11 ezen az értéken kiszámításra kerül oszlop index elem N - 1 + i = N. Tehát, az elem indexek (1, N) egyenlő S. A második fordulóban a ciklus i nőtt 1 és válik i = 2 akkor könnyen belátható, hogy most már az elem (2, N-1) egyenlő s és t. d. az utolsó körben elem ciklus (N, 1) kap az érték S, amely befejezi a változó értékek valamennyi elemét a másodlagos átlós számtani átlag S.
Végül a 12. rovatban a módosított tömb lesz látható 13 blokk, és az algoritmus befejezi a munkát.