$suma = 0; for ($x = 10; $x <= 20; $x++) { $suma += $x; } Wskaż kod równoważny do przedstawionego kodu zapisanego językiem PHP. Kod 1.$suma = 0;...
$suma = 0; for ($x = 10; $x <= 20; $x++) { $suma += $x; }Wskaż kod równoważny do przedstawionego kodu zapisanego językiem PHP.
Kod 1.
$suma = 0; while ($x <= 20) { $suma += $x; $x++; }
Kod 2.
$suma = 0; $x = 10; while ($x <= 20) { $suma += $x; $x++; }
Kod 3.
$suma = 0; $x = 1; while ($x <= 10) { $suma += $x; }
Kod 4.
$suma = 0; $x = 10; while ($x <= 20) { $suma = $x; $x++; }
A. Kod 3.
B. Kod 2.
C. Kod 1.
D. Kod 4.
Pytanie z egzaminu CKE, czerwiec 2023 (arkusz EE.09-SG-23.06).
Kod 2 jest równoważny, bo zachowuje wszystkie trzy kluczowe elementy pętli for z przykładu: inicjalizację zmiennej sterującej, warunek kontynuacji oraz krok zwiększający licznik. W oryginale zmienna x startuje od 10, pętla działa dopóki x <= 20, a po każdym obiegu x jest zwiększane o 1. W środku wykonywana jest operacja suma += x, czyli skrócony zapis dodania aktualnej wartości x do dotychczasowej sumy. Kod 2 robi dokładnie to samo, tylko w konstrukcji while: najpierw ustawia x na 10, potem sprawdza warunek, dodaje x do sumy i na końcu zwiększa x. Wynikiem będzie suma liczb od 10 do 20 włącznie, czyli 165. Moim zdaniem to dobry przykład na zrozumienie, że for i while mogą opisywać ten sam algorytm, jeśli pilnujemy kolejności działań. W praktyce w PHP for często stosuje się do pętli licznikowych, a while wtedy, gdy liczba powtórzeń zależy od warunku, np. odczytu rekordów z bazy danych. Dobra praktyka jest taka, żeby zmienna sterująca była jawnie zainicjalizowana przed while, bo inaczej kod robi się zależny od wcześniejszego stanu programu i może generować ostrzeżenia.
W tym zadaniu najważniejsze jest nie samo podobieństwo składni, tylko pełna równoważność działania programu. Oryginalna pętla for sumuje liczby od 10 do 20 włącznie, więc poprawny odpowiednik w while musi mieć ustawienie wartości początkowej x na 10, warunek x <= 20, dodawanie aktualnego x do sumy oraz zwiększanie x po każdym przebiegu. Jeśli w kodzie brakuje inicjalizacji x, program nie jest równoważny, nawet jeśli reszta wygląda prawie dobrze. W PHP użycie niezdefiniowanej zmiennej może dać ostrzeżenie, a działanie będzie zależało od kontekstu, czyli od tego, czy x miało wcześniej jakąś wartość. To jest kiepska praktyka i częsty błąd przy przepisywaniu pętli for na while. Inny wariant zaczyna od x = 1 i ma warunek do 10, więc opisuje zupełnie inny zakres liczb, a dodatkowo nie zwiększa x w ciele pętli. Taka pętla może wykonywać się bez końca, bo warunek nigdy nie przestaje być prawdziwy. To typowa pułapka: przy while trzeba samodzielnie zadbać o zmianę zmiennej sterującej. Jest też wersja, w której zamiast suma += x użyto suma = x. To nie sumuje wartości, tylko nadpisuje wynik w każdej iteracji. Po zakończeniu zostałaby ostatnia przypisana wartość, a nie suma. Z mojego doświadczenia najlepiej przy takich zadaniach rozpisać sobie trzy elementy pętli: start, warunek i krok, a potem sprawdzić, czy instrukcja w środku pętli naprawdę wykonuje tę samą operację arytmetyczną.