KWALIFIKACJA INF3 - STYCZEŃ 2024 (test 2)

PYTANIE NR 4.
Instrukcją równoważną funkcjonalnie do przedstawionej instrukcji JavaScript jest
Ilustracja przedstawia cztery fragmenty kodu JavaScript, które są umieszczone w prostokątnych ramkach.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Równoważna pętla while musi zachować tę samą logikę co pętla for: inicjalizacja licznika przed pętlą, identyczny warunek kontynuacji oraz aktualizacja licznika w ciele pętli. Tylko odpowiedź "Kod 3." ma i = 0, warunek i < 100 i krok i += 10, więc daje ten sam wynik wypisywania.

Pełne wyjaśnienie:

W JavaScript pętla for ma trzy kluczowe elementy sterujące: inicjalizację (wykonywaną raz przed startem), warunek (sprawdzany przed każdą iteracją) oraz aktualizację (wykonywaną po każdej iteracji). W pokazanym kodzie wzorcowym są to odpowiednio: ustawienie i = 0, warunek i < 100 oraz krok i += 10. Ciało pętli wykonuje zapis: document.write(i + ' '), więc wypisywane są wartości 0, 10, 20, …, 90.

Aby pętla while była funkcjonalnie równoważna, musi odtworzyć dokładnie te same trzy elementy, tylko w innym miejscu kodu:

  • Inicjalizacja licznika musi znaleźć się przed pętlą while.
  • Warunek w while musi być identyczny jak w for (tu: i < 100).
  • Aktualizacja licznika musi znaleźć się w ciele pętli (tu: i += 10), aby każda iteracja przesuwała licznik tak samo.

Odpowiedź "Kod 3." spełnia wszystkie te warunki: ustawia i = 0, ma warunek i < 100 i wykonuje i += 10 po wypisaniu wartości. Dzięki temu liczba iteracji i wypisywane wartości są takie same jak w pętli for.

Pozostałe warianty nie są równoważne, bo łamią co najmniej jeden z warunków równoważności:

  • "Kod 1." używa innego warunku zakończenia (i < 10) i nie pokazuje inicjalizacji przed pętlą, więc zakres iteracji jest inny lub zmienna może być niezdefiniowana.
  • "Kod 2." nie zawiera aktualizacji licznika w pętli, co grozi pętlą nieskończoną (warunek nie zmienia się w czasie) oraz nie zapewnia tej samej sekwencji wartości.
  • "Kod 4." ma inny warunek (i < 10) i inny krok (i++ zamiast i += 10), więc wypisze inne wartości (np. 0–9), a nie 0–90 co 10.

Wskazówka egzaminacyjna: przy pytaniach o równoważność pętli zawsze porównuj inicjalizację, warunek i krok. Jeśli choć jeden element jest inny, kod zwykle nie jest równoważny.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To taka pętla, która dla tych samych danych startowych wykona tę samą liczbę iteracji, w tej samej kolejności oraz da ten sam efekt (np. identyczny wynik wypisywania). Liczy się zachowanie programu, a nie identyczny zapis składni.
Pętla for ma: inicjalizację (np. i=0), warunek (np. i<100) i aktualizację (np. i+=10). Inicjalizacja jest wykonywana raz, warunek jest sprawdzany przed iteracją, a aktualizacja po każdej iteracji.
Przenieś inicjalizację przed pętlę while, wpisz ten sam warunek w nagłówku while i dodaj tę samą aktualizację w ciele pętli. Kolejność w ciele ma znaczenie: zwykle najpierw wykonujesz operację, potem aktualizujesz licznik.
Jeśli w pętli while warunek zależy od licznika (np. i<100), a licznik nie jest zmieniany, warunek może nigdy nie stać się fałszywy. To prowadzi do pętli nieskończonej i zawieszenia skryptu lub strony.
i+=10 zwiększa licznik o 10, a i++ tylko o 1. To zmienia liczbę iteracji oraz wypisywane wartości (np. 0,10,20… vs 0,1,2…). W pytaniach o równoważność to krytyczny szczegół, bo zmiana kroku zmienia działanie programu.
for jest wygodna, gdy znasz liczbę kroków albo masz klasyczny licznik. while jest lepsza, gdy powtarzasz operacje "dopóki" warunek jest spełniony i sterowanie jest bardziej dynamiczne. Obie konstrukcje mogą być równoważne, jeśli zachowasz te same warunki iteracji.
Najczęstsze pomyłki to: pominięcie inicjalizacji licznika przed while, zmiana warunku (np. <10 zamiast <100), brak aktualizacji licznika albo inny krok (np. i++ zamiast i+=10). Wystarczy jeden błąd, by pętla nie była równoważna.
Wypisz kilka pierwszych wartości: 0, 10, 20… i zobacz, gdzie kończy się warunek i<100. Ostatnia wartość to 90, bo po 90 aktualizacja da 100 i warunek przestanie być spełniony. To pomaga porównać, czy pętla while generuje identyczny zakres.
Warunek i<10 kończy pętlę dużo wcześniej niż i<100, więc liczba iteracji i wartości licznika są inne. Przy kroku 10 pętla z i<10 wykona się praktycznie tylko dla i=0, a z i<100 dla i=0…90.
1) Zidentyfikuj inicjalizację, warunek i aktualizację w kodzie wzorcowym. 2) Sprawdź, czy kandydat while ma inicjalizację przed pętlą. 3) Porównaj warunek (musi być identyczny). 4) Porównaj krok aktualizacji. 5) Oceń, czy efekt w ciele pętli zachowuje kolejność.
info

Statystycznie 52% uczniów zna prawidłową odpowiedź. trudne

Eksperci podkreślają: "Równoważna pętla while musi zachować tę samą logikę co pętla for: inicjalizacja licznika przed pętlą, identyczny warunek kontynuacji oraz aktualizacja licznika w ciele pętli."

Źródła:

  • MDN Web Docs — for: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for (dostęp 2026-03-01)
  • MDN Web Docs — while: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while (dostęp 2026-03-01)
  • ECMAScript Language Specification — Iteration Statements (for/while): https://tc39.es/ecma262/#sec-iteration-statements (dostęp 2026-03-01)

Materiały:

  • Dokumentacja MDN: pętla for (JavaScript) – opis składni i działania
  • Dokumentacja MDN: pętla while (JavaScript) – opis warunku i przebiegu iteracji
  • Ćwiczenia praktyczne: ręczne przepisanie kilku pętli for na while i uruchomienie w konsoli przeglądarki

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego