17. Operatorii unui ciclu cu condiție. Întrerupeți ciclul.
Un ciclu cu o condiție postcondiționată. în timp ce
Structura face. în timp ce este folosit pentru a organiza o execuție ciclică a unui operator sau a unui set de operatori, numit corp de ciclu, până când o anumită condiție este încălcată. Sintaxa structurii de control face. în timp ce:
face declarația în timp;
Structura funcționează după cum urmează. Operatorul corpului buclă este executat. Condiția este apoi evaluată, o expresie care ar trebui să returneze un rezultat boolean. Dacă expresia returnează valoarea adevărată (nu este o valoare nulă), se repetă executarea corpului buclă și apoi expresia este evaluată din nou. Această repetare ciclică a unei buclă continuă până când expresia de testare se întoarce falsă (zero). După aceasta, ciclul este finalizat și controlul este transferat operatorului în urma efectuării structurii. în timp ce.
Deoarece expresia este verificată după corpul buclă, bucla va fi executată cel puțin o dată, chiar dacă expresia este falsă simultan. Pe de altă parte, programatorul trebuie să fie sigur că expresia va reveni fals mai devreme sau mai târziu. Dacă acest lucru nu se întâmplă, atunci programul "se blochează", adică bucla va fi executată pe o perioadă nedeterminată. Uneori se folosesc astfel de cicluri nesfârșite. Dar în acest caz, în interiorul corpului buclei, acesta trebuie să fie întrerupt la un moment dat, de exemplu printr-o declarație de pauză sau prin alte metode.
De obicei, instrucțiunea do este utilă pentru organizarea unei căutări între un set de obiecte care are o anumită proprietate. Și în prealabil ar trebui să se știe că setul de obiecte nu este gol, adică cel puțin un obiect din acesta este disponibil. În plus, trebuie să existe un criteriu care să vă permită să verificați dacă obiectul curent este ultima. Apoi corpul bucla include operatorii de tranziție la un obiect nou și un fel de prelucrare, în timp ce condiția timpului include verificarea dacă obiectul nu este ultima și dacă nu are proprietățile dorite. Dacă obiectul este ultima sau
se găsesc proprietățile necesare, execuția bucla este întreruptă. Dacă obiectul nu este ultimul și proprietățile pe care nu le găsește, acesta se deplasează la următorul obiect.
Dacă setul de obiecte testate poate fi gol, trebuie să utilizați o instrucțiune diferită în timp. Dacă numărul de repetări ale bucla este cunoscut în prealabil, este mai bine să utilizați instrucțiunea pentru.
Ciclu cu condiție prealabilă în timp ce
Instrucțiunea while este utilizată pentru a aranja corpul bucla să execute ciclic în timp ce o anumită condiție este îndeplinită. Sintaxa structurii de timp este:
în timp ce operatorul (condiție);
Structura funcționează după cum urmează. Mai întâi, se calculează o condiție care ar trebui să returneze un rezultat boolean. Dacă expresia returnează adevărată (valoare nenulă), atunci operatorul corpului buclă este executat și apoi se evaluează expresia care definește condiția. Această repetare ciclică a executării operatorului și verificarea condiției este continuată până când condiția returnează valoarea false (zero). După aceasta, bucla se termină și controlul este transmis operatorului după structura de timp.
Deoarece testul expresiei este efectuat înainte de execuția operatorului corpului de buclă, atunci dacă condiția este falsă simultan, instrucțiunea nu va fi executată o singură dată.
Programatorul trebuie să fie sigur că expresia va reveni fals mai devreme sau mai târziu. Dacă acest lucru nu se întâmplă, atunci programul "se blochează", adică bucla va fi executată pe o perioadă nedeterminată. Uneori se folosesc astfel de cicluri nesfârșite. Dar în acest caz, în interiorul corpului buclei, trebuie să fie întrerupt la un moment dat, de exemplu, prin declarația de pauză, care întrerupe buclele sau prin alte metode.
Adesea, operatorul de timp este utilizat pentru a organiza o căutare între un set de obiecte dintr-unul care are anumite proprietăți specifice. Și nu este exclus faptul că setul de obiecte poate fi gol, adică care nu conține nici un obiect. În plus, trebuie să existe un criteriu care să vă permită să verificați dacă obiectul curent este ultima. Apoi corpul bucla include operatorii de tranziție la un obiect nou și un fel de procesare, în timp ce condiția timpului include verificarea dacă obiectul nu este ultima și dacă are proprietatea dorită. Dacă una dintre aceste condiții este încălcată (obiectul este ultima sau are proprietatea dorită), execuția ciclului este întreruptă.
Întrerupeți buclă: operatorii rupe, continuați, reveniți, funcția Abort
În unele cazuri, este de dorit să întrerupeți repetarea ciclului analizând anumite condiții din interiorul acestuia. Acest lucru poate fi necesar în cazurile în care verificările pentru starea finală a unui ciclu sunt greoaie, necesită compararea și compararea mai multor etape a unor date și toate aceste verificări nu pot fi pur și simplu plasate într-o expresie a condiției pentru declarațiile "for, do" sau "while".
Una dintre soluțiile posibile la această problemă este să introduceți un cod de cod în virgulă (variabilă). Când toate condițiile finale ale acestei variabile sunt îndeplinite, se atribuie o anumită valoare condițională. Apoi, condiția din operatori pentru, face, sau în timp ce este redus pentru a verifica dacă valoarea acestui pavilion este egală cu valoarea condițională acceptată.
O altă modalitate de a rezolva problema este să utilizați declarația de pauză. Se utilizează atât în operatorii de buclă, cât și în structurile comutatoarelor. Instrucțiunea de întrerupere întrerupe executarea corpului oricărei forțe pentru, a face sau în timp ce se află în buclă și trece controlul la următoarea afirmație executată de instrucțiune.
De exemplu, bucla din exemplul de căutare a textului din fișierul discutat în secțiunile anterioare ar putea fi organizată după cum urmează:
în timp ce (! feof (F))
fgets (S, 256, F);
dacă (strstr (S, SKey.c_str ())! = NULL) pauză;
>
O altă modalitate de a întrerupe un ciclu este folosirea operatorului "geto", care transferă controlul către un operator din afara corpului buclei.
Pentru a întrerupe buclele plasate în funcții, puteți folosi instruciunea returnată. Spre deosebire de instrucțiunea de pauză, instrucțiunea de returnare va întrerupe nu numai execuția bucla, ci și executarea funcției în care este localizată buclă.
Întrerupeți executarea unui ciclu și, în același timp, și blocul în care se află bucla, puteți genera și câteva excepții. Cel mai adesea, funcția Abort este utilizată în acest scop, generând o excepție "silențioasă" care nu este asociată cu niciun mesaj de eroare.
Metodele descrise au întrerupt executarea ciclului. Există, de asemenea, procedura Continue, care întrerupe numai executarea iterației curente, execuția curentă a corpului buclei și trece controlul la următoarea iterație.