KWALIFIKACJA INF2 + INF3 - PRÓBNY

PYTANIE NR 3.
Na przedstawionym poniżej fragmencie programu znajduje się między innymi



var 
 i,j,k:integer; 
begin 
 ... 
 k:=15; 
 i:=5; 
 j:=i+7; 
  while  (k < j) do 
  j:=j-k; 
 ... 
 ... 




A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Pętla while sprawdza warunek przed pierwszą iteracją. W kodzie: k=15, i=5, więc j=i+7=12. Warunek (k<j) daje (15<12), czyli fałsz, dlatego instrukcja j:=j-k nie wykona się ani razu. To przykład pętli niewykonującej się.

Pełne wyjaśnienie:

Pętla while należy do konstrukcji iteracyjnych typu pre-test: warunek logiczny jest sprawdzany zanim wykona się ciało pętli, i to przy każdej próbie wejścia do kolejnej iteracji (również do pierwszej).

W analizowanym fragmencie kodu najpierw ustawiane są wartości zmiennych:

  • k:=15
  • i:=5
  • j:=i+7, więc j=5+7=12

Następnie pojawia się pętla: while (k < j) do j:=j-k;. Podstawiamy aktualne wartości: sprawdzamy, czy 15 < 12. To zdanie jest fałszywe, więc program nie wchodzi do pętli nawet na jedną iterację. W konsekwencji przypisanie j:=j-k nie zostanie wykonane ani razu.

Dlaczego pozostałe odpowiedzi nie pasują?

  • "pętla ... dokładnie raz" byłaby prawdziwa tylko wtedy, gdy warunek na starcie byłby prawdziwy, a po jednej iteracji stałby się fałszywy. Tutaj warunek jest fałszywy od początku.
  • "pętla ... nieokreśloną ilość razy" opisuje sytuacje, gdy liczba iteracji zależy od danych wejściowych lub wartości zmiennych, ale nadal wymaga, by warunek początkowo był prawdziwy. W tym fragmencie nie ma nawet pierwszej iteracji.
  • "instrukcja warunkowa" dotyczy konstrukcji wyboru (np. if), a nie iteracji. while jest pętlą, a nie pojedynczym rozgałęzieniem.

W praktyce taki przypadek bywa celowy (warunek strażniczy), albo wskazuje na błąd inicjalizacji danych. Na egzaminie warto zawsze wykonać krótki "dry-run": policzyć wartości po przypisaniach i dopiero potem ocenić warunek pętli.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Oznacza to, że program najpierw ocenia wyrażenie logiczne w nagłówku pętli, a dopiero gdy jest ono prawdziwe, wykonuje ciało pętli. Jeśli warunek jest fałszywy już na początku, pętla wykona się 0 razy.
Najpierw podstaw wartości po wszystkich przypisaniach sprzed pętli: wylicz j:=i+7, a potem porównaj k i j w warunku. Jeśli nierówność w warunku jest fałszywa przy pierwszym sprawdzeniu, pętla nie wystartuje.
Po inicjalizacji mamy k=15, i=5 oraz j=12. Warunek pętli to (k<j), czyli (15<12). To fałsz, więc while od razu kończy działanie bez wejścia do ciała pętli i bez wykonania j:=j-k.
Tak. Musi być spełnione, że warunek jest prawdziwy na starcie, a po pierwszej iteracji zmienne zmienią się tak, że warunek stanie się fałszywy. To częsty wzorzec, ale nie zachodzi, gdy warunek jest fałszywy już przy pierwszym sprawdzeniu.
W while warunek jest sprawdzany przed wykonaniem ciała pętli, więc możliwe jest 0 iteracji. W repeat-until ciało wykonuje się co najmniej raz, bo warunek sprawdza się dopiero na końcu iteracji.
To pętla, której warunek wejścia jest fałszywy już przy pierwszym sprawdzeniu, więc jej ciało nie wykona się ani razu. Najczęściej wynika to z wartości startowych zmiennych albo z celowej "straży" chroniącej przed niepotrzebnym działaniem.
Typowe błędy to: założenie, że pętla zawsze wykona się minimum raz, pomylenie while z repeat-until, oraz pominięcie przypisań przed pętlą (np. j:=i+7). Pomaga metoda: krok po kroku policzyć wartości i dopiero ocenić warunek.
Nie w sensie instrukcji wyboru. while to instrukcja iteracyjna (pętla), a instrukcja warunkowa zwykle oznacza konstrukcję typu if, która wybiera jedną z gałęzi. while może zawierać warunek, ale służy do powtarzania.
Gdy chcemy wykonać fragment tylko przy spełnieniu warunku wstępnego, np. gdy są dane do przetworzenia, gdy licznik ma odpowiednią wartość albo gdy stan aplikacji na to pozwala. Taki warunek strażniczy zmniejsza ryzyko błędów i zbędnych obliczeń.
Zrób "dry-run": wypisz wartości zmiennych po kolejnych przypisaniach, a następnie oceń warunek pętli przed pierwszą iteracją. Ta technika jest szybka i wystarcza do wielu zadań egzaminacyjnych z podstaw programowania.
info

Około 65% zdających odpowiada poprawnie na to pytanie. średnie

W praktyce zawodowej kluczowe jest to, że pętla while sprawdza warunek przed pierwszą iteracją.

Źródła:

  • Free Pascal Reference Guide: "Statements" → "While statement" (opis semantyki: warunek sprawdzany przed wykonaniem ciała pętli), https://www.freepascal.org/docs-html/current/ref/refse17.html (dostęp: 2026-02-28)
  • Lazarus Wiki: "Control statements" / instrukcje sterujące (omówienie pętli while i kolejności sprawdzania warunku), https://wiki.freepascal.org/Control_statements (dostęp: 2026-02-28)

Materiały:

  • Dokumentacja Free Pascal / Lazarus: opis instrukcji sterujących (while)
  • Podręcznik do podstaw programowania w Pascalu (rozdział: instrukcje iteracyjne)
  • Ćwiczenia: śledzenie wartości zmiennych (dry-run) dla pętli while i repeat-until

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego