Instrucțiunea de buclă specifică re-executarea anumitor operatori. Pentru a implementa ciclurile în Pascal, sunt furnizați trei operatori structurali diferiți: WHILE, REPEAT, FOR. Primele două se utilizează dacă numărul repetițiilor (iterații) nu este definit în avans, dar este cunoscută condiția pentru sfârșitul ciclului. Instrucțiunea FOR este utilizată atunci când numărul de repetări ale corpului bucla este cunoscut în prealabil.
Acest operator este cel mai puternic dintre toate cele trei care implementează buclele. Doi alți operatori pot fi exprimați folosind (vezi Figura 23).
Expresia logică după WHILE este numită condiție pentru reluarea buclei și trebuie să aibă un tip boolean. Operatorul care urmează DO este corpul bucla. Se repetă până când condiția pentru reluarea ciclului este adevărată. Imediat ce condiția de reluare a ciclului devine falsă, controlul trece la operatorul din spatele WHILE. Dacă condiția de reînnoire nu este îndeplinită înainte ca buclele să înceapă, corpul buclei este sărit.
Fig. 23. Diagrama de sintaxă a instrucțiunii buclă WHILE
Din descrierea de mai sus este clar că operatorul WHILE implementează structura de bază "loop-by-frame", deoarece aici testul de condiție merge la corpul buclei. Prin urmare, operatorul WHILE este numit operator cu buclă cu o condiție prealabilă. În Fig. 24 este o diagramă bloc a acestui operator.
Fig. 24. Diagrama bloc a instrucțiunii WHILE
EXEMPLU EXEMPLU. Sunt date numerele A, B (A> 1). Obțineți toate puterile lui A mai mică decât B.
cititor (A, B); C: = A;
în timp ce C
Notă. Utilizarea competentă a operatorului WHILE își asumă capacitatea de a scrie corect starea pentru reluarea ciclului. Aici trebuie să țineți cont de următoarele recomandări:
1. Într-o condiție, ca într-o expresie logică, variabilele care își schimbă valorile în corpul unui ciclu trebuie să apară neapărat.
2. Pentru a evita buclele, este mai bine să scrieți mai întâi condiția pentru terminarea bucla și apoi să luați negația ei în instrucțiune.
3. Variabilele expresiei logice trebuie să obțină valorile inițiale înainte de a intra în instrucțiunea WHILE.
Operatorul REPETARE se numește ciclu operator cu postconditie, deoarece aici un control al expresiei operatorilor secvență Retrying plasate după corpul buclei (vezi. fig. 25).
Fig. 25. Diagrama de sintaxă a instrucțiunii de buclă REPEAT
Din diagrama de sintaxă, este clar că în acest operator nu este necesar să se utilizeze brațe de operare pentru corpul ciclului. Aici, cuvintele cheie REPEAT și UNTIL joacă rolul acestor paranteze.
În această declarație, corpul buclă este executat până când condiția după UNTIL este falsă. Starea de ieșire din buclă este adevărul expresiei. Vedem că aceasta este o formă de "ciclu-la". Acest operator este prezentat în Fig. 26.
Notă. Există trei diferențe principale între operatorii WHILE și REPEAT:
1. efectuat la sfârșitul anului, mai degrabă decât la începutul ciclului, ca și în while, astfel încât corpul buclei REPEAT declarație este executată cel puțin o dată în declarația REPEAT verifica condițiile de ieșire din bucla.
2. În REPEAT, ieșirea din buclă este adevărată și WHILE este falsă.
3. În instrucțiunea WHILE, corpul bucla are cel mai adesea forma unui operator compozit, în instrucțiunea REPEAT, parantezele operatorului nu sunt necesare pentru a organiza corpul bucla.
Instrucțiunea FOR este destinată să organizeze bucle, atunci când se știe în avans de câte ori se va repeta corpul ciclului. Aici, numărul de repetiții este controlat folosind o variabilă specială - parametrul buclă (variabila de control), căruia i se atribuie o succesiune de valori crescătoare (descrescătoare). Instrucțiunea FOR este prezentată în Fig. 27.
Fig. 27. Diagrama de sintaxă a operatorului de buclă FOR
Aici, "variabila" este parametrul bucla, "expresia 1" este valoarea initiala a parametrului, "expresia 2" este valoarea sa finala. Ca variabilă de control, trebuie să existe o variabilă declarată locală în bloc care conține instrucțiunea FOR dată. Variabila de control trebuie să fie de tipul ordinal. Valorile de început și de sfârșit au un tip compatibil cu tipul parametrului buclă.
Când instruciunea FOR începe executarea, valorile inițiale și finale sunt determinate o singură dată și aceste valori sunt stocate pe tot parcursul executării instrucțiunii.
Operatorul care este conținut în corpul bucla este executat o singură dată pentru fiecare valoare a variabilei de control în intervalul dintre valorile de început și sfârșit. Variabila de control este întotdeauna inițializată cu valoarea inițială. Își ia toate valorile din intervalul în incremente de 1, dacă este TO și în incremente de -1, dacă DOWNTO.
În cazul TO, dacă valoarea inițială depășește valoarea finală, corpul ciclului nu este executat.
Pentru cazul DOWNTO, acest lucru are loc atunci când valoarea inițială este mai mică decât valoarea finală. Din aceasta conchidem că operatorul de buclă FOR pune în aplicare, ca și când, circuitul "încă" al bucla - verificarea condiției de repetare a ciclului merge în corpul buclei.
1. Dacă corpul ciclului din acest operator este alcătuit din mai mulți operatori, atunci toate acestea sunt închise în parantezele operatorului (implementați construirea unui operator compus).
2. Spre deosebire de limbajul algoritmic al școlii, instrucțiunea FOR nu poate fi întreruptă prin atribuirea unei valori finale unei variabile de control. Variațiile variabilei buclă nu afectează numărul de repetări ale corpului bucla.
3. După executarea instrucțiunii, valoarea variabilei de control devine nedefinită, cu excepția cazului în care executarea instrucțiunii FOR a fost întreruptă de operatorul de salt.
Să luăm în considerare câteva exemple de utilizare a instrucțiunii FOR pentru organizarea proceselor ciclice.
Exemplul 1. Imprimați un număr de numere la început.
var SEC: întreg;
writeln ("Înainte de începerea");
pentru SEC: = 10 downto 1 face
scriteln ("zero"); writeln ('Start.')
În acest exemplu, variabila SEC manipulate are o valoare de tip INTEGER, dar în Pascal este definit ca variabilă de tip ordinal și, prin urmare, se poate accepta o valoare de tip CHAR sau îi aparțin enumerate tip așa cum este prezentat în Exemplul 2.
EXEMPLUL 2. Numărarea numărului de ore din săptămâna de lucru.
tip DAYS = (MO, TU, WE, TH, FR, SA, SU);
var DEN: ZILE; WT: întreg;
pentru DEN: = MO pentru SA
dacă DEN <> SA atunci WT: = WT + 8
altfel WT: = WT + 7; writeln (WT);
1. Ce este un operator structural?
2. Care este scopul operatorului compozit?
3. Ce operatori sunt utilizați pentru organizarea ramificării (alegere)?
4. Ce se folosește în instrucțiunea IF pentru a selecta una dintre cele două opțiuni?
5. Ce este folosit în instrucțiunea CASE pentru a selecta o opțiune din mai multe?
6. Cum este încorporat un operator IF în altul?
7. Care este diferența (din punct de vedere funcțional) a versiunilor complete și incomplete ale operatorului CASE?
8. Ce tipuri de cicluri (buclă-până sau buclă-înainte) implementează operatorii WHILE și REPEAT?
9. Ce se utilizează în instrucțiunile WHILE și REPEAT pentru a verifica sfârșitul bucla?
10. Care este rolul variabilei de control în instruciunea FOR?
11. Ce tip de variabilă de control poate fi utilizat într-o instrucțiune FOR?
12. Care este diferența dintre operatorii WHILE, REPEAT și FOR în ceea ce privește numărul de repetări ale corpului ciclului?
13. În care operatorii Pascal nu pot fi executați o singură dată corpul bucla?