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
- ↑ a b c d e f g h i j 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
- ↑ a b John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ISBN 83-204-0246-8
- ↑ a b c Brian W. Kernighan, Dennis M. Ritche, Język C, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1067-3
- ↑ a b c d e 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
- ↑ a b c d e f 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
- ↑ a b 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, Warszawa: Wydawnictwa Naukowo-Techniczne, 1991, ISBN 83-204-1362-1, OCLC 749999902 .
- ↑ a b 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
- ↑ a b 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
- ↑ a b Jan Bielecki, Od C do C++, programowanie obiektowe w języku C, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, ISBN 83-204-1332-X