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.