Ciclu fără sfârșit

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 14 iunie 2019; verificările necesită 2 modificări .

O buclă infinită în programare  este o buclă scrisă în așa fel încât condiția de ieșire să nu fie îndeplinită niciodată. Un program care intră într-o buclă infinită se spune uneori a fi într-o buclă [ 1] .

Conceptul de buclă infinită joacă un rol important în conceptul de Turing-completitudine a limbajelor de programare: pe de o parte, orice buclă poate fi reprezentată ca o buclă infinită, în corpul căreia există un test pentru condiția de ieșire și o comandă pentru a ieși din buclă, pe de altă parte, orice program poate fi scris cu ajutor:


Buclă infinită în limbajul Pascal :

//Opțiunea 1 în timp ce true do begin {face something} if {condiție pentru ieșirea din bucla infinită} apoi break end ; //Opțiunea 2 repetă {fă ceva} până la fals ;

Pentru limbile asemănătoare C : [2]

//opțiunea 1 pentru (;;) { /* Fă ceva */ } // opțiunea 2 în timp ce ( adevărat ) { /* Fă ceva */ }

Limba Ada (precum și un număr de descendenți ai săi) are un construct special care descrie o buclă infinită: [3]

loop -- face ceva final bucla ;

În plus, Ada vă permite să ieșiți dintr-o dată din mai multe bucle imbricate și are, de asemenea, o formă condiționată a instrucțiunii de ieșire, care vă permite să evitați utilizarea instrucțiunii branch:

Out_Cycle : buclă ... buclă ... ieșire din Out_Cycle când Logic_Exp ; -- echivalent cu if Logic_Exp then exit Out_Cycle ; termina daca ; ... buclă finală ; _ ... sfârșitul buclei Out_Cycle ; -- execuția programului va continua de aici -- după executarea instrucțiunii exit Out_Cycle;

Practică

Programele din care nu există ieșire (de exemplu , sisteme de operare , firmware pentru microcontroler ) sunt de obicei o buclă fără sfârșit.

În scrierea programelor care rezolvă probleme reale ale utilizatorilor, buclele infinite, de regulă, sunt una dintre sursele de funcționare instabilă a programului. Între timp, atunci când scriu programe algoritmice, adică programe care rezolvă anumite probleme de informatică aplicată și nu au legătură directă cu probleme practice (sau mai degrabă teoretice), folosirea buclelor infinite este o tehnică profesională foarte bună.

Deci, de exemplu, atunci când rezolvă probleme la olimpiadele de informatică (programare) de diferite niveluri, sarcina principală a participantului este să scrie programe care să rezolve problemele algoritmice propuse în timpul alocat. De regulă, astfel de probleme sunt rezolvate folosind cicluri. În mod evident, participantul nu are suficient timp să se gândească la condiția de ieșire din buclă (care ar trebui să fie indicată în așa-numita whilebuclă). Prin urmare, un truc foarte util este să folosești bucle infinite modificate.

Această tehnică se bazează pe faptul că fiecare limbaj de programare modern oferă un număr de operatori care vă permit să întrerupeți execuția corpului buclei nu după următoarea iterație, ci în timpul următoarei execuții (de exemplu, Breakîn Delphi , EXIT FORîn BASIC , etc. .). Pentru a economisi timp, participantul la olimpiade scrie o buclă infinită whilecu o condiție de execuție True( while True do ...), apoi, după caz, în corpul buclei scrie instrucțiuni de verificare a condiției, care, dacă este necesar, întrerup execuția buclei prin Break. - declarații asemănătoare.

Uneori (de exemplu, în scripturile pentru controlul caracterelor din jocurile pe calculator ), ieșirea din program este o oprire a interpretului . Deci, dezvoltatorul nu trebuie să noteze în mod explicit condiția de ieșire, ceea ce înseamnă că programul se transformă într-o buclă fără sfârșit. Acest principiu este adoptat, de exemplu, în Game Maker , în unele jocuri pentru programatori .

Note

  1. Utilizarea acestui verb a depășit cu mult programarea și este adesea folosit în relație cu subiecții în sensul caracterizării comportamentului incorect.
  2. Buclă infinită în C/C++ -   Programare ? . Preluat: 2 aprilie 2022.
  3. Ada (limbaj de programare) - Biblioteca Națională. N. E. Bauman . en.bmstu.wiki . Preluat: 2 aprilie 2022.