KWALIFIKACJA INF2 + INF3 - CZERWIEC 2007

PYTANIE NR 24.
Który z przedstawionych programów będzie wypisywać liczby całkowite od 2 do 10?
Ilustracja przedstawia cztery fragmenty kodu w języku C++, oznaczone literami A, B, C i D.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawny program musi rozpocząć od wartości 2, wypisać bieżącą liczbę i zwiększać ją o 1 aż do osiągnięcia 10 włącznie. Kluczowe jest spełnienie dwóch warunków: inicjalizacja licznika na 2 oraz warunek pętli w postaci "mniejsze lub równe 10", aby nie pominąć liczby 10.

Pełne wyjaśnienie:

Aby program wypisywał liczby całkowite od 2 do 10, musi zrealizować prostą sekwencję: start od 2, a następnie powtarzać wypisanie i zwiększenie wartości aż do momentu, gdy zostanie wypisana także 10.

W praktyce oznacza to trzy elementy logiki:

  • Inicjalizacja licznika: zmienna sterująca powinna mieć na początku wartość 2. Jeśli startuje od 0 lub 1, wynik nie będzie zgodny z zakresem.
  • Warunek pętli: aby uwzględnić 10, typowy warunek to "i <= 10". Użycie "i < 10" spowoduje zakończenie pętli przed wypisaniem 10, czyli klasyczny błąd brzegowy (off-by-one).
  • Krok (inkrementacja): po wypisaniu liczby należy zwiększyć licznik o 1 (np. i++). Brak inkrementacji grozi pętlą nieskończoną (ciągłe wypisywanie tej samej wartości), a zbyt duży krok (np. i += 2) pominie część liczb.

Program oparty na schemacie: ustaw licznik na 2 → dopóki licznik nie przekroczy 10 → wypisz licznik → zwiększ licznik, spełnia wymaganie zadania, bo generuje dokładnie: 2, 3, 4, 5, 6, 7, 8, 9, 10.

Dlaczego inne warianty kodu w tego typu zadaniach bywają błędne? Najczęściej:

  • stosują zły warunek końcowy (np. "mniejsze niż 10"),
  • zaczynają od niewłaściwej wartości (np. 1),
  • zmieniają licznik w złą stronę (dekrementacja),
  • aktualizują licznik przed wypisaniem, co przesuwa zakres,
  • mają niezgodność typu lub logiki, przez co zakres nie jest zachowany.

Wskazówka egzaminacyjna: zawsze sprawdź ręcznie pierwsze dwie iteracje oraz ostatnią. Jeśli pierwsza wypisywana liczba to 2, a ostatnia to 10, i wartości rosną co 1, to kod spełnia wymaganie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Błąd off-by-one to pomyłka o 1 na granicy zakresu. Dla 2–10 często wynika z użycia warunku i < 10 zamiast i <= 10. Wtedy liczba 10 nie zostanie wypisana, mimo że wydaje się "prawie dobrze".
Sprawdź warunek kontynuacji. Jeśli pętla działa "dopóki i <= 10", to 10 zostanie jeszcze przetworzona. Jeśli jest "dopóki i < 10", pętla zakończy się przed 10. Dodatkowo zweryfikuj, czy wypisywanie jest przed inkrementacją.
Zakres ma zaczynać się od 2, więc licznik musi startować od 2 albo kod musi doprowadzić go do 2 przed pierwszym wypisaniem. Gdy licznik startuje od 0 lub 1, program wypisze niepożądane liczby i wynik nie spełni warunku zadania.
Najczęściej spotkasz warunek i <= 10 przy starcie i = 2. Alternatywnie można użyć warunku i < 11, ale to łatwiej pomylić. Na egzaminie najbezpieczniej czytać zakres jako "włącznie" i dopasować do tego znak porównania.
Tak. Zarówno for, jak i while mogą wygenerować identyczny ciąg, jeśli mają te same elementy: start od 2, warunek końca obejmujący 10 oraz krok +1. Różni się składnia, ale logika (inicjalizacja–warunek–krok) pozostaje taka sama.
Jeśli licznik nie zbliża się do spełnienia warunku zakończenia, pętla może nie skończyć się nigdy. Przykłady: brak inkrementacji, dekrementacja przy warunku rosnącym lub stała wartość licznika. Zawsze sprawdź, czy krok zmienia licznik w stronę przekroczenia granicy.
i++ zwiększa zmienną i o 1 po użyciu jej bieżącej wartości. W pętli wypisującej zakres zapewnia przejście do kolejnej liczby całkowitej. Jeśli zamiast tego jest i += 2, program pominie co drugą liczbę i nie wypisze pełnego zakresu.
Gdy chcesz wypisać wartość początkową (tu: 2). Jeśli najpierw zwiększysz licznik, a dopiero potem wypiszesz, pierwszy wydruk może być przesunięty (np. zacznie się od 3). Kolejność: wypisz → zwiększ jest najczęstsza dla prostych zakresów.
Wypisze liczby od 2 do 9, bo gdy i osiągnie 10, warunek i < 10 przestanie być spełniony i pętla zakończy działanie. To klasyczny przykład, dlaczego trzeba rozróżniać "mniej niż" od "mniej lub równe".
Ćwicz analizę granic: zawsze sprawdzaj start, warunek i krok. Rób szybki "śladowy" zapis 3 pierwszych i 2 ostatnich iteracji. Naucz się rozpoznawać błąd off-by-one oraz pętlę nieskończoną. To pozwala szybko eliminować błędne programy bez uruchamiania kodu.
info

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

Według specjalistów z branży: "Poprawny program musi rozpocząć od wartości 2, wypisać bieżącą liczbę i zwiększać ją o 1 aż do osiągnięcia 10 włącznie."

Źródła:

  • cppreference.com: while loop (C++), https://en.cppreference.com/w/cpp/language/while (dostęp: 2026-03-02)
  • cppreference.com: ++ operator (C++), https://en.cppreference.com/w/cpp/language/operator_incdec (dostęp: 2026-03-02)
  • cppreference.com: std::cout (C++ iostream), https://en.cppreference.com/w/cpp/io/cout (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja referencyjna C++ (opis pętli while i operatorów porównania)
  • Ćwiczenia z błędów brzegowych (off-by-one) na krótkich pętlach
  • Zadania praktyczne: przepisywanie pętli while na for i odwrotnie

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego