Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki PHP

$tab = array(); for ($i = 0; $i < 10; $i++) { $tab[$i] = rand(-100, 100); } foreach ($tab as $x) { if ($x < 0) { echo "$x "; } } Działaniem...

$tab = array();
for ($i = 0; $i < 10; $i++) {
    $tab[$i] = rand(-100, 100);
}
foreach ($tab as $x) {
    if ($x < 0) {
        echo "$x ";
    }
}
Działaniem przedstawionego kodu PHP będzie wypełnienie tablicy
A. 100 losowymi wartościami, a następnie wypisanie wartości dodatnich
B. kolejnymi liczbami od -100 do 100 i wypisanie wartości ujemnych
C. 10 losowymi wartościami, a następnie wypisanie wartości ujemnych
D. kolejnymi liczbami od 0 do 9 i ich wypisanie
Kod najpierw tworzy pustą tablicę $tab, a potem pętla for wykonuje się dokładnie 10 razy, bo $i startuje od 0 i działa dopóki $i < 10. W każdej iteracji pod indeksem $tab[$i] zapisywana jest wartość zwrócona przez rand(-100, 100), czyli losowa liczba całkowita z zakresu od -100 do 100, włącznie z końcami tego przedziału. To ważne: zmienna $i nie jest tu wartością wpisywaną do tablicy, tylko indeksem komórki. Dopiero foreach przechodzi po wszystkich wylosowanych elementach jako $x i sprawdza warunek $x < 0. Jeśli liczba jest ujemna, zostaje wypisana. W praktyce taki schemat często stosuje się np. do filtrowania danych: najpierw mamy zbiór wartości, a potem wybieramy tylko te, które spełniają warunek. Moim zdaniem to bardzo dobry przykład na zrozumienie różnicy między indeksem tablicy a wartością elementu. W dobrych praktykach PHP warto też pamiętać, że rand() w nowszym kodzie często zastępuje się mt_rand() albo random_int(), zwłaszcza gdy losowość ma znaczenie bezpieczeństwa. Tutaj jednak, do prostego ćwiczenia z tablic i pętli, rand(-100, 100) jest całkiem czytelne.
Najczęstsza pomyłka w tym zadaniu wynika z pomieszania roli zmiennej sterującej pętlą z wartością zapisywaną do tablicy. Zmienna $i faktycznie przyjmuje kolejno wartości od 0 do 9, ale służy tylko jako indeks, czyli wskazuje miejsce w tablicy: $tab[0], $tab[1], $tab[2] i tak dalej. Do tych miejsc nie jest wpisywane samo $i, tylko wynik funkcji rand(-100, 100). Dlatego tablica nie zawiera po prostu kolejnych liczb od 0 do 9. To dość klasyczny błąd przy analizie pętli for, szczególnie gdy indeks i wartość elementu są blisko siebie w tym samym wierszu kodu.

Nie można też uznać, że kod wpisuje kolejne liczby od -100 do 100. Funkcja rand() nie generuje sekwencji uporządkowanej, tylko losuje jedną liczbę z podanego zakresu przy każdym wywołaniu. Zakres od -100 do 100 oznacza możliwe wartości, a nie liczbę elementów ani kolejność. Tablica ma tylko 10 elementów, bo tyle razy wykona się pętla for. Gdyby program miał wypełnić tablicę wszystkimi liczbami od -100 do 100, potrzebna byłaby inna konstrukcja, np. pętla przechodząca po wartościach od -100 do 100.

Mylny jest również wniosek, że powstaje 100 losowych wartości. Liczba 100 pojawia się jako górna granica losowania, a nie jako liczba powtórzeń pętli. O liczbie elementów decyduje warunek $i < 10. Na końcu foreach nie wypisuje wartości dodatnich, tylko ujemne, ponieważ warunek brzmi $x < 0. Z mojego doświadczenia najlepiej czytać taki kod w dwóch etapach: najpierw ile razy coś się wykona, potem co dokładnie zostanie zapisane i jaki warunek filtruje wynik.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.