KWALIFIKACJA INF3 - STYCZEŃ 2015

PYTANIE NR 36.
Który kod jest alternatywny do kodu zamieszczonego w ramce?
Ilustracja przedstawia cztery fragmenty kodu PHP, oznaczone literami A, B, C i D.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Kod w ramce iteruje od 1 do 55, ale dla liczb nieparzystych wykonuje continue, więc pomija echo. Wypisywane są wyłącznie liczby parzyste: 2, 4, …, 54. Równoważny jest zapis, który startuje od 2 i zwiększa licznik o 2 aż do 54, bez dodatkowego filtrowania warunkiem modulo.

Pełne wyjaśnienie:

W kodzie z ramki użyto pętli for w postaci: <?php for($x = 1; $x <= 55; $x++) { ... } ?>. Oznacza to, że zmienna $x przyjmuje kolejno wartości od 1 do 55.

Wewnątrz pętli znajduje się warunek z operatorem modulo: $x % 2 != 0. Reszta z dzielenia przez 2 różna od zera oznacza liczbę nieparzystą. Gdy liczba jest nieparzysta, wykonywana jest instrukcja continue, która pomija bieżącą iterację i przechodzi od razu do następnej. W praktyce oznacza to, że dla nieparzystych (1, 3, 5, …, 55) fragment wypisujący nie zostanie uruchomiony.

Instrukcja echo wykona się więc wyłącznie dla liczb parzystych z zakresu 1–55, czyli: 2, 4, 6, …, 54. Ostatnią parzystą liczbą nieprzekraczającą 55 jest 54, dlatego wynik kończy się na 54.

Poprawny kod alternatywny musi dawać identyczny ciąg wypisywanych wartości. Zapis w stylu: <?php for($x = 2; $x <= 54; $x += 2) { echo $x." "; } ?> realizuje to wprost: startuje od 2 i przechodzi co 2, więc generuje dokładnie te same liczby parzyste, bez sprawdzania warunku i bez continue.

Pozostałe propozycje nie są równoważne, bo:

  • Wariant wypisujący wszystkie liczby od 1 do 55 nie filtruje nieparzystych, więc wynik zawiera także 1, 3, 5…
  • Wariant z zakresem do 56 wypisuje dodatkowo 56, którego nie ma w wyniku kodu wzorcowego (bo pętla kończy się na 55).
  • Wariant z krokiem +1 jest w praktyce tym samym co $x++ i również wypisuje wszystkie liczby, jeśli nie ma warunku z continue.

Wskazówka egzaminacyjna: zawsze porównuj wynik działania (co jest wypisywane), a nie tylko podobieństwo zapisu pętli. Szczególnie sprawdzaj wartości brzegowe (tu: 54 vs 56).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
continue przerywa bieżącą iterację pętli i natychmiast przechodzi do następnej. Kod po continue w tej iteracji nie wykona się. Dzięki temu można pominąć wypisywanie lub obliczenia dla wybranych przypadków (np. liczb nieparzystych).
Operator % zwraca resztę z dzielenia. Dla parzystych liczb x % 2 daje 0, a dla nieparzystych 1. To najprostszy sposób sprawdzania parzystości w zadaniach z pętlami i warunkami, np. filtrowania elementów do wypisania.
Warunek $x % 2 != 0 jest prawdziwy dla liczb nieparzystych, więc uruchamia continue i pomija część z echo. W efekcie wypisywanie wykonuje się wyłącznie wtedy, gdy warunek jest fałszywy, czyli dla liczb parzystych.
Porównaj efekt działania: jakie wartości są generowane i w jakiej kolejności, a nie tylko podobieństwo składni. Najpewniejsza metoda na egzaminie to ręczne prześledzenie kilku iteracji oraz sprawdzenie wartości brzegowych (początek i koniec zakresu).
Jeżeli pętla przechodzi 1–55, a wypisywanie jest pomijane dla nieparzystych, to wynik to parzyste liczby z tego zakresu: 2, 4, 6, …, 54. Kończy się na 54, bo 55 jest nieparzyste, a 56 nie należy do zakresu pętli.
Gdy z góry wiesz, że interesuje Cię co druga wartość (np. tylko parzyste). Zapis z krokiem $x+=2 jest zwykle krótszy i czytelniejszy, bo nie wymaga dodatkowego warunku w środku pętli. To typowa minioptymalizacja i refaktoryzacja.
Równoważność dotyczy dokładnie tego samego wyniku. Jeśli pętla idzie do 56 krokiem 2, to wypisze również 56. W kodzie, który kończy się na 55, nie ma możliwości wypisania 56, więc wyniki różnią się na końcu.
W kontekście pętli oba zapisy zwiększają zmienną o 1 w każdej iteracji. Różnica jest głównie stylistyczna. Jeśli jednak zmienisz krok z +1 na +2, zmienia się zbiór odwiedzanych wartości, więc może to diametralnie zmienić wynik wypisywania.
Najczęstsze to: pomijanie faktu, że continue omija dalszy kod w iteracji, mylenie warunku pętli z tym, co jest wypisywane, oraz brak kontroli wartości brzegowych (np. założenie, że skoro jest 55, to na końcu pojawi się 55 lub 56).
Sprawdź zawsze pierwszą i ostatnią wypisywaną wartość. W tym typie zadań różnica często dotyczy właśnie końca zakresu (np. 54 vs 56). Pomaga szybka tabela: start, krok, warunek końcowy, czy echo jest filtrowane.
info

To pytanie poprawnie rozwiązuje 41% zdających egzamin. trudne

Eksperci podkreślają: "Kod w ramce iteruje od 1 do 55, ale dla liczb nieparzystych wykonuje continue, więc pomija echo."

Źródła:

  • PHP Manual: for - https://www.php.net/manual/en/control-structures.for.php (dostęp: 2026-03-01)
  • PHP Manual: continue - https://www.php.net/manual/en/control-structures.continue.php (dostęp: 2026-03-01)
  • PHP Manual: Arithmetic Operators (modulo %) - https://www.php.net/manual/en/language.operators.arithmetic.php (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja PHP: instrukcje sterujące (for, continue)
  • Ćwiczenia z "trace" (ręczne prześledzenie) pętli i wypisywanych wartości
  • Zadania o parzystości i operatorze modulo w PHP

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego