KWALIFIKACJA INF2 + INF3 - CZERWIEC 2011

PYTANIE NR 23.
Po wykonaniu fragmentu programu zmienne a i b przyjmą odpowiednio wartości
Ilustracja przedstawia fragment kodu w języku C++.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W pętli while instrukcje wykonują się, dopóki a > b. Start: a=10, b=1. Po 1. iteracji: a=5, b=2. Po 2. iteracji: a=2 (bo 5/2 w int daje 2), b=4. Następnie 2>4 jest fałszem, więc pętla kończy działanie.

Pełne wyjaśnienie:

W tym zadaniu trzeba zasymulować wykonanie kodu C++ linia po linii, zwracając uwagę na dwa elementy: działanie pętli while oraz dzielenie całkowite dla typu int.

Warunek pętli: instrukcje w bloku wykonują się tak długo, jak długo spełniony jest warunek a > b. Warunek jest sprawdzany przed każdą iteracją.

Start: a=10, b=1.

  • Iteracja 1 (10 > 1 jest prawdą):
    a /= 2 oznacza a = a / 2, więc a = 10/2 = 5.
    b *= 2 oznacza b = b * 2, więc b = 1*2 = 2.
  • Iteracja 2 (5 > 2 jest prawdą):
    a = 5/2. Ponieważ a jest typu int, wynik 5/2 to 2 (część ułamkowa jest obcinana, nie ma 2,5).
    b = 2*2 = 4.
  • Kolejne sprawdzenie warunku: 2 > 4 jest fałszem, więc pętla kończy działanie.

Zatem końcowe wartości to a=2 oraz b=4.

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

  • Warianty typu "4 i 6" lub "6 i 8" zwykle wynikają z błędnego policzenia liczby iteracji albo z błędnego założenia, że pętla wykona się dłużej mimo niespełnionego warunku a > b.
  • Wartości sugerujące większe a (np. 4) mogą wynikać z pomylenia dzielenia całkowitego z rzeczywistym (np. traktowania 5/2 jak 2,5 i dalszych niepoprawnych przekształceń).
  • Wariant "5 i 10" odpowiadałby raczej innemu kodowi (np. mnożeniu b przez 10 albo pojedynczej zmianie), a nie temu, gdzie b jest podwajane w każdej iteracji.

Wskazówka egzaminacyjna: rób małą tabelę śledzenia (a, b) po każdej iteracji i zawsze sprawdzaj, czy w C++ dzielisz liczby całkowite, czy zmiennoprzecinkowe.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Pętla while najpierw sprawdza warunek, a dopiero potem wykonuje blok. Jeśli warunek jest fałszywy już na starcie, blok nie wykona się ani razu. W zadaniach typu "wartości zmiennych po programie" trzeba śledzić stan po każdej iteracji.
Zapis a /= 2 to operator złożony: jest równoważny instrukcji a = a / 2. Najpierw wykonywane jest dzielenie, a wynik trafia z powrotem do zmiennej a. Typ zmiennej wpływa na wynik (int tnie część ułamkową).
Zapis b *= 2 oznacza b = b * 2, czyli podwojenie wartości zmiennej b. W pętli powoduje to wzrost b w kolejnych iteracjach. Na egzaminie łatwo to przeoczyć, gdy jednocześnie zmniejsza się inna zmienna.
Gdy dzielisz int/int, wynikiem jest też int, więc część ułamkowa jest odrzucana (nie jest zachowywana). Dlatego 5/2 daje 2. Aby uzyskać 2,5, trzeba użyć typu zmiennoprzecinkowego, np. 5.0/2.
Pętla kończy działanie w chwili, gdy warunek w nagłówku staje się fałszywy. W przykładach z dwiema zmiennymi trzeba sprawdzać warunek po każdej aktualizacji w bloku. Typowy błąd to dopisanie "jeszcze jednej iteracji", mimo że warunek już nie zachodzi.
Najlepiej spisać pary (a, b) w tabeli: start, po iteracji 1, po iteracji 2 itd. W każdej iteracji zastosuj kolejno instrukcje z bloku. To minimalizuje błędy pamięci i kolejności. W tym typie zadań najważniejsze są 2–3 pierwsze kroki.
Najczęstsze błędy to: traktowanie dzielenia całkowitego jak rzeczywistego (np. 5/2 jako 2,5), pomylenie liczby iteracji (zatrzymanie za wcześnie lub za późno) oraz nieuwzględnienie, że warunek while jest sprawdzany przed wejściem do bloku.
Tak. Instrukcje wykonują się po kolei, więc zmiana jednej zmiennej może wpłynąć na dalsze obliczenia w tej samej iteracji (albo na warunek w kolejnych iteracjach). W zadaniach egzaminacyjnych zawsze zakładaj dokładnie taką kolejność, jak w kodzie.
Ustaw punkt przerwania na początku pętli, uruchom program i używaj "step over/into", obserwując wartości w oknie "watch". Dzięki temu zobaczysz, jak po każdej iteracji zmieniają się a i b. To dobra metoda nauki, ale na egzaminie i tak warto umieć policzyć ręcznie.
Powiązane są: typy danych (int, double), rzutowania i konwersje, operatory porównania, pre- i postinkrementacja, instrukcje warunkowe oraz analiza przepływu sterowania. Te elementy często łączą się w zadaniach o "wartościach zmiennych po wykonaniu kodu".
info

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

Specjaliści zwracają uwagę: "W pętli while instrukcje wykonują się, dopóki a > b."

Źródła:

  • cppreference.com: while loop (C++), https://en.cppreference.com/w/cpp/language/while - dostęp 2026-03-01
  • cppreference.com: Compound assignment operators (C++), https://en.cppreference.com/w/cpp/language/operator_assignment - dostęp 2026-03-01
  • cppreference.com: Arithmetic operators / division (C++), https://en.cppreference.com/w/cpp/language/operator_arithmetic - dostęp 2026-03-01

Materiały:

  • Dokumentacja języka C++ (opis pętli while i operatorów przypisania)
  • Ćwiczenia z ręcznej symulacji krótkich programów (trace table)
  • Materiały o typach danych i konwersjach w C++ (int, double)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego