Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki PHP

Wskaż instrukcję równoważną funkcjonalnie do instrukcji while zapisanej w języku PHP.

$x = 0;
while($x < 5) {
    echo "$x,";
    $x++;
}

Instrukcja 1
for ($x=0; $x<5; $x++) {
    echo "$x,";
    $x++;
}

Instrukcja 2
for ($x=0; $x<5; $x+=2) {
    echo "$x,";
    $x++;
}

Instrukcja 3

for ($x=0; $x<5; $x++) {
    echo "$x,";
}

Instrukcja 4
for ($x=1; $x<=5; $x++) {
    echo "$x,";
}
A. Instrukcja 2
B. Instrukcja 1
C. Instrukcja 4
D. Instrukcja 3

Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).

Instrukcja 3 jest równoważna funkcjonalnie z podaną pętlą while, bo wykonuje dokładnie tę samą sekwencję działań na zmiennej sterującej $x. W obu przypadkach zmienna startuje od wartości 0, warunek kontynuacji to $x < 5, a po każdym wypisaniu wartości następuje zwiększenie $x o 1. Efekt na ekranie będzie więc taki sam: 0,1,2,3,4,. To jest właśnie sedno równoważności pętli: nie chodzi o to, żeby składnia wyglądała podobnie, tylko żeby stan programu i wynik działania były takie same. Moim zdaniem to bardzo praktyczne rozróżnienie, bo w PHP często można zapisać ten sam algorytm pętlą while albo for. Pętla for dobrze pasuje, gdy znamy wartość początkową, warunek końca i krok iteracji. Dobra praktyka jest taka, żeby zmienną sterującą zwiększać w jednym miejscu, najczęściej w nagłówku for, bo kod jest wtedy czytelniejszy i mniej podatny na pomyłki. W projektach webowych, np. przy generowaniu listy elementów HTML z tablicy, taka czytelność naprawdę się przydaje.
W tym zadaniu najłatwiej pomylić się przez patrzenie tylko na ogólny schemat pętli, a nie na rzeczywisty przebieg wartości zmiennej $x. Oryginalna pętla while zaczyna od $x = 0, sprawdza warunek $x < 5, wypisuje bieżącą wartość i dopiero potem zwiększa $x o 1. Dlatego wynik to 0,1,2,3,4,. Równoważna instrukcja musi zachować ten sam start, ten sam warunek zatrzymania, ten sam moment wypisania i taki sam przyrost zmiennej. Jeżeli w pętli for zmienna $x jest zwiększana zarówno w nagłówku pętli, jak i dodatkowo w jej ciele, to iteracje zaczynają przeskakiwać co więcej niż jeden. Wtedy nie dostaniemy pełnego ciągu 0,1,2,3,4, tylko np. wartości parzyste albo jeszcze inny układ. To jest typowy błąd: ktoś widzi $x++ i uznaje, że skoro występuje jak w while, to musi być dobrze, ale nie zauważa drugiego zwiększenia po zakończeniu obiegu pętli for. Równie mylący jest zapis z inną wartością początkową i warunkiem $x <= 5. Taka pętla może wykonać pięć iteracji, ale wypisze 1,2,3,4,5, czyli wynik jest przesunięty. W programowaniu webowym, zwłaszcza w PHP, taka drobna różnica może zmienić indeksy tablic, liczbę generowanych rekordów albo zawartość widoku. Z mojego doświadczenia najlepiej zawsze prześledzić kilka pierwszych obiegów pętli na kartce albo w debuggerze, bo wtedy od razu widać, gdzie zmienna sterująca zmienia się za często albo startuje od złej wartości.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.