For
rk7771
Instrukcja For ... To ... Do (nazywana pętlą "dla")
Instrukcja ta posiada z góry okresloną liczbę powtórzeń. W składni instrukcji występuje wczesniej zadeklarowana zmienna zwana zmienną sterującą. Zmiennej tej podaje się wartość początkową oraz końcową. Wartość końcowa określa warunek zakończenia działania pętli zaimplementowanej instrukcją For ... To ... Do.
Używaj pętli for zawsze wtedy gdy wiesz ile iteracji pętli chcesz wykonać
Pierwszą instrukcją musi być słowo for
. Po nim następuje nazwa zmiennej, która musi przybrać wartość początkową. Następnie kolejne słowo kluczowe ? To, po którym następuje wartość końcowa pętli. Na samym końcu słowo kluczowe Do po którym należy umieścić instrukcje, jakie mają być wykonane (tzw. ciało pętli). Podsumowując, budowa pętli przedstawia się następująco:
for Zmienna := {Wartość początkowa} to {Wartość końcowa} do {instrukcje }
W instrukcji tej zmienna sterująca jest przy każdym przebiegu automatycznie zwiększana.
Przykładad zastosowania pętli for celem 10-krotnego wyświetlania tekstu na konsoli.
program ForLoop;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
I : Integer; // deklaracja zmiennej
begin
for I := 1 to 10 do
Writeln('Odliczanie... ' + IntToStr(i));
Readln;
end.
Odliczanie od góry do dołu
Pętla, jaką przedstawiłem powyżej, realizuje odliczanie od dołu (wartości mniejszej) do góry (wartość wyższa). Istnieje możliwość odliczania odwrotnego, czyli od wartości wyższej do mniejszej. W tym celu słowo kluczowe to należy zastąpić słowem DownTo. Wystarczy zatem drobna zmiana pętli:
for I := 10 downto 1 do
Writeln('Odliczanie... ' + IntToStr(i));
Teraz program wykona pętlę z wartością początkową równą 10.
Z pętlą for wiąże się jedno ostrzeżenie kompilatora. Otóż w przypadku, gdy pętla for znajduje się wewnątrz procedury lub funkcji, zmienna pomocnicza musi być zmienną lokalną. Przykładowo, próba skompilowania takiego kodu:
var
I: Integer; // deklaracja zmiennej
procedure Loop;
begin
for I := 0 to 100 do { instrukcje }
end;
wiąże się z wystąpieniem ostrzeżenia: [Warning] LoopBreak.dpr(10): For loop control variable must be simple local variable. Oznacza to, iż zmienna (w tym przypadku I) może być modyfikowana przez inne procedury, a to nie jest zalecane. Umieszczenie deklaracji zmiennej wewnątrz procedury Loop
pozwoli na prawidłową kompilację programu.
Licznik pętli
W pętli for obowiązkowe jest użycie jednej zmiennej, która przy każdej iteracji pętli będzie stanowiła licznik wykonania (czyli określała liczbę już wykonanych iteracji). Tutaj uwaga dla programistów C/C++: w Delphi pętla for nie jest aż tak elastyczna jak w językach C/C++ ? nie jest możliwy ?przeskok? pętli od razu o dwie pozycje [#]_. W Delphi zmienna pomocnicza (w tym wypadku I) zawsze będzie się zwiększać o jedną pozycję.
Zwalnianie wykonywania pętli
Pętla jest wykonywana w takim krótkim czasie, że niekiedy trudno zauważyć jej realne działanie ? na ekranie komputera obserwujemy już rezultat wykonania całej pętli. Istnieje możliwość lekkiego opóźnienia kolejnej iteracji, w tym celu należy wykorzystać procedurę Sleep. Mówię o tym, gdyż użycie tej instrukcji może się przydać nie tylko w związku z pętlami, ale również w innych sytaucjach.
Do funkcji Sleep należy przekazać wartość czasu, o którą dalsze wykonywanie programu ma zostać wstrzymane, np.:
Sleep(1000);
Wartość w nawiasie podajemy w milisekundach, tak więc w powyższym przykładzie działanie programu zostanie zwolnione o 1 sekundę.
W Turbo Pascalu odpowiednikiem funkcji Sleep jest komenda Delay.
Wartości w postaci operacji
Jeśli wartość początkowa lub wartość końcowa są zapisane w postaci wyrażenia złożonego (funkcji, procedury lub ciągu operacji), wyrażenie to jest obliczane jednorazowo przed rozpoczęciem wykonywania całej pętli i nie ulega zmianie w kolejnych iteracjach.
Zobacz też:
.. [#] Przeskok taki jest możliwy z użyciem triku związanego ze wskaźnikami (jest to sposób na ?oszukanie? kompilatora).
Patyk: od Delphi 2005 bodajże. Ogólnie w .NET.
Nie samą składnią żyje człowiek - do wielu przemawiają przykłady. Postaraj się.
Od kiedy to można stosować polskie znaki w nazwach zmiennych, co? :> Już lepiej daj "wartosc_poczatkowa" i "wartosc_koncowa" - będzie ładniej wyglądało :)