KWALIFIKACJA INF3 - STYCZEŃ 2024 (test 2)

PYTANIE NR 6.
Które wartości będą przechowywane w zmiennych po wykonaniu przedstawionej pętli języka PHP?
Ilustracja przedstawia prostokątną ramkę zawierającą fragment kodu źródłowego.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Warunek pętli while($i) jest spełniony dla każdej niezerowej wartości $i, a przestaje być spełniony dopiero, gdy $i osiągnie 0.
W każdej iteracji $a zwiększa się o 2, a $i jest zmniejszane o 1. Startując od $i=20, pętla wykona się 20 razy, więc $a=40 i $i=0.

Pełne wyjaśnienie:

W pokazanym kodzie PHP ustawiono wartości początkowe $i = 20 oraz $a = 0. Następnie wykonywana jest pętla while($i). W PHP warunek w nawiasie jest oceniany w kontekście logicznym: liczba 0 oznacza fałsz, a każda liczba niezerowa oznacza prawdę. To znaczy, że pętla będzie się wykonywać tak długo, jak długo $i będzie różne od 0.

W ciele pętli są dwie instrukcje wykonywane w każdej iteracji:

  • $a += 2; — zwiększa $a o 2 (to skrót od $a = $a + 2).
  • $i--; — zmniejsza $i o 1 po użyciu bieżącej wartości w danym miejscu (tu i tak jest to osobna instrukcja, więc praktycznie oznacza "odejmij 1").

Prześledźmy ogólną logikę:

  • Na początku: $i = 20, $a = 0.
  • Pętla sprawdza warunek: $i jest niezerowe, więc wchodzi do środka.
  • Po jednej iteracji: $a rośnie o 2, a $i maleje o 1.

Ponieważ $i jest zmniejszane w każdej iteracji, kolejne wartości $i będą: 20, 19, 18, …, 1, 0. Gdy $i osiągnie 0, następne sprawdzenie warunku while($i) da fałsz i pętla zakończy działanie. To oznacza, że liczba iteracji jest równa 20 (dla wartości $i od 20 do 1 włącznie).

Skoro pętla wykonała się 20 razy, a w każdej iteracji $a zwiększane jest o 2, to końcowa wartość $a wynosi:

$a = 0 + 20 · 2 = 40

Końcowo $i = 0, bo to właśnie osiągnięcie zera zatrzymuje pętlę.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • "a = 0, i = 20" ignoruje wykonanie pętli (jakby warunek nie zadziałał), ale $i=20 spełnia warunek.
  • "a = 20, i = 20" nie uwzględnia dekrementacji $i i zaniża przyrost $a.
  • "a = 40, i = 20" poprawnie liczy przyrost $a, ale pomija fakt, że $i-- zmienia $i aż do zera.

Wskazówka egzaminacyjna: przy takich zadaniach zrób krótki "dry run" (tabelkę iteracji) lub policz iteracje z licznika, pamiętając, że pętla while kończy się dopiero, gdy warunek stanie się fałszywy (tu: gdy $i=0).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
W PHP w warunkach logicznych liczby są rzutowane na boolean: 0 oznacza false, a każda liczba niezerowa oznacza true. Dlatego while($i) wykona się, dopóki $i nie osiągnie zera.
Pętla sprawdza warunek przed każdą iteracją. Gdy $i zostanie zmniejszone do 0, warunek while($i) staje się fałszywy i PHP nie wejdzie już do środka pętli, więc wykonanie się zakończy.
To skrócony operator przypisania. Zapis $a += 2 jest równoważny $a = $a + 2. W pętli oznacza to, że w każdej iteracji wartość $a rośnie o 2.
Operator -- zmniejsza wartość zmiennej o 1. Gdy jest użyty jako osobna instrukcja ($i--;), można go czytać jako "zmniejsz licznik o 1 po każdej iteracji", co prowadzi do zejścia z 20 do 0.
Najprościej sprawdzić, jak zmienia się licznik i kiedy warunek przestaje być spełniony. Jeśli startujesz od 20 i w każdej iteracji robisz $i--, to wartości spełniające warunek to 20,19,…,1, czyli łącznie 20 iteracji.
Nie. W PHP liczba 0 jest traktowana jako false w warunku. Jeśli $i ma wartość 0 już na starcie, while($i) nie wykona ani jednej iteracji. To częsty "haczyk" w zadaniach egzaminacyjnych.
Najczęściej myli się moment sprawdzania warunku (przed iteracją) oraz pomija wpływ $i-- na kolejne sprawdzenia. Częsty jest też błąd "off-by-one": liczenie iteracji od 0 zamiast od 1 lub nieuwzględnienie, że 0 kończy pętlę.
while sprawdza warunek przed wejściem do pętli, więc może wykonać się 0 razy. do...while najpierw wykonuje blok, a dopiero potem sprawdza warunek, więc wykona się co najmniej raz. To ważne przy licznikach startujących od 0.
Tak, często zależy. Jeśli zmieniasz licznik ($i--) przed innymi operacjami lub używasz go w obliczeniach, kolejność może wpływać na wynik. W tym zadaniu $a += 2 nie używa $i, więc kolejność nie zmienia końcowej wartości $a.
Po pętli możesz wypisać zmienne, np. używając echo lub var_dump. Przykładowo: var_dump($a, $i);. Na egzaminie praktycznym taka szybka weryfikacja pomaga wykryć błędy w licznikach i warunkach.
info

Około 54% zdających odpowiada poprawnie na to pytanie. trudne

W praktyce zawodowej kluczowe jest to, że warunek pętli while($i) jest spełniony dla każdej niezerowej wartości $i, a przestaje być spełniony dopiero, gdy $i osiągnie 0.W każdej iteracji $a zwiększa się o 2, a $i jest zmniejszane o 1.

Źródła:

  • PHP Manual: while - https://www.php.net/manual/en/control-structures.while.php - accessed 2026-04-01
  • PHP Manual: Assignment Operators (+=) - https://www.php.net/manual/en/language.operators.assignment.php - accessed 2026-04-01
  • PHP Manual: Incrementing/Decrementing Operators (-- ) - https://www.php.net/manual/en/language.operators.increment.php - accessed 2026-04-01

Materiały:

  • Dokumentacja PHP: instrukcje sterujące (while)
  • Dokumentacja PHP: operatory (+=, --)
  • Ćwiczenia z "dry run" (ręczne śledzenie zmian zmiennych) dla pętli i warunków

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego