Zrozumienie i używanie pętli w programowaniu Delphi
Operacje powtarzalne
Ryszard Saville
Pętla jest wspólnym elementem we wszystkich językach programowania. Delphi ma trzy Struktury kontrolne które wykonują wielokrotnie bloki kodu: for, repeat ... until i while ... do.
Pętla FOR
Załóżmy, że musimy powtórzyć operację określoną liczbę razy.
// pokaż komunikaty 1,2,3,4,5
był j: liczba całkowita;
zaczynać
dla j := 1 do 5 robić
zaczynać
ShowMessage('Box: '+IntToStr(j)) ;
koniec ;
koniec ;
Wartość zmiennej sterującej (j), która w rzeczywistości jest tylko licznikiem, określa, ile razy zostanie uruchomiona instrukcja for. Słowo kluczowe dla ustawia licznik. W poprzednim przykładzie wartość początkowa licznika jest ustawiona na 1. Wartość końcowa jest ustawiona na 5.
Gdy instrukcja for zaczyna działać, zmienna licznika jest ustawiana na wartość początkową. Delfy than 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 następującego po bloku kodu pętli for). Jeśli wartość początkowa jest mniejsza niż wartość końcowa, wykonywana jest treść pętli (tutaj: wyświetlany jest komunikat). Wreszcie Delphi dodaje 1 do licznika i ponownie rozpoczyna proces.
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 pętla jest wykonywana (nie ma możliwości określenia inkrementacji / dekrementacji innej niż jeden). Przykład pętli for, która odlicza wstecz.
był j: liczba całkowita;
zaczynać
dla j := 5 aż do 1 robić
zaczynać
ShowMessage('T minus ' + IntToStr(j) + 'sekundy') ;
koniec ;
ShowMessage('Dla wykonania sekwencji!') ;
koniec ;
Uwaga: ważne jest, aby nigdy nie zmieniać wartości zmiennej sterującej w środku pętli. Spowoduje to błędy.
Zagnieżdżone pętle FOR
Pisanie pętli for w innej pętli for (pętle zagnieżdżające) jest bardzo przydatne, gdy chcesz wypełnić/wyświetlić dane w tabeli lub siatce.
był 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 pętli for-next jest prosta: wewnętrzna pętla (licznik j) musi zostać ukończona przed następną instrukcją 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 rzecz biorąc, początkowe i końcowe słowa kluczowe nie są ściśle wymagane, jak widać. Jeśli begin i end nie są używane, instrukcja następująca bezpośrednio po instrukcji for jest uważana za treść pętli.
Pętla FOR-IN
Jeśli masz Delphi 2005 lub nowszą wersję, możesz użyć „nowej” iteracji stylu elementu w kolekcji nad kontenerami. Poniższy przykład pokazujeiteracja po wyrażeniach łańcuchowych: dla każdego znaku w łańcuchu sprawdź, czy znakiem jest 'a', 'e' lub 'i'.
stały
s = 'O programowaniu Delphi';
był
c : znak;
zaczynać
dla c w s robić
zaczynać
jeśli c 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 wykonać cykl. A co jeśli chcemy powtarzać operację, aż osiągniemy konkretny cel?
Najważniejszą różnicą między pętlą while-do a pętlą repeat-until jest to, że kod powtórz oświadczenie jest zawsze wykonywany co najmniej raz.
Ogólny wzorzec podczas pisania pętli typu repeat (i while) w Delphi jest następujący:
powtarzać
zaczynać
sprawozdania;
koniec ;
aż do warunek = prawda
podczas gdy warunek = prawda robić
zaczynać
sprawozdania;
koniec ;
Oto kod pokazujący 5 kolejnych okienek komunikatów przy użyciu funkcji powtarzania do:
był
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 warunek na końcu pętli (dlatego pętla repeat jest na pewno wykonywana przynajmniej raz).
Z drugiej strony instrukcja while ocenia warunek na początku pętli. Ponieważ test jest wykonywany na górze, zwykle musimy upewnić się, że warunek ma sens, zanim pętla zostanie przetworzona, jeśli nie jest to prawdą, kompilator może zdecydować o usunięciu pętli z kodu.
był j: liczba całkowita;
zaczynać
j:=0;
podczas gdy j<5 robić
zaczynać
j:=j+1;
ShowMessage('Box:'+IntToStr(j)) ;
koniec ;
koniec ;
Przerwij i kontynuuj
Procedury Break i Continue mogą być używane do kontrolowania przepływu powtarzających się instrukcji: Procedura Break powoduje, że przepływ sterowania wychodzi z instrukcji for, while lub repeat i kontynuuje przy następnej instrukcji podążając za pętlą oświadczenie. Kontynuuj umożliwia przepływowi kontroli przejście do następnej iteracji powtarzanej operacji.