Wskaż instrukcję równoważną funkcjonalnie do przedstawionej pętli while zapisanej w języku PHP.
$x = 1; while ($x <= 16) { echo "$x,"; $x *= 2; }
Instrukcja 1
for ($x = 1; $x < 16; $x *= 2) { echo "$x,"; }
Instrukcja 2
for ($x = 1; $x <= 16; $x += 2) { echo "$x,"; }
Instrukcja 3
for ($x = 1; $x <= 16; $x *= 2) { echo "$x,"; }
Instrukcja 4
for ($x = 1; $x <= 16; $x *= 2) { echo "$x,"; $x++; }
Instrukcja 1
Instrukcja 2
Instrukcja 3
Instrukcja 4
Równoważna jest konstrukcja for ($x = 1; $x <= 16; $x *= 2) { echo "$x,"; }. W pętli while zmienna $x zaczyna od wartości 1, przed każdym obiegiem sprawdzany jest warunek $x <= 16, następnie wypisywana jest bieżąca wartość i dopiero potem $x jest mnożone przez 2. Taki sam układ ma wskazana pętla for: inicjalizacja znajduje się w pierwszej części nagłówka, warunek w drugiej, a aktualizacja $x *= 2 wykonuje się po instrukcjach z bloku. Wynikiem jest ciąg 1,2,4,8,16,. Przy zamianie while na for trzeba zachować trzy elementy: wartość początkową, warunek zakończenia i identyczny sposób zmiany licznika.
W tej pętli decydujące są dwa szczegóły: warunek zawiera $x <= 16, a zmienna po każdym wypisaniu jest mnożona przez 2. Konstrukcja for ($x = 1; $x < 16; $x *= 2) { echo "$x,"; } nie jest równoważna, bo używa warunku $x < 16 i nie wypisze wartości 16. Konstrukcja for ($x = 1; $x <= 16; $x += 2) { echo "$x,"; } zmienia $x przez dodawanie 2, więc tworzy ciąg 1,3,5,...,15, a nie potęgi dwójki. Konstrukcja for ($x = 1; $x <= 16; $x *= 2) { echo "$x,"; $x++; } modyfikuje zmienną dwa razy w jednym obiegu: najpierw przez $x++, potem przez $x *= 2, przez co zmienia przebieg pętli. Poprawna jest konstrukcja for ($x = 1; $x <= 16; $x *= 2) { echo "$x,"; }. Typowy błąd polega na skupieniu się tylko na wartości początkowej i pominięciu operatora aktualizacji albo granicy warunku.