Krok zmiennej sterującej, to w programowaniu konstrukcja programistyczna umożliwiająca zmianę wartości zmiennej sterującej o określoną przez programistę wartość. Standardowo zmienna sterująca w pętli iteracyjnej zmieniana jest o wartość kroku równą 1. W wielu językach programowania wprowadzono do ich składni w instrukcji takiej pętli konstrukcję umożliwiającą określenie innej wartości, która będzie użyta do zmiany wartości zmiennej sterującej przy przejściu do kolejnej iteracji. Istnieją jednak języki programowania, w których pętle iteracyjne nie dają takich możliwości. Tak jest np. w języku Pascal, w którym zmienna sterująca zmienia się o wartość równą 1 (lub -1 przy użyciu słowa kluczowego downto
)[1][2][3]. W takim przypadku programista musi samodzielnie implementować pętlę realizującą zadania pętli iteracyjnej, za pomocą innych rodzajów pętli, np. za pomocą pętli repetycyjnej. W tym przypadku programista sam implementuje zmianę wartości pewnej zmiennej używanej jako zmienna sterująca, oraz jawnie kontrolować warunek zakończenia pętli, a więc musi programować na niższym poziomie abstrakcji. Takie rozwiązanie przyjęte jest również w takich językach jak C[4][5][6], C++[6] i podobne, w których nie zaimplementowano pętli iteracyjnej, lecz dostępna jest pętla ogólna. W pętli tego rodzaju trzeba jawnie zapisać zmianę wartości zmiennej sterującej o określoną wartość kroku i warunek kończący pętlę. Innym rozwiązaniem, może być jawnie zaprogramowanie zmiany wartości zmiennej sterującej o wartość kroku wewnątrz pętli iteracyjnej, o ile jest dopuszczalna w danym języku przypisanie zmiennej sterującej nowej wartości (np. Pascal dopuszcza zamianę wartości zmiennej sterującej wywnętrz bloku pętli[1][2][3], a np. Ada nie daje takich możliwości – zmienna sterująca w tym języku programowania jest zmienną „tylko do odczytu”, zmienną lokalną dla tej instrukcji strukturalnej)[7][8].
Poniżej przedstawione jest porównanie realizacji kroku, za pomocą dostępnej w danym języku programowania, odpowiedniej frazy pętli iteracyjnej, na przykładzie języka Modula-2[9], oraz za pomocą zmiany wartości zmiennej sterującej wewnątrz pętli na przykładzie języka Pascal[1][2][3].
Modula-2[9] | Pascal[1][2][3] | C[4][5][6] |
---|---|---|
FOR I:=1 TO 10 BY KROK DO
(* instrukcje pętli *)
END
|
for i:=1 to 10 do
begin
{ instrukcje pętli }
i:=i+KROK-1
end;
|
for(i=1;i<=10;i+=KROK)
{
/* instrukcje pętli */
}
|
Sposób specyfikacji kroku zmiennej sterującej w instrukcji iteracyjnej zależny jest od składni danego języka. Zawsze jest to jednak pewna opcjonalna fraza zawarta w nagłówku pętli iteracyjnej. Brak tej frazy implikuje przyjęcie wartości domyślnej kroku zmiennej sterującej, przy czym jest to wartość równa 1, chyba że składnia określa, iż dla pewnych warunków brzegowych, tzn. dla wartości początkowej mniejszej od wartości końcowej, jest przyjmowana wartość -1. Natomiast jawne określenie wartości kroku eliminuje wartości domyślne bez względu na relacje zachodzące między wartością początkową i końcową. Do typowych słów kluczowych, używanych w różnych językach programowania, do identyfikacji frazy określającej krok zmiennej sterującej należą takie słowa kluczowe jak step
, np. BASIC[10][11], rzadziej by
, np. PL/I[12][13].
język programowania | domyślnie 1 | -1 | fraza | dowolny dodatni | dowolny ujemny | wewnątrz pętli |
---|---|---|---|---|---|---|
Ada[7][8] | in reverse
|
|||||
ALGOL 60[14][15] | by
|
|||||
BASIC[b][10][11] | STEP
|
|||||
Clipper[16] | STEP
|
b.d. | ||||
COBOL[14][17] | BY
|
b.d. | ||||
Comal[3] | ||||||
Forth[18][19] | +LOOP
|
|||||
Fortran IV[14], 1900[15] | --- | |||||
Fortran 77[20] | --- | |||||
JEAN[21][22] | --- | |||||
Modula-2[9] | BY
|
|||||
Pascal[1][2][3] | downto
|
|||||
PL/I[12][13] | BY
|
|||||
PL/M[23][24] | BY
|
|||||
Simula 67[14][25] | ||||||
Visual Basic[26], VBA[27] | Step
|
|||||
b.d. – brak danych; |
Należy także dodać, iż pojęcie kroku równego 1 lub -1, jest pewnym uproszczeniem, szczególnie w tych językach, w których zmienna sterująca nie musi być zmienną typu liczbowego, lecz może być innego typu, np. może być dowolnego typu porządkowego[c], jak w językach Ada[7][8], czy Pascal[1][2][3]. W tym przypadku stosuje się operacje porządkowe: następnika, co odpowiada krokowi równemu 1 dla typów liczbowych, lub poprzednika, co odpowiada krokowi równemu -1 dla typów liczbowych[2][7].
<ref>
. Brak tekstu w przypisie o nazwie pascal
<ref>
. Brak tekstu w przypisie o nazwie bp
<ref>
. Brak tekstu w przypisie o nazwie kilka
<ref>
. Brak tekstu w przypisie o nazwie c-kr
<ref>
. Brak tekstu w przypisie o nazwie tc-jb
<ref>
. Brak tekstu w przypisie o nazwie cpp-jb
<ref>
. Brak tekstu w przypisie o nazwie ada
<ref>
. Brak tekstu w przypisie o nazwie ada95
<ref>
. Brak tekstu w przypisie o nazwie modula2
<ref>
. Brak tekstu w przypisie o nazwie basic-zcz
<ref>
. Brak tekstu w przypisie o nazwie basic-wi
<ref>
. Brak tekstu w przypisie o nazwie pl1jb
<ref>
. Brak tekstu w przypisie o nazwie pl1a
<ref>
. Brak tekstu w przypisie o nazwie str-jp
<ref>
. Brak tekstu w przypisie o nazwie algolifortran
<ref>
. Brak tekstu w przypisie o nazwie clipper
<ref>
. Brak tekstu w przypisie o nazwie cobol
<ref>
. Brak tekstu w przypisie o nazwie forth_jb
<ref>
. Brak tekstu w przypisie o nazwie forth_jr
<ref>
. Brak tekstu w przypisie o nazwie fortran77
<ref>
. Brak tekstu w przypisie o nazwie jean
<ref>
. Brak tekstu w przypisie o nazwie jeanfortran
<ref>
. Brak tekstu w przypisie o nazwie plm
<ref>
. Brak tekstu w przypisie o nazwie isisii
<ref>
. Brak tekstu w przypisie o nazwie simula
<ref>
. Brak tekstu w przypisie o nazwie vb
<ref>
. Brak tekstu w przypisie o nazwie excelivba
<ref>
dla grupy o nazwie „uwaga”, ale nie odnaleziono odpowiedniego znacznika <references group="uwaga"/>