Înțelegerea și utilizarea buclelor în programarea Delphi

Bucla este un element comun în toate limbajele de programare. Delphi are trei structuri de control care execută blocuri de cod în mod repetat: pentru, repeta ... până și când ... face.

Bucla FOR

Să presupunem că trebuie să repetăm ​​o operație de un număr fix de ori.

// afișează 1,2,3,4,5 căsuțe de mesaje
var j: număr întreg;
începe
pentru j: = 1 la 5 do
începe
ShowMessage ('Caseta:' + IntToStr (j));
Sfârșit;
Sfârșit;

Valoarea unei variabile de control (j), care este într-adevăr doar un contor, determină de câte ori rulează o instrucțiune pentru. Cuvântul cheie pentru setează un contor. În exemplul precedent, valoarea de pornire a contorului este setată la 1. Valoarea finală este setată la 5.
Când instrucțiunea for începe să curgă variabila contorului este setată la valoarea de pornire. Delphi verifică dacă valoarea contorului este mai mică decât valoarea finală. Dacă valoarea este mai mare, nu se face nimic (execuția programului sare la linia de cod imediat după codul de cod pentru buclă). Dacă valoarea de pornire este mai mică decât valoarea finală, corpul buclei este executat (aici: este afișată caseta de mesaj). În cele din urmă, Delphi adaugă 1 la contor și începe procesul din nou.

Uneori este necesar să numeri înapoi. downto Cuvântul cheie specifică faptul că valoarea unui contor ar trebui să fie decrementată de una de fiecare dată când se execută bucla (nu este posibil să se specifice o incrementare / decrementare decât una). Un exemplu de buclă pentru care contează înapoi.

var j: număr întreg;
începe
pentru j: = 5 downto 1 do
începe
ShowMessage ('T minus' + IntToStr (j) + 'secunde');
Sfârșit;
ShowMessage ('Pentru secvența executată!');
Sfârșit;

Notă: este important să nu schimbați niciodată valoarea variabilei de control din mijlocul buclei. Dacă faceți acest lucru, va cauza erori.

Cuibărit pentru bucle

Scrierea unei bucle pentru o altă buclă (bucle de cuibărit) este foarte utilă atunci când doriți să completați / afișați datele într-un tabel sau într-o grilă.

var k, j: număr întreg;
începe
// această dublă buclă este executată de 4x4 = de 16 ori
pentru k: = 1 la 4 do
pentru j: = 4 downto 1 do
ShowMessage ('Caseta:' + IntToStr (k) + ',' + IntToStr (j));
Sfârșit;

Regula pentru cuibarea buclelor pentru următoarea este simplă: bucla interioară (contorul j) trebuie completată înainte de a se întâlni următoarea instrucțiune pentru bucla exterioară (contorul k). Putem avea bucle cuibăritate triplu sau patruped, sau chiar mai multe.

Notă: În general, cuvintele cheie început și final nu sunt strict obligatorii, după cum puteți vedea. Dacă începutul și sfârșitul nu sunt utilizate, instrucțiunea care urmează imediat instrucțiunii for este considerată corpul buclei.

Bucla FOR-IN

Dacă aveți Delphi 2005 sau orice altă versiune mai nouă, puteți utiliza iterarea „nouă” pentru stil-element-în-colectare peste containere. Următorul exemplu demonstrează iterarea prin expresiile șirului: pentru fiecare caracter în șir, verificați dacă caracterul este fie „a”, fie „e” sau „i”.

const
s = 'Despre programarea Delphi';
var
c: char;
începe
pentru c în s do
începe
dacă c în [ 'A', 'e', ​​'i'] apoi
începe
// Fă ceva
Sfârșit;
Sfârșit;
Sfârșit;

Buclele WHILE și REPEAT

Uneori nu vom ști exact de câte ori ar trebui să circule o buclă. Ce se întâmplă dacă vrem să repetăm ​​o operație până când atingem un obiectiv specific?

Cea mai importantă diferență între bucla while-do și bucla de repetare până este că codul instrucțiunii de repetare este întotdeauna executat cel puțin o dată.

Modelul general când scriem un tip de buclă (și în timp) repetat în Delphi este următorul:

repeta
începe
declarații;
Sfârșit;
pana cand condition = true
in timp ce condition = true do
începe
declarații;
Sfârșit;

Iată codul care arată 5 căsuțe de mesaje succesive folosind repetarea până:

var
j: număr întreg;
începe
j: = 0;
repeta
începe
j: = j + 1;
ShowMessage ('Caseta:' + IntToStr (j));
Sfârșit;
pana cand j> 5;
Sfârșit;

După cum puteți vedea, instrucțiunea de repetare evaluează o condiție la sfârșitul buclei (prin urmare, bucla de repetare este executată sigur cel puțin o dată).

Declarația while, pe de altă parte, evaluează o condiție la începutul buclei. Deoarece testul se face în partea de sus, va trebui, de obicei, să ne asigurăm că condiția are sens înainte de procesarea buclei, dacă acest lucru nu este adevărat, compilatorul poate decide să elimine bucla din cod.

var j: număr întreg;
începe
j: = 0;
in timp ce j < 5 do
începe
j: = j + 1;
ShowMessage ('Caseta:' + IntToStr (j));
Sfârșit;
Sfârșit;

Pauză și continuă

Procedurile de pauză și continuare pot fi utilizate pentru a controla fluxul de enunțuri repetitive: Procedura de pauză determină ieșirea fluxului de control a pentru, în timp, sau repetarea instrucțiunii și continuarea la următoarea instrucțiune după instrucțiunea buclă. Continuare permite fluxului de control să treacă la următoarea iterație a operației de repetare.