Algoritmi cu structuri de buclă imbricate

Să revenim la diagrama bloc din Fig. 6. Subiectul ciclului este reprezentat de blocul 4. Rolul jucat de variabila buclă contorul i, care ar trebui să fie schimbat într-un ciclu de la 1 la N. Deoarece etapa nu este specificat, implicit este destinat 1. Forma blocurilor ale corpului buclei 5 și 6.







Așa cum se poate observa din figura 7, ciclul constă dintr-un antet și un corp. Fiecare ciclu are în mod necesar propriul contor.

În Fig. 8, care prezintă structura și parametrii unui ciclu antet, îndeplinește rolul contra variabilei i. In interiorul contorul antet, și după simbolul „=“ virgulă indică valorile inițiale și finale ale contorului și schimbarea terenului său (în Fig. 8 executa variabile rol j lor, k, l, respectiv). Dacă valoarea pasului l = l, atunci poate fi omisă.

Figura 7. Structura ciclului. Figura 8. Structura antetului ciclului

În interiorul antetului, contorul primește inițial valoarea i = j. Apoi blocurile care formează corpul ciclului sunt executate. Blocurile de procesare din bucla se fac în sensul acelor de ceasornic. Ca urmare, după prima execuție a corpului bucla, controlul este din nou trecut în antet. Aici, se adaugă un pas la valoarea contorului curent. Acum, în cazul în care noul contor valoare nu a depășit limitele (.. Adică, nu mai era valoarea sa finală, la un pas pozitiv sau mai mică decât valoarea finală - pentru etapa negativă), apoi din nou efectuat corpul buclei, după revenirea la titlul la etapa contra adăugat . Astfel, bucla va fi executată până când valoarea contorului depășește o dată limita prescrisă. De îndată ce această limită este depășită, ciclul va ieși și controlul va fi transferat în bloc, care urmează imediat după ciclu.

Imediat după intrarea în buclă, variabila ia valoarea inițială i = 1. Apoi, în blocul 5, este testată pozitivitatea primului element al matricei Z (pozitiv i = 1). Dacă acest element este într-adevăr pozitiv, atunci în blocul b acesta va fi adăugat la variabila S și apoi va reveni la antetul ciclului. Dacă acest element nu este pozitiv (adică zero sau negativ), atunci se va efectua un salt la antetul ciclului, ocolind blocul de însumare 6.

În al doilea tur al titlului i contor buclă a crescut cu 1 și devine egal cu 2. Acum, când o nouă execuție a corpului buclei în blocul este verificată pentru 5 pozitivitate al doilea element al matrice Z, iar dacă este pozitiv, se adaugă la suma și așa mai departe. D. Ultimul odată ce corpul buclei este executat la i = N. La această valoare a contorului, se verifică ultimul element al matricei. În final, în antetul ciclului i se va lua valoarea N + 1. Această valoare depășește limita prescrisă, prin urmare, ciclul va ieși și comanda va merge la blocul 7. În acest bloc, suma acumulată este afișată și algoritmul va termina.

Adesea, în soluția algoritmică a problemei, devine necesar să se creeze un ciclu care să conțină un alt ciclu în corpul său. Astfel, buclele imbricate sunt legate de structurile de buclă imbricate. Ordinea ciclurilor de cuibărire, când corpul bucla interioară conține alte cicluri, poate fi destul de mare. Această ordine este determinată de metoda prin care se realizează rezolvarea sarcinii. Deci, atunci când se procesează matrice unidimensionale, de regulă este posibilă construirea unei scheme algoritmice fără cicluri de cuiburi. Cu toate acestea, în unele cazuri, rezolvarea unor astfel de probleme fără cicluri imbricate este indispensabilă.

Algoritmi cu structuri de buclă imbricate

Figura 9. Array Algoritmul de sortare

Rețineți că toate ciclurile imbricate, inclusiv cele exterioare, trebuie să aibă contoare cu nume diferite. În afara acestor cicluri, contoarele pot fi folosite ca variabile obișnuite sau ca contoare ale altor cicluri.

Exemplul 1. Luați în considerare problema de a sorta o matrice unidimensională Z a lungimii N. Pentru a sorta o matrice înseamnă aranjarea elementelor sale în ordinea creșterii sau descreșterii.

Să descriem metoda de sortare a matricei în ordinea cresterii. Mai întâi, treceți prin matrice pentru a determina cel mai mic element din el. Apoi, acest element este rearanjat cu primul. Apoi, se trece a doua trecere prin matrice, începând cu al doilea element. Cel mai mic element găsit este rearanjat cu al doilea și așa mai departe. După trecerea (N-1) cu operațiile de mai sus, matricea va fi sortată.

O diagramă bloc a acestui algoritm de sortare este prezentată în Fig. 9. Include 12 blocuri. După începerea lucrului în blocul 2, variabila N și matricea Z sunt umplute cu constante. Apoi, în blocul 3, condiția este verificată dacă ar trebui sortată matricea.







Aceasta înseamnă stabilirea faptului că există mai multe elemente în matrice, deoarece o matrice de un element este întotdeauna sortată. Dacă acest fapt este stabilit, atunci algoritmul începe sortarea. Procedura de sortare se efectuează într-un ciclu care combină blocurile 4-10. Corpul acestui ciclu conține o altă buclă, formată din blocurile 6-8. Scopul său va deveni clar din analiza ulterioară a algoritmului.

După intrarea în bucla exterioară, contorul său va lua valoarea 1, care în metoda noastră implică prima trecere prin matrice.

Apoi, blocurile 5-10 care constituie corpul ciclului exterior vor fi executate. În blocul 5 sunt localizate două variabile auxiliare V și L. Prima dintre ele este destinată fixării celui mai mic element, iar al doilea este pentru stocarea indexului său. Deoarece i = 1, atunci prima trecere la blocul 5 V presupune valoarea primului element, iar valoarea L a 1. Apoi, bucla interioară formată din blocuri de 6-8, unde se va schimba contra j de la 2 la N, secvențial compară respectivul elementele Z ale șirului cu V. valoarea variabilei în acest caz, de fiecare dată când este găsit mai mică decât elementul v, valoarea V se înlocuiește cu valoarea elementului, iar variabila L va fi fixat indexul său. Este clar că după executarea bucla interioară, variabila V va conține valoarea egală cu cel mai mic element, iar în L indicele acestui element. În blocul 9, se verifică în continuare dacă cel mai mic element este primul element al matricei. Dacă nu, atunci în blocul 10, în locul cel mai mic element (numărul L său) este scris mai întâi (adică prima trecere la L = 1 ..), Și locul primului element - cel mai mic (este egal cu V). După aceasta, comanda revine la antetul bucla exterioară a blocului 4. În ea, valoarea contorului devine i = 2.

Apoi corpul său este executat din nou, dar pentru noua valoare a contorului i. Acum, prin blocuri de 5-10 cel mai mic element al matricei este căutat, începând cu numărul 2. Apoi, în blocul 9-10 are loc în a doua matrice, și așa mai departe. D. Cand bucla exterioara este executata (N-1) ori matrice este sortat.

În blocul 12, matricea sortată va fi ieșită și în blocul 13 algoritmul se va termina.

Algoritmii cu structuri de buclă imbricate sunt adesea utilizați în rezolvarea problemelor de procesare a rețelelor bidimensionale. În astfel de algoritmi, contoarele de buclă sunt folosite pentru a manipula indicii matricei.

Exemplul 2. Având în vedere o matrice pătrată bidimensională Z, formată din rânduri N și coloane N. Este necesar să se găsească media S aritmetică a elementelor sale negative și să se înlocuiască elementele pozitive ale diagonalei matricei cu media aritmetică S.

Algoritmi cu structuri de buclă imbricate

Fig. 10. Diagrama bloc a algoritmului

O diagramă bloc a algoritmului este prezentată în Fig. 10. Se compune din 13 blocuri. În blocul 2, variabila N și întreaga matrice Z sunt umplute cu constante. În blocul 3, variabilele de lucru S și K obțin o valoare zero. Variabila S va juca mai întâi rolul adderului elementelor negative ale matricei, după care după acumularea sumei va lua valoarea mediei aritmetice. Variabila K este necesară pentru a număra numărul elementelor negative ale matricei.

În blocurile 4-7, se realizează acumularea sumei elementelor negative ale matricei.

Aceste blocuri formează două bucle imbricate, ciclul interior cu contra-j fiind corpul bucla exterioară cu contorul i. Să analizăm activitatea acestei structuri.

După intrarea în unitatea de buclă externă 4, variabila i ia valoarea i = 1. Apoi, corpul va fi executat (blocuri 5-7), care, la rândul său, este un ciclu. După intrarea în bucla interioară în blocul 5, j variabilă ia valoarea j = 1. Apoi, în blocul 6 este verificat pentru elementele negative ale matrice Z, situate în primul rând și prima coloană, adică. Pentru a. I = 1 și j = 1.

Dacă se dovedește a fi negativă, atunci în blocul 7 variabila K crește cu 1, iar valoarea acestui element este adăugată la S. După aceasta, reveniți la blocul 5, adică la antetul bucla interioară. Aici, j crește cu 1 devine egală cu j = 2, iar controlul trece la blocul 6. Se verifică membru în picioare încă în aceeași primă linie, dar în coloana a doua (i = 1, j = 2). Dacă este negativ, atunci K este din nou a crescut cu 1, și de această dată acumulat valoarea adăugată S a elementului, etc. .. Când bucla interioară este executată complet, adică j variabila „va rula“ de la 1 la N, la suma variabilă S cumulată a tuturor elementelor negative din matrice din primul rând, și K - numărul lor. Acum, se trece la blocul 4, antetul bucla exterioară, unde i devine egal i = 2. Din nou, va fi elaborat corp, adică. E. Ciclul 5-7. Când această sumă este găsit elemente deja negative ale primei matrice a două rânduri și K rămân în numărul acestor elemente. Când executați întreaga bucla exterioară, S este o constantă egală cu suma tuturor elementelor negative ale matricei și K - numărul lor. Acum, controlul trece la blocul 8. Dacă se constată că există elemente negative în matrice (K> 0), atunci în blocul 9 se calculează ca media aritmetică a raportului elementelor la numărul lor. Rezultatul este plasat ca aceeași variabilă S. Rețineți că, dacă nu a existat nici o unitate de verificare 8, ar fi apărut o eroare la K = 0 (în matrice sunt nici un element negativ) în blocul 9, datorită diviziunii de zero. Această eroare ar duce la terminarea anormală a calculelor înainte de sfârșitul algoritmului.

Apoi, blocurile 10-11 sunt executate care formează de asemenea un ciclu. Aceasta implică elementele de schimb incidental la media aritmetică a S diagonale (lanț rectilinie diagonal secundară a celulelor este într-un interval de la stânga jos la colțul din dreapta sus al șirului). Rețineți că variabila i, care a fost utilizată mai devreme, este folosită din nou pentru a economisi memoria.

Să urmăm activitatea acestui ciclu. La intrarea în unitatea de 10 ia valoarea contor i = 1. Apoi, în blocul 11, la această valoare va fi calculată element index coloană N - 1 + i = N. Astfel, elementul cu indicii (1, N) devine egal cu S. In al doilea tur ciclul i a crescut cu 1 și devine i = 2. este ușor de văzut că acum elementul (2, N-1) devine egal cu S și t. d. pe ciclul elementului ultimul tur (N, 1) obține valoarea S, care completează schimbarea valorilor a tuturor elementelor diagonale secundare prin media aritmetică S.

În final, în blocul 12, matricea schimbată va fi ieșită și în blocul 13 algoritmul va termina.







Articole similare

Trimiteți-le prietenilor: