KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2011

PYTANIE NR 29.
Ile razy w podanym programie wykona się pętla dla n=0?
Ilustracja przedstawia fragment kodu w języku Pascal, który jest częścią pytania egzaminacyjnego związanego z kwalifikacjami
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Jeśli dla n=0 warunek wejścia do pętli jest od razu fałszywy (np. start i=1 oraz warunek i<=n), ciało pętli nie wykona się ani razu.
Dlatego poprawna jest odpowiedź "Ani razu.", a pozostałe sugerują nieuprawnione założenia o liczbie iteracji.

Pełne wyjaśnienie:

W pętlach typu for i while kluczowe jest to, czy warunek pętli jest spełniony przed pierwszym wejściem do jej wnętrza. Gdy analizujemy przypadek brzegowy n=0, bardzo często (np. w algorytmach liczonych "od 1 do n") warunek ma postać porównania w stylu "i <= n" przy starcie "i=1".

Jeżeli wtedy podstawimy n=0, dostajemy już na starcie relację 1 <= 0, czyli warunek jest fałszywy. Skutek jest prosty: program nie wchodzi do bloku pętli ani razu, więc liczba iteracji wynosi 0. Tę zasadę stosuje się także przy analizie innych wejść granicznych, np. pustej tablicy lub pustej listy.

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

  • "i + 1 razy." – to typowe mylenie liczby iteracji z wartością zmiennej sterującej albo z innym, nieokreślonym fragmentem programu. Bez spełnionego warunku startowego pętla nie wykona się nawet "jeden raz".
  • "silnia razy." – sugeruje skojarzenie z algorytmem obliczania silni, ale sama obecność n=0 nie oznacza automatycznie, że pętla wykona się "silnia razy". W praktyce silnia dla 0 jest zdefiniowana, ale liczba iteracji w pętli zależy od warunku, a nie od nazwy zadania.
  • "Nieskończoną ilość razy." – nieskończona pętla pojawia się wtedy, gdy warunek nigdy nie staje się fałszywy (albo brak jest zmiany stanu). Dla n=0 w typowych pętlach zakresowych warunek jest fałszywy od początku, więc nie ma podstaw do wniosku o nieskończoności.

Wskazówka egzaminacyjna: zawsze sprawdzaj warunek wejścia dla danych brzegowych (0, 1, puste zbiory) zanim zaczniesz liczyć iteracje.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Decyduje warunek wejścia do pętli. W pętli for i while warunek jest sprawdzany przed wykonaniem bloku, więc gdy jest od razu fałszywy, iteracji będzie 0. Wyjątkiem jest do...while, gdzie blok wykona się co najmniej raz.
Podstaw n=0 do warunku pętli i oceń go na początku. Jeśli warunek jest fałszywy już przy starcie (np. i=1 oraz i <= n), pętla nie wykona się wcale. To szybka metoda analizy bez uruchamiania programu.
W wielu algorytmach iteracja przebiega "od 1 do n". Dla n=0 taki zakres jest pusty, więc warunek startowy nie jest spełniony. Program nie ma powodu wejść do pętli, bo nie ma żadnego elementu do przetworzenia.
while sprawdza warunek przed wejściem, więc przy fałszu od razu daje 0 iteracji. do...while najpierw wykonuje blok, a dopiero potem sprawdza warunek, więc wykona się minimum 1 raz, nawet gdy n=0.
Może, ale tylko gdy pętla ma wadliwy warunek lub brak zmiany zmiennej sterującej, przez co warunek nigdy nie stanie się fałszywy. Sam fakt, że n=0, nie oznacza nieskończoności; w typowych pętlach zakresowych oznacza raczej brak iteracji.
Błąd off-by-one polega na przesunięciu o 1: np. użyciu i<n zamiast i<=n albo złej wartości startowej. Skutkiem jest wykonanie pętli o jedną iterację za mało lub za dużo. Dla n=0 takie błędy mogą zmienić wynik z 0 na 1 albo odwrotnie.
Sprawdź relację między startem a warunkiem. Jeśli start jest już "poza" zakresem (np. start i=1, a warunek wymaga i<=0), zakres jest pusty. To typowe dla n=0, gdy liczymy od 1, albo dla pustych tablic, gdy indeks startowy jest większy od końcowego.
Bo n=0 ujawnia, czy zdający rozumie logikę warunków pętli i potrafi analizować przypadki brzegowe. W praktyce programistycznej to kluczowe przy walidacji danych wejściowych, obsłudze pustych wyników i unikaniu błędów w algorytmach.
Typowy wzorzec to start od 0 i warunek ścisły: i=0; i<n; i++. Wtedy dla n=0 warunek 0<0 jest fałszywy, więc pętla wykona się 0 razy, a dla n=5 wykona się 5 iteracji. To bezpieczny schemat w wielu językach.
Ćwicz analizę małych fragmentów kodu i podstawianie wartości brzegowych (0, 1, 2). Zwracaj uwagę na: wartość startową, warunek zakończenia i krok zmiany. Pomaga też porównywanie for/while/do-while oraz wykrywanie, kiedy zakres iteracji jest pusty.
info

To pytanie poprawnie rozwiązuje 79% zdających egzamin. średnio łatwe

Źródła:

  • Brian W. Kernighan, Dennis M. Ritchie, "The C Programming Language", rozdział o instrukcjach sterujących (pętle), wydanie 2
  • Bjarne Stroustrup, "A Tour of C++", sekcja dotycząca instrukcji iteracyjnych (for/while) i warunków
  • Douglas Crockford, "JavaScript: The Good Parts", rozdział o instrukcjach sterujących i pętlach

Materiały:

  • Podręcznik do podstaw programowania (rozdział: instrukcje iteracyjne)
  • Dokumentacja języka używanego na zajęciach (sekcja: pętle for/while/do-while)
  • Zadania treningowe z analizą liczby iteracji i przypadków brzegowych

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego