În rezolvarea unor probleme, poate apărea o situație în care nu este posibilă determinarea în avans a numărului de repetări ale calculelor. În astfel de cazuri, vorbim despre cicluri cu un număr necunoscut de repetiții.
În cicluri cu un număr necunoscut de repetiții, procesul de calcul se termină atunci când sunt îndeplinite unele condiții suplimentare. Valorile parametrului ciclului nu mai sunt stabilite în intervalul de timp, dar specifică numai valoarea inițială și pasul schimbării. Cu toate acestea, organizarea ciclului se efectuează în conformitate cu procedura standard specificată în clauza 4.1. Diferența este că nu orice tip de proces de calcul ciclic poate fi folosit. Tipul ciclului este determinat în conformitate cu condiția suplimentară specificată pentru finalizarea calculelor. Aceasta exclude fără echivoc posibilitatea utilizării ciclului "Pentru" pe baza blocului de modificare. Pentru a determina numărul de pași de repetare a ciclului, trebuie să aranjați contorul.
Exemplul 4.3. Desenați o diagramă a algoritmului care calculează valorile funcției y = ln (1 + 0,2 # 8729; x). pentru diferite valori ale parametrului x. care variază de la xn ≤ 3 cu pasul hx = -2. În acest caz, calculați y până când expresia sub semnul logaritmic rămâne mai mare decât 0. Stabiliți numărul (k) valorilor calculate ale y.
Înainte de a rezolva o problemă, este necesar să se determine tipul de ciclu utilizat. Expresia calculată conține o "anomalie" (valoarea sub semnul logaritmului trebuie să fie mai mare de 0), care este, în același timp, o condiție pentru finalizarea calculelor. Cu alte cuvinte, este necesar să verificăm mai întâi posibilitatea de a calcula valoarea y. ci doar calculați-o. Prin urmare, în acest caz, doar un ciclu cu o condiție prealabilă poate fi folosit pentru organizarea procesului de calcul (Figura 4.3).
Ca date inițiale, se introduc valorile variabilelor xn, hx (blocul 2). În blocul 3 sunt date valorile inițiale pentru parametrul ciclului x și numărul repetării ciclului k. După aceasta, în Blocul 4, condiția pentru continuarea ciclului și eventuala "anomalie" sunt verificate simultan (expresia sub semnul logaritmului trebuie să fie mai mare de 0). În corpul bucla se calculează valoarea corespunzătoare y (blocurile 5-6) și se extrage valoarea curentă a lui x, iar valoarea contorului calculată prin y crește (blocul 7). La sfârșitul corpului buclei, se execută următoarea valoare a parametrului ciclului x (blocul 8). Buclele funcționează până când expresia ≤ 0 apare sub semnul logaritmic. După ieșirea din buclă în blocul 9, variabila k este numărul de valori calculate ale y.
Rezultatele unei execuții pas cu pas a ciclului în algoritmul prezentat în Fig. 4.3, sunt prezentate în Tabelul 4.3.
Tabelul 4.3. Execuția treptată a ciclului
Valoarea curentă a lui x (la începutul ciclului)
Soluționarea unor probleme necesită căutarea unor valori ale unei singure valori simultan. În acest caz, vorbim despre utilizarea buclelor imbricate. fiecare dintre acestea fiind organizat conform unui principiu standard (poate fi unul din cele trei tipuri) și se iterează printr-un singur parametru. În acest caz, primul ciclu este numit extern, iar cele închise sunt numite interne. Și același ciclu poate fi extern în raport cu unul și intern în raport cu un alt ciclu. Limitele ciclului interior nu pot depăși limitele ciclului exterior în raport cu acesta.
Pentru fiecare valoare a parametrului bucla exterioară, sunt căutate toate valorile posibile ale parametrului bucla interioară. Cu alte cuvinte, buclă interioară este întotdeauna executată mai întâi. O astfel de organizare a ciclurilor face posibilă sortarea valorilor parametrilor lor în toate combinațiile posibile.
Exemplul 4.4. Desenați o diagramă a algoritmului care calculează valorile funcției y = a - 2 # 8729; b. pentru toate combinațiile posibile ale valorilor parametrilor a și b. care aparțin intervalelor 0 ≤ a ≤ 2, ha = 1 și -2 ≤ b ≤ 2. hb = 2, respectiv. Determinați media aritmetică (S) a valorilor calculate ale y.
Pentru a rezolva această problemă, este necesar să organizați două bucle imbricate pe parametrii a și b. Astfel, fiecare ciclu este un ciclu cu un număr cunoscut de repetiții, adică la avansul poate calcula valoarea unei valori a unui interval predeterminat (Na =] (2 - 0) / 1 [+ 1 = 3) .. Și numărul de valori ale b din intervalul predeterminat (Nb =] (2 - (-2)) / 2 [+ 1 = 3) și, prin urmare, numărul total de valori calculate ale y (N = Na × Nb). Deci, puteți utiliza oricare dintre cele trei tipuri standard pentru a organiza ciclurile.
În plus, y depinde simultan de doi parametri a și b. Prin urmare, nu este de importanță fundamentală pentru ce parametru să se facă ciclul extern și pentru ce - intern (exteriorul poate fi un ciclu în raport cu parametrul a și cel intern cu privire la parametrul b și invers). În cazul în care una dintre cantitățile calculate depinde doar de un parametru, atunci este rațional să se facă un ciclu în raport cu acest parametru extern și să se calculeze cantitățile care depind numai de acest parametru în ciclul exterior. O astfel de organizație va evita calcule multiple ale acelorași valori în ciclul interior.
Figura 4.4 prezintă o diagramă în care pentru a rezolva problema, folosind două bucle imbricate: bucla externă cu o condiție prealabilă pentru parametrul și un ciclu interior cu postconditie parametrul b.
Algoritmul începe cu introducerea datelor inițiale (blocul 2), care reprezintă valorile inițiale, finale și etapa de modificare a parametrilor a și b din intervalele specificate. În etapa de pregătire pentru execuția ciclului extern (blocul 3), parametrului ciclului a i se atribuie valoarea inițială a. iar variabilele S și k sunt de asemenea setate la zero. utilizate pentru a stoca suma și numărul de valori calculate de y.
Corpul bucla exterioară cu o condiție prealabilă include blocurile 4-11. Dacă valoarea curentă a nu depășește limita dreaptă a intervalului (blocul 4), atunci corpul bucla exterioară se execută, care include bucla interioară. În blocul 5, ciclul intern este pregătit pentru execuție, parametrul său b este atribuit valorii inițiale bn.
Corpul bucla interioară cu o condiție ulterioară include blocurile 6-10. În blocul 6, se calculează valoarea curentă a y. și în blocul 7, se calculează y și valorile corespunzătoare ale lui a și b. În blocul 8, valoarea obținută de y este adăugată la suma S și valoarea contorului calculată prin y crește. Apoi, parametrul ciclului interior b se modifică la valoarea pasului hb (blocul 9) și se verifică starea de ieșire din bucla interioară (blocul 10).
Dacă valoarea curentă a lui b nu depășește valoarea finală a bk. apoi se întoarce la începutul bucla interioară și calculul y se repetă cu noua valoare b. În același timp, valoarea parametrului bucla exterioară a rămâne neschimbată. Astfel, cu o valoare a parametrului bucla exterioară, toate valorile parametrului bucla interioară sunt enumerate.
După ieșirea din bucla interioară din blocul 11, parametrul bucla exterioară a se modifică la valoarea pasului ha. Apoi, mergeți la începutul ciclului (blocul 4) și repetați pașii de mai sus până la ieșirea bucla exterioară. După ieșirea din bucla exterioară în blocurile 12-13, se calculează și se evaluează media aritmetică S a valorilor calculate ale y.
Rezultatele executării treptate a ciclurilor în algoritmul prezentat în Fig. 4.4, sunt prezentate în Tabelul 4.4.
Tabelul 4.4. Implementarea treptată a algoritmului cu bucle imbricate
Valoarea curentă. a (la începutul ciclului)
De asemenea, trebuie să țineți cont de faptul că valoarea inițială a parametrului ciclului interior b trebuie să fie setată de fiecare dată înainte de începerea executării bucla imbricată (blocul 5), adică în bucla exterioară. Dacă acest lucru se face simultan cu specificarea valorii inițiale a parametrului bucla exterioară a (blocul 3), bucla interioară se va executa numai la valoarea inițială a. Pe acest algoritm algoritmul își va termina activitatea și, în consecință, toate combinațiile posibile de valori ale lui a și b nu vor fi epuizate.