KWALIFIKACJA INF3 - WRZESIEŃ 2014

PYTANIE NR 35.
Po wykonaniu zamieszczonego w ramce skryptu napisanego w języku JavaScript w przeglądarce zostanie wypisana wartość
Ilustracja to grafika przedstawiająca fragment kodu źródłowego umieszczony wewnątrz prostokątnej ramki o cienkim, czarnym
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Wynik zależy od działania postdekrementacji i kolejności instrukcji.
Najpierw do b trafia bieżąca wartość a (5), a dopiero potem a zmniejsza się o 1. Następnie a jest mnożone przez 3, więc staje się 12. Wypisany tekst to "12,5".

Pełne wyjaśnienie:

W tym zadaniu kluczowe jest rozróżnienie, co dzieje się "teraz", a co jest efektem ubocznym po użyciu operatora.

Po inicjalizacji var a = 5; zmienna a ma wartość 5.

Następnie wykonywana jest linia przypisująca wartość do b z użyciem operatora dekrementacji w wersji post. Postdekrementacja działa tak, że:

  • najpierw zwraca "starą" wartość zmiennej (tę sprzed zmiany),
  • a dopiero potem zmienia zmienną (zmniejsza ją o 1).

Dlatego do b zostaje podstawione 5, a a po tej operacji ma już wartość 4.

Kolejna instrukcja a *= 3; jest przypisaniem złożonym, czyli skrótem od a = a * 3;. Skoro w tym momencie a wynosi 4, to po przemnożeniu przez 3 otrzymujemy 12.

Ostatnia linia wypisuje wynik jako napis: a + "," + b. To nie jest dodawanie liczb, tylko konkatenacja łańcuchów (doklejanie tekstu), więc na ekran trafia dokładnie tekst 12,5.

Dlaczego pozostałe odpowiedzi są błędne? Wartości z "12,4" zwykle wynikają z pomylenia postdekrementacji z innym operatorem, a warianty "15,4" i "15,5" biorą się z błędnego założenia, że najpierw mnożymy 5 przez 3 lub że dekrementacja wpływa na b przed przypisaniem.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Postdekrementacja (zapis z -- po zmiennej) najpierw zwraca aktualną wartość zmiennej, a dopiero potem zmniejsza ją o 1. To oznacza, że w przypisaniu możesz dostać "starą" wartość, mimo że zmienna po instrukcji jest już mniejsza.
W zapisie a-- (post) najpierw używana jest bieżąca wartość a, a dopiero potem a się zmienia. W zapisie --a (pre) zmienna jest najpierw zmniejszana o 1, a dopiero potem używana w wyrażeniu.
Wyrażenie z cudzysłowem, np. ",", powoduje konkatenację napisów. Gdy JavaScript widzi łańcuch w środku, konwertuje liczby do tekstu i skleja fragmenty. Dlatego powstaje napis w formie "liczba,liczba".
Operator *= to przypisanie złożone: a *= 3 jest równoważne a = a * 3. Najpierw wykonywane jest mnożenie, a potem wynik trafia z powrotem do tej samej zmiennej.
Najlepiej zrobić "tabelkę śledzenia": po każdej linii wypisz aktualne wartości zmiennych. Zwracaj uwagę na operatory z efektem ubocznym (++, --) oraz na to, czy są użyte w wersji pre czy post. To minimalizuje pomyłki na egzaminie.
W praktyce produkcyjnej używa się go rzadko, bo może nadpisać treść dokumentu po załadowaniu strony. Na egzaminach pojawia się jednak często jako prosty sposób pokazania wyniku działania skryptu w przeglądarce.
Dzieje się tak wtedy, gdy do przypisania używasz postinkrementacji lub postdekrementacji, np. b = a--. Najpierw do b trafia aktualna wartość a, a dopiero potem a zostaje zmienione (zmniejszone o 1).
To typowy efekt pomylenia momentu zmiany zmiennej: wiele osób zakłada, że dekrementacja działa "od razu" przed przypisaniem. Bez rozpisania kroków łatwo przeoczyć, że postdekrementacja zwraca starą wartość, a dopiero potem zmienia zmienną.
Najczęstsze pułapki to: mylenie pre i post, ignorowanie efektu ubocznego (zmiany zmiennej), mieszanie konkatenacji napisów z dodawaniem liczb oraz brak śledzenia kolejności linii. Pomaga metoda "linia po linii" i kontrola typów.
Tak, jeśli znasz zasady operatorów i rozpiszesz stan programu po każdej instrukcji. W zadaniach egzaminacyjnych to wręcz oczekiwane: policzenie wyniku "na kartce" na podstawie definicji operatorów oraz konkatenacji łańcuchów.
info

To pytanie poprawnie rozwiązuje 52% zdających egzamin. trudne

Specjaliści zwracają uwagę: "Wynik zależy od działania postdekrementacji i kolejności instrukcji.Najpierw do b trafia bieżąca wartość a (5), a dopiero potem a zmniejsza się o 1."

Źródła:

  • MDN Web Docs: Increment (++) / Decrement (--) — opis pre/post, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Decrement (dostęp 2026-04-01)
  • MDN Web Docs: Multiplication assignment (*=), https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Multiplication_assignment (dostęp 2026-04-01)
  • MDN Web Docs: document.write(), https://developer.mozilla.org/en-US/docs/Web/API/Document/write (dostęp 2026-04-01)

Materiały:

  • MDN Web Docs: operatory inkrementacji/dekrementacji w JavaScript
  • MDN Web Docs: operator przypisania mnożenia (*=) w JavaScript
  • MDN Web Docs: konkatenacja napisów i konwersja typów w JavaScript

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego