KWALIFIKACJA INF3 - PAŹDZIERNIK 2016

PYTANIE NR 31.
Zadaniem przedstawionej funkcji zapisanej w jęzvku JavaScript jest

function fun1(a, b)
{
if (a % 2 != 0) a++;
for (n = a; n <= b; n+=2)
document.write(n);
}

A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Funkcja sprawdza, czy a jest nieparzyste (a % 2 != 0) i wtedy zwiększa je o 1, aby start był parzysty. Następnie pętla for wypisuje kolejne wartości n od a do b ze skokiem 2 (n += 2), więc na stronie pojawiają się tylko liczby parzyste z tego przedziału.

Pełne wyjaśnienie:

W tej funkcji kluczowe są dwa mechanizmy: ustalenie poprawnego początku oraz iteracja co 2.

  • Krok 1: sprawdzenie parzystości a
    Wyrażenie a % 2 oblicza resztę z dzielenia a przez 2. Jeśli a % 2 != 0, to a jest nieparzyste, więc instrukcja a++ podnosi je o 1. W efekcie start pętli jest zawsze liczbą parzystą (albo a było parzyste od razu, albo zostało "dociągnięte" do najbliższej parzystej).
  • Krok 2: pętla for od a do b
    Pętla ustawia licznik: n = a, następnie działa dopóki n <= b, a po każdej iteracji wykonuje n += 2. Skoro zaczynamy od liczby parzystej i zawsze dodajemy 2, to każda kolejna wartość też jest parzysta.
  • Krok 3: "wypisywanie", a nie "zwracanie"
    Instrukcja document.write(n) wypisuje wartość do dokumentu HTML (efekt uboczny). Funkcja nie ma instrukcji return, więc nie "zwraca" listy liczb jako wyniku wywołania.

Dlatego poprawna interpretacja to: wypisanie liczb parzystych z przedziału od a do b (z uwzględnieniem, że gdy a jest nieparzyste, startem staje się a+1).

Dlaczego pozostałe odpowiedzi są błędne?

  • "Zwrócenie wartości…" – myli wypisywanie z wartością zwracaną; brak return.
  • "Wypisanie wszystkich liczb…" – pętla zwiększa n o 2, więc pomija co drugi element i nie wypisuje liczb nieparzystych.
  • "Sprawdzenie, czy a jest nieparzysta; jeśli tak, wypisanie jej." – jeśli a jest nieparzyste, to zostaje zwiększone i nieparzyste a nie jest wypisywane; dodatkowo pętla wypisuje wiele liczb, nie jedną.

Wskazówka egzaminacyjna: przy takich zadaniach zrób krótki "trace" dla przykładu, np. a=3, b=9: a staje się 4, a potem wypisze 4, 6, 8. To szybko ujawnia sens kroku n+=2.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Operator % zwraca resztę z dzielenia. Dla parzystości najczęściej sprawdza się liczba % 2: wynik 0 oznacza liczbę parzystą, a wynik różny od 0 (dla liczb całkowitych) oznacza nieparzystą. To pozwala szybko sterować dalszą logiką programu.
Ten warunek "wyrównuje" początek przedziału. Jeśli a jest nieparzyste, to zostaje zwiększone o 1, aby stało się parzyste. Dzięki temu pętla, która potem dodaje 2, startuje od liczby parzystej i konsekwentnie generuje tylko parzyste wartości aż do granicy b.
W pętli for zapis n += 2 oznacza zwiększanie licznika o 2 po każdym obiegu. W praktyce pętla przechodzi co drugi element ciągu liczb. Jeśli zacznie od liczby parzystej, to będzie produkować parzyste; jeśli zacznie od nieparzystej, będzie produkować nieparzyste.
Warunek n <= b oznacza, że pętla wykona się także dla wartości równej b. To ważne przy zadaniach o przedziale: jeśli b jest parzyste i pętla dochodzi do niego skokami co 2, to liczba b zostanie również wypisana.
Nie w sensie programistycznym. Funkcja nie używa return, więc nie zwraca tablicy ani liczby jako wyniku wywołania. Zamiast tego wykonuje efekt uboczny: wypisuje wartości przez document.write. To częsty haczyk w testach: "wypisuje" nie znaczy "zwraca".
Pętla nie zwiększa licznika o 1, tylko o 2 (n += 2), więc pomija co drugą liczbę. Dodatkowo, gdy a jest nieparzyste, zostaje zwiększone do parzystego, więc już na starcie część liczb z przedziału nie będzie wypisywana.
Zrób krótki "trace" w głowie. Przykład: a=3, b=9. Najpierw a jest nieparzyste, więc rośnie do 4. Pętla wypisze 4, potem 6, potem 8 i zakończy się, bo kolejna byłaby 10 > 9. Takie 2–3 kroki zwykle wystarczą do poprawnej interpretacji.
Jeśli po ewentualnym zwiększeniu a nadal jest większe od b, to warunek pętli n <= b będzie fałszywy już na początku. Wtedy pętla nie wykona się ani razu i nic nie zostanie wypisane przez document.write.
Najczęściej myli się wypisywanie z zwracaniem, ignoruje się wpływ warunku modyfikującego a, albo zakłada się, że pętla "od a do b" zawsze oznacza wszystkie liczby. Kluczowe jest sprawdzenie kroku pętli i tego, czy start jest korygowany.
Trzeba zastąpić document.write budowaniem wyniku i użyć return, np. dodać tablicę, dopisywać do niej kolejne n, a na końcu zwrócić tablicę. Na egzaminie wystarczy pamiętać zasadę: return = wynik funkcji, a wypisywanie to tylko efekt uboczny.
info

Około 41% zdających odpowiada poprawnie na to pytanie. trudne

Według specjalistów z branży: "Funkcja sprawdza, czy a jest nieparzyste (a % 2 != 0) i wtedy zwiększa je o 1, aby start był parzysty."

Źródła:

  • MDN Web Docs: Expressions and operators – Remainder (%) operator, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder (dostęp: 2026-02-18)
  • MDN Web Docs: for statement, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for (dostęp: 2026-02-18)
  • MDN Web Docs: Document.write(), https://developer.mozilla.org/en-US/docs/Web/API/Document/write (dostęp: 2026-02-18)

Materiały:

  • Dokumentacja MDN: operator % (remainder) i przykłady parzystości
  • Dokumentacja MDN: pętla for i modyfikacja licznika
  • Dokumentacja MDN: document.write i konsekwencje użycia w nowoczesnych aplikacjach

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego