KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2014

PYTANIE NR 14.
Wynikiem działania programu są liczby
Ilustracja przedstawia fragment kodu programu napisanego w języku Pascal.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Program startuje z q=3 i w=2.
Warunek q<w jest fałszywy, więc wykonuje się gałąź else i w staje się 5. Następnie q>w też jest fałszywe, więc wykonywane jest q:=w+q, czyli q=8. Wypisane zostają wartości końcowe: 8, 5.

Pełne wyjaśnienie:

W zadaniach tego typu kluczowe jest śledzenie stanu zmiennych po każdej instrukcji. W kodzie z ilustracji są dwie zmienne całkowite: q i w, a następnie dwie instrukcje if-then-else.

Stan początkowy: q=3, w=2.

  • Sprawdzenie warunku q<w oznacza: czy 3<2? To fałsz, więc nie wykona się instrukcja z gałęzi then, tylko gałąź else. W efekcie wykonywane jest w:=w+q, czyli w=2+3=5. Po tym kroku: q=3, w=5.
  • Drugi warunek to q>w, czyli czy 3>5? To również fałsz, więc znów wykonuje się gałąź else. Wykonywane jest q:=w+q, a więc q=5+3=8. Stan końcowy: q=8, w=5.

Instrukcja writeln(q, ',', w) wypisuje wartości w ustalonej kolejności: najpierw q, potem w. Dlatego poprawny wynik to 8, 5.

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

  • Wyniki z q=5 lub q=3 zwykle wynikają z pominięcia faktu, że w zmienia się w pierwszym if, a drugi if korzysta już z nowych wartości.
  • Wyniki typu 5, 7 albo 2, 5 mogą powstać po błędnym założeniu, że wykonują się obie gałęzie (then i else) albo po odwróceniu znaków porównania.
  • Wynik 3, 8 sugeruje zamianę kolejności wypisywania (w przed q) lub błędne przypisanie do niewłaściwej zmiennej.

Wskazówka egzaminacyjna: rób krótką tabelę "krok → instrukcja → q → w" i po każdym przypisaniu przepisuj nowe wartości. To eliminuje większość pomyłek.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Najprościej zapisuj stan po każdej instrukcji: wartości zmiennych przed if, wynik warunku (prawda/fałsz), a potem nowe wartości po przypisaniu. W if-then-else wykonuje się tylko jedna gałąź, więc po sprawdzeniu warunku od razu aktualizujesz tylko tę jedną instrukcję.
To instrukcja wyboru: jeśli warunek jest spełniony, wykonuje się część po then, a gdy warunek jest niespełniony, wykonuje się część po else. Nie wykonują się obie gałęzie naraz. To podstawa analizy działania programu bez uruchamiania.
Ponieważ warunek q<w dla q=3 i w=2 jest fałszywy, program przechodzi do gałęzi else. W tej gałęzi jest przypisanie w:=w+q, więc w zostaje nadpisane nową wartością. To wpływa na wynik drugiego porównania.
Typowe pomyłki to: odwrócenie znaków < i >, liczenie na starych wartościach zamiast na zaktualizowanych, założenie że wykonują się obie gałęzie, oraz pominięcie kolejności wypisywania (np. q przed w). Pomaga tabela śledzenia i konsekwentny zapis po krokach.
Nie. W pojedynczej konstrukcji if-then-else wybierana jest dokładnie jedna ścieżka: then dla warunku prawdziwego lub else dla fałszywego. Wykonanie obu naraz jest niemożliwe i takie myślenie prowadzi do błędnych wyników w zadaniach z analizą kodu.
Operator := oblicza wyrażenie po prawej stronie i zapisuje wynik do zmiennej po lewej stronie, nadpisując poprzednią wartość. W analizie programu zawsze przyjmuj, że po przypisaniu stara wartość znika, a dalsze instrukcje używają już wartości zaktualizowanej.
Program wykonuje instrukcje liniowo: najpierw inicjalizacja, potem pierwszy if (z ewentualnym przypisaniem), a dopiero później drugi if. Jeśli pierwszy if zmienił w lub q, to w momencie sprawdzania drugiego warunku program "widzi" już te nowe wartości, a nie stan początkowy.
Stosuj "ręczny debugger": rozpisz wartości startowe, potem dla każdej instrukcji zapisz (1) co jest sprawdzane, (2) czy warunek jest prawdziwy, (3) jakie przypisanie zostaje wykonane, (4) nowy stan zmiennych. Na końcu odczytaj, co jest wypisywane. To jest dokładnie umiejętność testowana w takich pytaniach.
To operatory porównania: < oznacza "mniejsze niż", a > oznacza "większe niż". Błąd w odczycie tych znaków zmienia wybór gałęzi then/else, a więc całe dalsze obliczenia. Na egzaminie warto zawsze przetłumaczyć warunek na zdanie po polsku.
Ćwicz krótkie programy z instrukcjami warunkowymi i przypisaniami, a wynik licz ręcznie w tabeli kroków. Trenuj szczególnie sytuacje, gdy jedna instrukcja zmienia zmienną używaną w kolejnych warunkach. Dodatkowo poćwicz w debuggerze wykonywanie krokowe i podgląd wartości.
info

Statystycznie 69% uczniów zna prawidłową odpowiedź. średnie

Eksperci podkreślają: "Program startuje z q=3 i w=2.Warunek q&lt;w jest fałszywy, więc wykonuje się gałąź else i w staje się 5."

Źródła:

  • Free Pascal Reference Guide (dokumentacja): rozdział o instrukcji warunkowej if-then-else, https://www.freepascal.org/docs-html/ref/refse18.html (dostęp: 2026-03-02)
  • Embarcadero Delphi documentation: IF statement (Pascal), https://docwiki.embarcadero.com/RADStudio/en/IF_Statement (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja języka Pascal/FreePascal dotycząca instrukcji if-then-else
  • Zadania typu "program tracing" (śledzenie wartości zmiennych) z arkuszy egzaminacyjnych
  • Ćwiczenia z tabelą śledzenia (kolumny: krok, instrukcja, q, w, komentarz)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego