KWALIFIKACJA INF2 + INF3 - STYCZEŃ 2009

PYTANIE NR 22.
Indeksowanie tablic w C++ zaczyna się od
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
W C++ indeksy elementów tablicy są zerowe: pierwszy element ma indeks 0, drugi 1 itd.
Dlatego poprawna jest odpowiedź "zera.". Pozostałe propozycje nie odpowiadają standardowemu sposobowi adresowania elementów w tablicach/wektorach w C++ i prowadzą do błędów granicznych.

Pełne wyjaśnienie:

W C++ tablice (oraz typowe kontenery sekwencyjne, np. wektor) są indeksowane od zera. Oznacza to, że jeśli tablica ma n elementów, to poprawne indeksy mieszczą się w zakresie od 0 do n-1. Pierwszy element znajduje się pod indeksem 0, drugi pod 1, trzeci pod 2 itd.

Odpowiedź "zera." jest poprawna, ponieważ wynika z tego, jak w C/C++ działa arytmetyka wskaźników i adresowanie pamięci: zapis tablica[i] odpowiada przesunięciu o i elementów od początku tablicy. Dla pierwszego elementu przesunięcie wynosi 0.

Dlaczego pozostałe odpowiedzi są niepoprawne:

  • "jedynki." – to częsty nawyk z matematyki lub numerowania pozycji na liście. W programowaniu w C++ prowadzi to do błędów typu off-by-one, np. pomijania pierwszego elementu albo próby odwołania się do elementu poza zakresem.
  • "dwóch." – nie jest standardem w C++. Indeks 2 oznacza dopiero trzeci element tablicy, więc traktowanie go jako początku byłoby arbitralne i niezgodne z praktyką.
  • "końca." – indeksowanie nie "zaczyna się od końca"; można oczywiście iterować od końca do początku, ale nadal używa się indeksów liczonych od 0, a ostatni poprawny indeks to n-1.

Wskazówka egzaminacyjna: jeśli widzisz pętlę po tablicy w C++, najczęściej poprawny schemat to start od 0 i warunek "mniejsze niż rozmiar" (a nie "mniejsze lub równe"). To bezpośrednio wynika z indeksowania od zera.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
To znaczy, że pierwszy element ma indeks 0, drugi 1, a ostatni ma indeks n-1, gdzie n to liczba elementów. Dzięki temu zapis tablica[i] oznacza przesunięcie o i elementów od początku tablicy.
Wynika to z adresowania pamięci i arytmetyki wskaźników: element o indeksie 0 leży dokładnie na początku tablicy (brak przesunięcia). Indeks i oznacza przesunięcie o i elementów, co upraszcza implementację i jest zgodne z rodziną języków C.
Dla 10 elementów poprawny zakres indeksów to 0–9. Indeks 10 oznacza już element poza zakresem. W praktyce w pętli używa się warunku i < 10, a nie i <= 10, aby nie wyjść poza tablicę.
Najczęściej stosuje się schemat: start od 0 i warunek "mniejsze niż rozmiar". Przykład: for (int i=0; i<n; i++). Ten zapis odpowiada temu, że ostatni poprawny indeks to n-1.
To jest odwołanie poza zakresem (out of bounds). W C++ dla surowych tablic i operatora [] skutkiem jest niezdefiniowane zachowanie (może działać "pozornie", może się wysypać, może psuć dane). Dlatego trzeba pilnować zakresu 0…n-1.
Tak. Dla std::vector pierwszy element ma indeks 0, a ostatni size()-1. Dostęp przez operator[] nie sprawdza zakresu, a metoda at() sprawdza i zgłasza błąd, gdy indeks jest niepoprawny.
at() warto użyć, gdy zależy Ci na wykryciu błędu indeksu podczas uruchomienia programu (sprawdza zakres). [] jest szybszy, ale nie kontroluje poprawności indeksu. Na egzaminie rozpoznaj, że problem wynika często z wyjścia poza zakres.
Najczęstsze są błędy graniczne: pominięcie pierwszego elementu (start od 1), odwołanie do elementu n zamiast n-1 (zły warunek pętli), oraz mylenie rozmiaru z ostatnim indeksem. To typowe przy sortowaniu, wyszukiwaniu i zliczaniu.
Tak, można i często się to robi, np. gdy usuwasz elementy. Nadal jednak indeksy są w zakresie 0…n-1. Zwykle startuje się od n-1 i zmniejsza indeks, pilnując warunku zakończenia, aby nie zejść poniżej 0.
Ćwicz krótkie programy z tablicami/wektorami: wczytywanie, sumowanie, wyszukiwanie, sortowanie. Zwracaj uwagę na zakres indeksów i warunki pętli. W testach, gdy widzisz rozmiar n, automatycznie myśl: "ostatni indeks = n-1".
info

Statystycznie 79% uczniów zna prawidłową odpowiedź. średnio łatwe

Według specjalistów z branży: "W C++ indeksy elementów tablicy są zerowe: pierwszy element ma indeks 0, drugi 1 itd.Dlatego poprawna jest odpowiedź "zera."."

Źródła:

  • cppreference: Array declaration (C++), sekcja o tablicach i dostępie przez indeks - https://en.cppreference.com/w/cpp/language/array (dostęp: 2026-02-27)
  • cppreference: operator[] (C++), opis dostępu indeksowego - https://en.cppreference.com/w/cpp/language/operator_member_access (dostęp: 2026-02-27)
  • cppreference: std::vector::operator[] (C++), przykład indeksowania od 0 - https://en.cppreference.com/w/cpp/container/vector/operator_at (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja cppreference dotycząca tablic i indeksowania
  • Podręcznik do podstaw C++ omawiający tablice i pętle for
  • Ćwiczenia praktyczne: iteracja po tablicy, walidacja zakresu indeksów, testy brzegowe

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego