KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2011

PYTANIE NR 27.
Po wykonaniu instrukcji for: zmienna X przyjmie wartość
Ilustracja przedstawia fragment kodu źródłowego napisanego w języku C lub C++, umieszczony wewnątrz przerywanej ramki.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Po instrukcji "X += Y" zmienna X przyjmuje wartość 6 + 7 = 13. Następnie pętla for wykona się trzy razy (I=3,2,1), a w każdej iteracji wykonuje się "X--; X++;". Dekrementacja i inkrementacja znoszą się, więc po pętli X nadal wynosi 13.

Pełne wyjaśnienie:

W pokazanym fragmencie programu kluczowe są dwa elementy: operator przypisania złożonego += oraz wpływ instrukcji wewnątrz pętli for na końcową wartość zmiennej.

1) Instrukcja przed pętlą
Zmienne startują jako: X=6 oraz Y=7. Zapis X += Y oznacza dokładnie to samo co X = X + Y. Zatem po tej instrukcji:
X = 6 + 7 = 13.

2) Liczba iteracji pętli for
Pętla ma postać "for (I=3; I>0; I--)". Oznacza to, że zaczynamy od I=3, wykonujemy ciało pętli dopóki warunek I>0 jest spełniony, a po każdej iteracji zmniejszamy I o 1. Ciało wykona się dla I=3, potem I=2, potem I=1, czyli łącznie trzy iteracje.

3) Wpływ instrukcji w pętli na X
W każdej iteracji wykonują się kolejno dwie instrukcje: "X--;" oraz "X++;". Pierwsza zmniejsza X o 1, a druga zwiększa X o 1. Efekt netto pojedynczej iteracji to 0 (najpierw -1, potem +1). To oznacza, że niezależnie od liczby iteracji, jeśli w każdej iteracji wykonuje się dokładnie taka para operacji, końcowa wartość X się nie zmienia.

Wniosek
Skoro po "X += Y" mamy X=13, a pętla nie zmienia X, to po wykonaniu całości końcowo X = 13.

Dlaczego pozostałe wartości nie pasują?

  • "7" wynika z pomylenia X += Y z X = Y albo z patrzenia wyłącznie na wartość Y. W tym kodzie X nie jest zastępowane przez 7, tylko powiększane o 7.
  • "10" może wynikać z błędnego zliczenia iteracji lub założenia, że pętla zmienia X, mimo że instrukcje w jej wnętrzu się kompensują.
  • "6" odpowiada wartości początkowej X i sugeruje pominięcie instrukcji "X += Y" podczas analizy.

Na egzaminie pomagają dwa nawyki: zapisanie sobie równoważności "+=" oraz szybkie sprawdzenie, czy w pętli nie ma par działań znoszących się (np. -- i ++ wykonywane jedno po drugim).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Zapis X += Y to przypisanie złożone: jest równoważny z X = X + Y. Najpierw bierze obecną wartość X, dodaje Y, a potem zapisuje wynik z powrotem do X. To nie jest to samo co X = Y.
Startujesz od I=3 i sprawdzasz warunek I>0. Iteracje są dla I=3, potem I=2, potem I=1. Gdy I spadnie do 0, warunek nie jest spełniony i pętla się kończy. Łącznie są 3 iteracje.
X-- zmniejsza X o 1, a następnie X++ zwiększa X o 1. Wykonane kolejno dają efekt netto 0. Jeśli w każdej iteracji pętli występuje dokładnie taka para, to nawet po wielu iteracjach końcowa wartość X pozostaje taka sama.
W poprawnym kodzie C/C++ powinno być I-- i X--. Zdarza się, że w skanach lub grafikach pojawiają się spacje typograficzne. Na egzaminie zwykle należy to czytać jako operator dekrementacji --, o ile kontekst jednoznacznie na to wskazuje.
Najlepiej zrobić krótką tabelę: (1) wpisz wartości startowe, (2) zastosuj każdą instrukcję po kolei, (3) w pętli policz iteracje i sprawdź zmianę w jednej iteracji, (4) jeśli zmiana netto iteracji wynosi 0, to pętla nie zmieni zmiennej.
Najczęściej myli się X += Y z X = Y. Wtedy ktoś wybiera wartość Y zamiast wyniku dodawania do X. Warto zapamiętać: += zawsze używa starej wartości X i ją modyfikuje, a nie zastępuje.
Sprawdź efekt netto jednej iteracji. Jeśli w iteracji masz pary operacji znoszących się (np. -- i potem ++ na tej samej zmiennej), zmiana może wynosić 0. Jeśli zmiana netto jest różna od 0, pomnóż ją przez liczbę iteracji i dodaj do wartości sprzed pętli.
W tym konkretnym przypadku (dwie instrukcje wykonywane kolejno) kolejność nie zmienia wyniku końcowego, bo i tak masz -1 oraz +1. Jednak w innych sytuacjach (np. w wyrażeniach z użyciem wartości zwracanej przez X++ lub X--) kolejność i kontekst mogą mieć znaczenie.
Poza += często spotyka się -=, *=, /= oraz %=. Każdy działa podobnie: modyfikuje zmienną po lewej stronie używając jej dotychczasowej wartości, np. X -= Y to X = X - Y.
Stosuj schemat: inicjalizacja → instrukcje przed pętlą → liczba iteracji → efekt jednej iteracji → wynik końcowy. Nie zgaduj "na skróty" po wartości jednej zmiennej. To minimalizuje pomyłki typu pominięcie instrukcji przed pętlą lub złe zliczenie iteracji.
info

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

Według specjalistów z branży: "Po instrukcji "X += Y" zmienna X przyjmuje wartość 6 + 7 = 13."

Źródła:

  • cppreference.com: Compound assignment operators (operator+=) – https://en.cppreference.com/w/cpp/language/operator_assignment (dostęp: 2026-02-28)
  • cppreference.com: for loop – https://en.cppreference.com/w/cpp/language/for (dostęp: 2026-02-28)
  • Microsoft Learn: C++ built-in operators, including increment/decrement and assignment – https://learn.microsoft.com/en-us/cpp/cpp/cpp-built-in-operators-precedence-and-associativity (dostęp: 2026-02-28)

Materiały:

  • Dokumentacja języka C++: operatory przypisania (+=) i operatory inkrementacji/dekrementacji
  • Materiały do nauki podstaw C/C++ (instrukcje sterujące, pętle, operatory)
  • Ćwiczenia: śledzenie wykonania kodu (trace tables) dla krótkich programów

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego