Zanka je pogost element v vseh programskih jezikih. Delphi ima tri nadzorne strukture ki večkrat izvajajo bloke kode: za, ponovite... dokler in dokler... stori.
Zanka ZA
Recimo, da moramo operacijo ponoviti določeno številokrat.
// prikažite 1,2,3,4,5 polja s sporočili
var j: celo število;
začeti
za j: = 1 do 5 stori
začeti
ShowMessage ('Okvir:' + IntToStr (j));
konec;
konec;
Vrednost kontrolne spremenljivke (j), ki je v resnici samo števec, določa, kolikokrat se zažene stavek. Ključna beseda za nastavitev števca. V prejšnjem primeru je začetna vrednost števca nastavljena na 1. Končna vrednost je nastavljena na 5.
Ko se stavek for začne izvajati spremenljivko števca, je nastavljena na začetno vrednost. Delphi kot preveri, ali je vrednost števca manjša od končne vrednosti. Če je vrednost večja, se nič ne naredi (izvajanje programa skoči na vrstico kode takoj za blokom koda zanke). Če je začetna vrednost manjša od končne vrednosti, se izvede telo zanke (tukaj: prikaže se polje s sporočilom). Končno Delphi doda 1 na števec in začne postopek znova.
Včasih je treba šteti nazaj. The downto Ključna beseda določa, da je treba vrednost števca zmanjšati za eno vsakič, ko se zanka izvrši (ni mogoče določiti prirasta / zmanjšanja, razen enega). Primer zanke for, ki šteje nazaj.
var j: celo število;
začeti
za j: = 5 downto 1 stori
začeti
ShowMessage ('T minus' + IntToStr (j) + 'sekunde');
konec;
ShowMessage ('Za izvedeno zaporedje!');
konec;
Opomba: pomembno je, da vrednosti kontrolne spremenljivke nikoli ne spreminjate na sredini zanke. To bo povzročilo napake.
Gnezdijo za zanke
Pisanje zanke znotraj druge zanke (gnezditvene zanke) je zelo koristno, če želite zapolniti / prikazati podatke v tabeli ali mreži.
var k, j: celo število;
začeti
// ta dvojna zanka se izvede 4x4 = 16-krat
za k: = 1 do 4 stori
za j: = 4 downto 1 stori
ShowMessage ('Okvir:' + IntToStr (k) + ',' + IntToStr (j));
konec;
Pravilo za gnezdenje zank za naslednjo je preprosto: notranja zanka (j števec) mora biti končana, preden se sreča naslednji stavek za zunanjo zanko (k števec). Lahko imamo trojno ali štirikratno ugnezdene zanke ali celo več.
Opomba: Začetne in končne ključne besede na splošno niso nujno potrebne, kot lahko vidite. Če se začetek in konec ne uporabljata, se izjava, ki je takoj za stavkom, šteje za telo zanke.
Zanka FOR-IN
Če imate Delphi 2005 ali katero koli novejšo različico, lahko uporabite "novo" za iteracijo v slogu elementov v zbirki. Naslednji primer prikazuje iteracija nad izrazi nizov: za vsak znak v nizu preverite, ali je znak ali 'a' ali 'e' ali 'i'.
konst
s = 'O programiranju Delphija';
var
c: char;
začeti
za c v s stori
začeti
če c v ['a', 'e', 'i'] torej
začeti
// naredi kaj
konec;
konec;
konec;
Zank WHILE in REPEAT
Včasih ne bomo natančno vedeli, kolikokrat mora krožiti zanka. Kaj pa, če želimo ponoviti operacijo, dokler ne dosežemo določenega cilja?
Najpomembnejša razlika med zanko while-do in zanko ponavljajočega se dokler je kodo ponovite izjavo se vedno izvaja vsaj enkrat.
Splošni vzorec, ko v Delfih napišemo ponovljeno (in medtem ko) vrsto zanke, je naslednji:
ponovite
začeti
izjave;
konec;
dokler stanje = res
medtem stanje = res stori
začeti
izjave;
konec;
Tu je koda za prikaz 5 zaporednih polj s sporočilom s ponovitvijo:
var
j: celo število;
začeti
j: = 0;
ponovite
začeti
j: = j + 1;
ShowMessage ('Okvir:' + IntToStr (j));
konec;
dokler j> 5;
konec;
Kot lahko vidite, stavek ponovitve oceni stanje na koncu zanke (zato se ponovitvena zanka vsaj enkrat zagotovo izvede).
Po drugi strani izjava, medtem ko ovrednoti stanje na začetku zanke. Ker se test izvaja na vrhu, bomo običajno morali pred obdelavo zanke preveriti, ali je pogoj smiseln, če to ni res prevajalnik se lahko odloči, da odstrani zanko iz kode.
var j: celo število;
začeti
j: = 0;
medtem j <5 stori
začeti
j: = j + 1;
ShowMessage ('Okvir:' + IntToStr (j));
konec;
konec;
Premor in nadaljevanje
Postopke prekinitve in nadaljevanja lahko uporabite za nadzor pretoka ponavljajočih se izjav: Prekinitev postopek povzroči, da tok nadzora zapusti a, medtem ali ponovi izjavo in nadaljuje na naslednji izjava po zanki izjava. Continue omogoča pretok krmiljenja, da nadaljuje na naslednjo ponovitev operacije.