Krok (programowanie)

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

Porównanie sposobu realizacji kroku innego niż 1
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].

Krok w pętlach iteracyjnych[a]
język programowaniadomyślnie 1-1frazadowolny dodatnidowolny ujemnywewnątrz pętli
Ada[7][8]Tin reverseNNNN
ALGOL 60[14][15]TNbyTTT
BASIC[b][10][11]TNSTEPTTT
Clipper[16]TNSTEPTTb.d.
COBOL[14][17]TNBYTTb.d.
Comal[3]TNNNNN
Forth[18][19]TN+LOOPTTN
Fortran IV[14], 1900[15]TN---TNN
Fortran 77[20]TN---TTN
JEAN[21][22]TN---TTN
Modula-2[9]TNBYTTN
Pascal[1][2][3]TdowntoNNNT
PL/I[12][13]TNBYTTN
PL/M[23][24]TNBYTTN
Simula 67[14][25]TNTTT
Visual Basic[26], VBA[27]TNStepTTT

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

Uwagi

  1. Tabela „Krok w pętlach iteracyjnych” pomija te języki, w których nie ma pętli iteracyjnej, a iteracje realizuje się za pomocą innych pętli, takich jak pętle ogólne czy repetycyjne, w tych konstrukcjach można bowiem dowolnie manipulować zmianą wartości zmiennej, która jest zwykłą zmienną pełniącą jedynie funkcję zmiennej sterującej. Taka konstrukcja może być oczywiście także użyta w tych językach, w których istnieje pętla iteracyjna, choć literatura przedmiotu zaleca stosowanie pętli iteracyjnej jako konstrukcji na wyższym poziomie abstrakcji, w której mało istotne szczegóły realizacyjne pozostają ukryte i są realizowane w sposób niejawny, tj. nie są one widoczne w kodzie źródłowym.
  2. Istniały wersje tego języka bez frazy STEP w instrukcji pętli FOR.
  3. W językach, w których stosuje się wyróżnienie typów porządkowych, typy całkowitoliczbowe również należą do typów porządkowych, ale oprócz nich do tego rodzajów typów, które mogą być stosowane jako typy zmiennych sterujących należą również inne typy danych, np. typ znakowy, typ wyliczeniowy i inne.

Przypisy

  1. a b c d e f Michał Iglewski, Jan Madey, Stanisław Matwin: Pascal. Język wzorcowy – Pascal 360. Wyd. wydanie trzecie – zmienione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1984, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  2. a b c d e f g Andrzej Marciniak: Borland Pascal 7.0. Poznań: Nakom, 1994, seria: Biblioteka Użytkownika Mikrokomputerów. ISBN 83-85060-53-7. ISSN 0867-6011. (pol.)
  3. a b c d e f g Mike Ducka, tłumaczenie: Marcin Turski: Języki mikrokomputerów. Przewodnik dla początkująych. Basic, Pascal, Logo, Prolog, Comal, Forth. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988. ISBN 83-204-0966-7. (pol.)
  4. a b Brian W. Kernighan, Dennis M. Ritche: Język C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1067-3. (pol.)
  5. a b Jan Bielecki: Turbo C z grafiką na IBM PC. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Mikrokomputery. ISBN 83-204-1101-7. (pol.)
  6. a b c Jan Bielecki: Od C do C++, programowanie obiektowe w języku C. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990. ISBN 83-204-1332-X. (pol.)
  7. a b c d A. Nico Habermann, Dewayne E. Perry: Ada dla zaawansowanych. Warszawa: Wydawnictwa Naukowo-Techniczne, 1989, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1058-4. (pol.)
  8. a b c Michał Morawski, Antoni M. Zajączkowski: Wstęp do programowania w języku Ada’95. Wyd. drugie. Łódź: 2004. [dostęp 2011-01-29]. (pol.)
  9. a b c Niklaus Wirth: Modula 2. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0828-8. ISSN 0867-6011. (pol.)
  10. a b Zbigniew Czech, Krzysztof Nałęcki, Stanisław Wołek: Programowanie w języku BASIC. Wyd. drugie uzupełnione. Warszawa: Wydawnictwa Naukowo-Techniczne, 1985. ISBN 83-204-0776-1. (pol.)
  11. a b Wacław Iszkowski: Nauka programowania w języku BASIC dla początkujących. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Mikrokomputery. ISBN 83-204-0834-2. (pol.)
  12. a b Jan Bielecki: Rozszerzony PL/I i JCL w systemie OS/RIAD. Warszawa: Państwowe Wydawnictwo Naukowe, 1986, seria: Biblioteka Informatyki. ISBN 83-01-06146-4. (pol.)
  13. a b M. I. Auguston i inni: Programowanie w języku PL/1 OS JS. Warszawa: Państwowe Wydawnictwo Naukowe, 1988. ISBN 83-01-07463-9. (pol.)
  14. a b c d John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.)
  15. a b Joanna Jonkisz, Jan Makuch, Stanisław Starzak: Programowanie w językach Algol 60 i Fortran 1900. Łódź: Wydawnictwo Politechniki Łódzkiej, Politechnika Łódzka, Ośrodek Elektronicznej Techniki Obliczeniowej, 1982, seria: Skrypty dla szkół wyższych. (pol.)
  16. Wojciech Rogowski, Arkadiusz Serodziński: Clipper 5.0. Warszawa: Wydawnictwo PLJ, 1991. ISBN 83-85190-20-1. (pol.)
  17. Eugeniusz Kurzydrem, Andrzej Macieliński, Urszula Szmidt, Eugeniusz Więcek: COBOL. Język programowania.. Wyd. drugie. Warszawa: Państwowe Wydawnictwo Ekonomiczne, 1978. (pol.)
  18. Jan Bielecki: Język FORTH. Warszawa: Wydawnictwa Naukowo-Techniczne, 1988, seria: Mikrokomputery. ISBN 83-204-0930-6. (pol.)
  19. Jan Ruszczyc: Poznajemy FORTH. Warszawa: SOETO, 1987, seria: Informatyka mikrokomputerowa. (pol.)
  20. Ryszard K. Kott, Krzysztof Walczak: Programowanie w języku Fortran 77. Warszawa: Wydawnictwa Naukowo-Techniczne, 1991. ISBN 83-204-1362-1. (pol.)
  21. Jerzy Bettek, Bronisław Rudak, Barbara Rudakowa: Język konwersacyjny JEAN. Wrocław: Wydawnictwo Politechniki Wrocławskiej, 1975, seria: Skrypt wydany w serii Biblioteka WASC. (pol.)
  22. Kazimierz Orlicz: Język konwersacyjny JEAN z elementami programowania w Fortranie. Wrocław: Wydawnictwo Politechniki Wrocławskiej, 1977, seria: Skrypt wydany w serii Biblioteka WASC. (pol.)
  23. Jan Bielecki: PL/M język programowania mikroprocesorów. Wyd. wydanie drugie uzupełnione. Warszawa: Wydawnictwa Komunikacji i Łączności, 1987, seria: Elektronizacja. zeszyt 25. (pol.)
  24. Jan Bielecki: System operacyjny ISIS-II. Warszawa: Wydawnictwa Naukowo-Techniczne, 1987, seria: Mikrokomputery. ISBN 83-204-0893-8. (pol.)
  25. Hanna Oktaba, Wiesław Ratajczak: Simula 67. Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-0128-3. (pol.)
  26. Podręcznik Visual Basic na Wikibooks
  27. John Walkenbach: Excel 2003 PL. Programowanie w VBA.. HELION, 2004. ISBN 837361-504-0. (pol.)

Bibliografia

  • Michael Marcotty, Henry Ledgord, tłumaczenie: Krystyna Jerzykiewicz: W kręgu języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Biblioteka Inżynierii Oprogramowania. ISBN 83-204-1342-7. (pol.)
  • John E. Nicholls: Struktura języków programowania. Warszawa: Wydawnictwa Naukowo-Techniczne, 1980, seria: Informatyka. ISBN 83-204-0246-8. (pol.)

Media użyte na tej stronie