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