Pętla jest wspólnym elementem we wszystkich językach programowania. Delphi ma trzy Struktury kontrolne które wykonują bloki kodu wielokrotnie: dla, powtórz... dopóki i dopóki... robić.
Pętla FOR
Załóżmy, że musimy powtórzyć operację określoną liczbę razy.
// pokaż 1,2,3,4,5 skrzynki wiadomości
var j: liczba całkowita;
zaczynać
dla j: = 1 do 5 robić
zaczynać
ShowMessage („Box:” + IntToStr (j));
koniec;
koniec;
Wartość zmiennej kontrolnej (j), która tak naprawdę jest tylko licznikiem, określa, ile razy działa instrukcja for. Słowo kluczowe dla konfiguruje licznik. W poprzednim przykładzie wartość początkowa licznika jest ustawiona na 1. Wartość końcowa jest ustawiona na 5.
Kiedy instrukcja for zaczyna działać, zmienna licznika jest ustawiana na wartość początkową. Delfy niż sprawdza, czy wartość licznika jest mniejsza niż wartość końcowa. Jeśli wartość jest większa, nic się nie dzieje (wykonanie programu przeskakuje do wiersza kodu bezpośrednio po bloku kodu pętli for). Jeśli wartość początkowa jest mniejsza niż wartość końcowa, wykonywana jest treść pętli (tutaj: wyświetlane jest okno komunikatu). Na koniec Delphi dodaje 1 do licznika i rozpoczyna proces od nowa.
Czasami trzeba liczyć wstecz. The aż do słowo kluczowe określa, że wartość licznika powinna być zmniejszana o jeden za każdym razem, gdy wykonywana jest pętla (nie jest możliwe określenie inkrementacji / dekrementacji innej niż jeden). Przykład pętli for, która liczy się wstecz.
var j: liczba całkowita;
zaczynać
dla j: = 5 aż do 1 robić
zaczynać
ShowMessage („T minus” + IntToStr (j) + „sekundy”);
koniec;
ShowMessage („Dla sekwencji wykonanej!”);
koniec;
Uwaga: ważne jest, aby nigdy nie zmieniać wartości zmiennej kontrolnej w środku pętli. Może to spowodować błędy.
Zagnieżdżone pętle FOR
Pisanie pętli for w innej pętli for (zagnieżdżanie pętli) jest bardzo przydatne, gdy chcesz wypełnić / wyświetlić dane w tabeli lub siatce.
var k, j: liczba całkowita;
zaczynać
// ta podwójna pętla jest wykonywana 4x4 = 16 razy
dla k: = 1 do 4 robić
dla j: = 4 aż do 1 robić
ShowMessage („Box:” + IntToStr (k) + ”,„ + IntToStr (j));
koniec;
Zasada zagnieżdżania dla następnych pętli jest prosta: pętla wewnętrzna (licznik j) musi zostać zakończona przed napotkaniem następnej instrukcji dla pętli zewnętrznej (licznik k). Możemy mieć potrójnie lub poczwórnie zagnieżdżone pętle, a nawet więcej.
Uwaga: Ogólnie, jak widać, początkowe i końcowe słowa kluczowe nie są ściśle wymagane. Jeśli nie jest używany początek i koniec, instrukcja bezpośrednio po instrukcji for jest uważana za treść pętli.
Pętla FOR-IN
Jeśli masz Delphi 2005 lub dowolną nowszą wersję, możesz użyć „nowej” iteracji stylu dla elementu w kolekcji nad kontenerami. Poniższy przykład pokazuje iteracja po wyrażeniach łańcuchowych: dla każdego znaku w ciągu sprawdź, czy znak to „a”, „e” lub „i”.
const
s = „Informacje o programowaniu w Delphi”;
var
c: char;
zaczynać
dla do w s robić
zaczynać
gdyby do w [„a”, „e”, „i”] następnie
zaczynać
// Zrób coś
koniec;
koniec;
koniec;
Pętle WHILE i REPEAT
Czasami nie wiemy dokładnie, ile razy pętla powinna się cyklicznie przełączać. Co jeśli chcemy powtórzyć operację, dopóki nie osiągniemy określonego celu?
Najważniejszą różnicą między pętlą while-do i pętlą powtarzania jest kod powtórz zdanie jest zawsze wykonywany co najmniej raz.
Ogólny wzorzec, w którym piszemy w Delphi powtarzalny (i while) typ pętli jest następujący:
powtarzać
zaczynać
sprawozdania;
koniec;
aż do warunek = prawda
podczas warunek = prawda robić
zaczynać
sprawozdania;
koniec;
Oto kod, który pokazuje 5 kolejnych pól wiadomości przy użyciu powtarzania do:
var
j: liczba całkowita;
zaczynać
j: = 0;
powtarzać
zaczynać
j: = j + 1;
ShowMessage („Box:” + IntToStr (j));
koniec;
aż do j> 5;
koniec;
Jak widać, instrukcja repeat ocenia stan na końcu pętli (dlatego pętla powtarzania jest wykonywana na pewno przynajmniej raz).
Z drugiej strony instrukcja while ocenia warunek na początku pętli. Ponieważ test jest wykonywany u góry, zwykle musimy upewnić się, że warunek ma sens przed przetworzeniem pętli, jeśli nie jest to prawdą kompilator może zdecydować o usunięciu pętli z kodu.
var j: liczba całkowita;
zaczynać
j: = 0;
podczas j <5 robić
zaczynać
j: = j + 1;
ShowMessage („Box:” + IntToStr (j));
koniec;
koniec;
Przerwij i kontynuuj
Procedury Break and Continue mogą być używane do kontrolowania przepływu powtarzalnych instrukcji: The Break Procedura powoduje, że przepływ kontroli kończy instrukcję for, while lub powtórz i kontynuuje następną komunikat po pętli komunikat. Kontynuuj pozwala przepływowi sterowania przejść do następnej iteracji powtarzanej operacji.