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

Działaniem przedstawionego kodu PHP będzie wypełnienie tablicy

$tab = array();
for ($i = 0; $i < 20; $i++) {
    $tab[$i] = rand(-100, 100);
}

foreach ($tab as $x) {
    if ($x > 0) echo "$x ";
}
A. kolejnymi liczbami od 0 do 19 i wypisanie ich
B. 100 losowymi wartościami, a następnie wypisanie wartości ujemnych
C. 20 losowymi wartościami, a następnie wypisanie wartości dodatnich
D. kolejnymi liczbami od -100 do 100 i wypisanie wartości dodatnich
Działanie tego kodu polega na utworzeniu pustej tablicy $tab, a potem wpisaniu do niej dokładnie 20 elementów. Decyduje o tym pętla for: zmienna $i startuje od 0, pętla działa dopóki $i < 20, więc indeksy będą od 0 do 19. To daje 20 powtórzeń, nie 100 ani 200. W każdym obrocie wykonywana jest funkcja rand(-100, 100), czyli do tablicy trafia losowa liczba całkowita z zakresu od -100 do 100, włącznie z wartościami granicznymi. Następnie pętla foreach przechodzi po wszystkich zapisanych elementach tablicy, a warunek if ($x > 0) sprawdza, czy dana wartość jest dodatnia. Tylko wtedy następuje wypisanie jej na ekran. W praktyce taki schemat jest bardzo typowy: najpierw generujemy albo pobieramy dane, zapisujemy je w tablicy, a później filtrujemy według warunku. Podobnie można wyświetlać tylko aktywnych użytkowników, produkty z ceną większą od zera albo wyniki pomiarów przekraczające jakiś próg. Z mojego doświadczenia warto tu pamiętać o dobrej praktyce: nazwy zmiennych powinny być bardziej opisowe niż $x, jeśli kod ma być czytelny w większym projekcie, np. $liczba albo $wartosc. Sama logika jest jednak poprawna: tablica zostaje wypełniona 20 losowymi wartościami, a wypisywane są wyłącznie wartości dodatnie.
W tym fragmencie łatwo pomylić kilka rzeczy, bo w kodzie występują jednocześnie indeksy tablicy, losowanie liczb oraz warunek filtrujący dane. Najważniejsze jest to, że liczba 100 w funkcji rand(-100, 100) nie oznacza liczby elementów tablicy. Ona określa tylko górną granicę losowanego zakresu. O liczbie elementów decyduje pętla for, a dokładniej warunek $i < 20. Ponieważ $i zaczyna się od 0 i zwiększa się o 1, otrzymujemy indeksy 0, 1, 2 aż do 19, czyli łącznie 20 miejsc w tablicy. To dość typowy błąd myślowy: ktoś widzi większą liczbę w funkcji losującej i automatycznie traktuje ją jak rozmiar tablicy. Tak nie działa PHP ani większość języków programowania. Trzeba zawsze patrzeć, która instrukcja steruje liczbą powtórzeń. Niepoprawne jest też założenie, że program wypisuje wartości ujemne. Warunek $x > 0 oznacza wyraźnie, że zmienna $x musi być większa od zera, więc przechodzą tylko liczby dodatnie. Zero nie zostanie wypisane, liczby ujemne też nie. Innym częstym nieporozumieniem jest utożsamianie indeksów tablicy z jej wartościami. Owszem, $i przyjmuje kolejne wartości od 0 do 19, ale one służą tutaj tylko jako indeksy: $tab[$i]. Do komórki tablicy trafia wynik rand(-100, 100), a nie samo $i. Kod nie tworzy więc listy 0, 1, 2, 3... 19. Nie tworzy też sekwencji od -100 do 100, bo funkcja rand losuje pojedynczą wartość z podanego zakresu przy każdym wywołaniu, a nie generuje uporządkowanego ciągu. Moim zdaniem najlepiej analizować taki kod etapami: najpierw inicjalizacja tablicy, potem pętla wypełniająca, potem pętla odczytująca i na końcu warunek wypisywania. To jest dobra praktyka przy debugowaniu i czytaniu cudzych skryptów PHP.

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.