Zmienna sterująca pętlą (nazywana także zmienną kontrolną) to zmienna stosowana w określonym języku programowania, tworzona i używana do sterowania wykonaniem instrukcji iteracyjnejMichael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, .
Zmienna sterująca przyjmuje kolejne wartości z pewnego zdefiniowanego zakresu. W wielu językach programowania składnia danego języka jest tak skonstruowana, że przy przejściu do kolejnej iteracji następuje automatyczne nadanie nowej wartości zmiennej sterującej (nie wyrażone jawnie w kodzie źródłowym; nie odnosi się to do języka C i pokrewnychBrian W. Kernighan, Dennis M. Ritche, Język C, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, Seria: Biblioteka Inżynierii Oprogramowania, ), zmiana dokonywana jest o wartość: wartość +1 (lub wartość następnika) wartość -1 (lub wartość poprzednika) o inną wartość, jeżeli język dopuszcza specyfikację tzw. „kroku” zmiennej sterującejJan Bielecki, Rozszerzony PL/I i JCL w systemie OS/RIAD, Państwowe Wydawnictwo Naukowe, Warszawa 1986, Seria: Biblioteka Informatyki, Mike Duck, Języki mikrokomputerów. Przewodnik dla początkująych. Basic, Pascal, Logo, Prolog, Comal, Forth, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, tłumaczenie: Marcin Turski, .
Z powyższych względów istnieje zwykle ograniczenie, co do typu zmiennej sterującej, najczęściej musi być typu porządkowego, choć np. Fortran dopuszcza dane rzeczywiste.
Istotnym zagadnieniem jest wartość zmiennej sterującej po wyjściu z instrukcji iteracyjnej. W różnych językach istnieją konkretne rozwiązania: zmienna sterująca jest lokalna dla bloku iteracji i nie jest dostępna na zewnątrz (a więc nie jest dostępna po zakończeniu iteracji), np. AdaA. Nico Habermann, Dewayne E. Perry, Ada dla zaawansowanych, Wydawnictwa Naukowo-Techniczne, Warszawa 1989 r., seria: Biblioteka Inżynierii Oprogramowania, wartość zmiennej sterującej jest nieokreślona po wyjściu z pętli wartość zmiennej sterującej jest nieokreślona po wyjściu z pętli, z wyjątkiem sytuacji wyjścia z pętli za pomocą instrukcji skoku z bloku iteracji, w tym przypadku zmienna sterująca zachowuje swą wartość z chwili wykonania skoku (np. PascalAndrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994 r., seria: Biblioteka Użytkownika Mikrokomputerów , ISSN 0867-6011) wartość zmiennej sterującej jest określona i równa wartości tej zmiennej w momencie zakończenia lub opuszczenia iteracji (np. PL/I, CJan Bielecki, Turbo C z grafiką na IBM PC, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, Seria: Mikrokomputery, )
W konkretnych językach mogą być nałożone inne ograniczenia na zmienną sterującą: zmienna sterująca musi być zmienną lokalną (np. PascalMichał Iglewski, Jan Madey, Stanisław Matwin, Pascal. Język wzorcowy – Pascal 360., Wydawnictwa Naukowo-Techniczne, Warszawa 1984, wydanie trzecie – zmienione, Seria: Biblioteka Inżynierii Oprogramowania, ) zmienna sterująca musi być zmienną prostą, tzn. nie może być polem struktury (rekordu), elementem tablicy itp. (np. Pascal) nie wolno w bloku iteracji zmieniać wartości zmiennej sterującej (jest tylko do odczytu), np. Ada.
W innych językach są zastosowane bardziej elastyczne rozwiązania: zmienna sterująca może być zmieniana wewnątrz pętli i ma wartość określoną po wyjściu lub zakończeniu pętli, np., Visual Basic, VBAJohn Walkenbach, Excel 2003 PL. Programowanie w VBA., HELION 2004 r., .
Inne podejście zostało zastosowane w języku CJan Bielecki, Od C do C++, programowanie obiektowe w języku C, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, i pokrewnych (C++, C--, Java itp.), wynikające w znacznej mierze z odmienności instrukcji for, w której programista – w tych językach – musi sam, wprost, implementować kontrolę warunku zakończenia pętli, zmianę wartości zmiennej sterującej itd., o ile w ogóle istnieje potrzeba zastosowania zmiennej sterującej, która w przypadku tych języków nie jest wymagana. Nie ma tu więc istotnych ograniczeń występujących w innych językach programowania, w których aby obejść ograniczenia dotyczące zmiennej sterującej i zmiany jej wartości programista musi korzystać z instrukcji repetycyjnych pętli (np. typu while, until) i implementować w nich samodzielnie obsługę zmiennej sterującej, w tym przypadku pozbawionej ograniczeń narzuconych w instrukcjach iteracyjnych (typu for).
Przykład zastosowania instrukcji sterującej do sumowania dodatnich elementów tablicy (Pascal): … const LEN_ARR=100; var A : array[1..LEN_ARR] of real; i : word; sum : real; … begin … sum:=0; for i=1 to LEN_ARR do begin if A[i]>0 then sum:=sum+A[i] end; …
W programowaniu utarła się pewna konwencja oznaczania zmiennych sterujących. Najczęściej stosowano (i często stosuje nadal), literę „i” lub „I”. Dla kolejnych zmiennych sterujących stosowanych w przypadku zagnieżdżonych pętli przyjmowano oznaczenia „j” lub „J” i dalej „k” lub „K”.
Przypisy
Kategoria:Zmienna (informatyka)