Zmienna sterująca
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 iteracyjnej[1][2].
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[1] (nie wyrażone jawnie w kodzie źródłowym; nie odnosi się to do języka C i pokrewnych[3]), zmiana dokonywana jest o wartość:
- wartość +1 (lub wartość następnika)[1][4][5]
- wartość -1 (lub wartość poprzednika)[1][4][5]
- o inną wartość, jeżeli język dopuszcza specyfikację tzw. „kroku” zmiennej sterującej[1][6][7].
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[8][1] dopuszcza dane rzeczywiste.
Istotnym zagadnieniem jest wartość zmiennej sterującej po wyjściu z instrukcji iteracyjnej[1]. 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. Ada[9]
- wartość zmiennej sterującej jest nieokreślona po wyjściu z pętli[1]
- 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. Pascal[5])
- wartość zmiennej sterującej jest określona i równa wartości tej zmiennej w momencie zakończenia lub opuszczenia iteracji (np. PL/I[6], C[10])
W konkretnych językach mogą być nałożone inne ograniczenia na zmienną sterującą:
- zmienna sterująca musi być zmienną lokalną (np. Pascal[4][5])
- zmienna sterująca musi być zmienną prostą, tzn. nie może być polem struktury (rekordu), elementem tablicy itp. (np. Pascal[4][5])
- nie wolno w bloku iteracji zmieniać wartości zmiennej sterującej (jest tylko do odczytu), np. Ada[9].
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, VBA[11].
Inne podejście zostało zastosowane w języku C[3][10][12] i pokrewnych (C++[12], 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.[1], o ile w ogóle istnieje potrzeba zastosowania zmiennej sterującej, która w przypadku tych języków nie jest wymagana[3]. 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[4][5]):
…
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”[1][2].
Przypisy
- ↑ 1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 1,9 Michael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1342-7
- ↑ 2,0 2,1 John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ISBN 83-204-0246-8
- ↑ 3,0 3,1 3,2 Brian W. Kernighan, Dennis M. Ritche, Język C, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1067-3
- ↑ 4,0 4,1 4,2 4,3 4,4 Michał 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, ISBN 83-204-0597-1
- ↑ 5,0 5,1 5,2 5,3 5,4 5,5 Andrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994 r., seria: Biblioteka Użytkownika Mikrokomputerów ISBN 83-85060-53-7, ISSN 0867-6011
- ↑ 6,0 6,1 Jan Bielecki, Rozszerzony PL/I i JCL w systemie OS/RIAD, Państwowe Wydawnictwo Naukowe, Warszawa 1986, Seria: Biblioteka Informatyki, ISBN 83-01-06146-4
- ↑ 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, ISBN 83-204-0966-7
- ↑ Ryszard K. Kott, Krzysztof Walczak. Programowanie w języku Fortran 77, Wydawnictwa Naukowo-Techniczne, Warszawa 1991, ISBN 83-204-1362-1
- ↑ 9,0 9,1 A. Nico Habermann, Dewayne E. Perry, Ada dla zaawansowanych, Wydawnictwa Naukowo-Techniczne, Warszawa 1989 r., seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1058-4
- ↑ 10,0 10,1 Jan Bielecki, Turbo C z grafiką na IBM PC, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, Seria: Mikrokomputery, ISBN 83-204-1101-7
- ↑ John Walkenbach, Excel 2003 PL. Programowanie w VBA., HELION 2004 r., ISBN 837361-504-0
- ↑ 12,0 12,1 Jan Bielecki, Od C do C++, programowanie obiektowe w języku C, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, ISBN 83-204-1332-X