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ść:

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].

PrzypisyEdytuj

  1. 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
  2. a b John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ​ISBN 83-204-0246-8
  3. 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
  4. 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
  5. a b c d e f Andrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994 r., seria: Biblioteka Użytkownika MikrokomputerówISBN 83-85060-53-7​, ISSN 0867-6011
  6. 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
  7. 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
  8. Ryszard K. Kott, Krzysztof Walczak, Programowanie w języku Fortran 77, Warszawa: Wydawnictwa Naukowo-Techniczne, 1991, ISBN 83-204-1362-1, OCLC 749999902.
  9. 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
  10. a b Jan Bielecki, Turbo C z grafiką na IBM PC, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, Seria: Mikrokomputery, ​ISBN 83-204-1101-7
  11. John Walkenbach, Excel 2003 PL. Programowanie w VBA., HELION 2004 r., ​ISBN 837361-504-0
  12. a b Jan Bielecki, Od C do C++, programowanie obiektowe w języku C, Wydawnictwa Naukowo-Techniczne, Warszawa 1990, ​ISBN 83-204-1332-X