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

Słowa kluczowe: Iteracja po tablicy PHP foreach z referencją w PHP

Dana jest tablica o nazwie tab wypełniona liczbami całkowitymi różnymi od zera. Przedstawiony kod zapisany w języku PHP ma za zadanie

foreach ($tab as &$liczba)
    $liczba = $liczba * (-1);
unset($liczba);
A. obliczyć iloczyn wszystkich liczb w tablicy.
Źle. Iloczyn wymagałby osobnej zmiennej mnożonej przez kolejne elementy.
B. zamienić elementy tablicy na wartości przechowywane w zmiennej liczba.
Źle. $liczba jest referencją do kolejnych elementów, więc każdy dostaje własną, przeciwną wartość.
C. zamienić wszystkie elementy tablicy na liczby z przeciwnym znakiem.
Dobrze. Referencja &$liczba sprawia, że mnożenie przez -1 odwraca znak każdego elementu tablicy.
D. obliczyć wartość bezwzględną elementów tablicy.
Źle. Wartość bezwzględną daje funkcja abs(), a tu liczby dodatnie stają się ujemne.

Pytanie z egzaminu CKE, styczeń 2016 (arkusz E.14-X-16.01).

Pętla foreach przechodzi po wszystkich elementach tablicy $tab. Znak & przed $liczba oznacza, że zmienna jest referencją do bieżącego elementu, a nie jego kopią - przypisanie do $liczba zmienia więc wartość w samej tablicy. Mnożenie przez -1 odwraca znak: 5 staje się -5, a -3 staje się 3. Po pętli tablica zawiera te same liczby z przeciwnymi znakami. Wywołanie unset($liczba) usuwa referencję po zakończeniu pętli, żeby przypadkowe przypisanie do $liczba w dalszej części skryptu nie nadpisało ostatniego elementu. Do zapamiętania: bez & pętla foreach pracuje na kopiach i tablica pozostałaby bez zmian.

Wybór iloczynu wynika zwykle z widoku mnożenia w kodzie. Iloczyn wymagałby jednak zmiennej pomocniczej, np. $iloczyn = 1, i mnożenia jej przez kolejne elementy, a tu każdy element jest mnożony tylko przez -1. Wartość bezwzględna zamieniłaby liczby ujemne na dodatnie, a dodatnie zostawiła bez zmian; tymczasem po wykonaniu kodu 5 zmieni się w -5, więc liczb ujemnych przybędzie. Do tego służyłaby funkcja abs(). Zdanie o zamianie elementów na wartość zmiennej $liczba myli kierunek przypisania: to $liczba jest referencją do elementu, a nie odwrotnie, i każdy element dostaje własną, przeciwną wartość. Kod odwraca więc znak każdej liczby w tablicy. Warto sprawdzić to na przykładzie: tablica z liczbami 2, -7 i 4 po wykonaniu kodu zawiera -2, 7 i -4, czyli każdy element zmienił znak, a żadna liczba nie zniknęła.

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.