Przejdź do zawartości

Indeksowanie od zera

Z Wikipedii, wolnej encyklopedii

Indeksowanie od zera – sposób numerowania elementów ciągu, w którym pierwszemu elementowi przypisuje się indeks 0, a nie 1, jak ma to miejsce w codziennym języku czy w tradycyjnym liczeniu porządkowym.

Indeksowanie od zera jest powszechnie stosowane w informatyce oraz w niektórych dziedzinach matematyki. W takim podejściu pierwszy element ciągu określany jest mianem elementu zerowego (ang. zeroth)[1], a nie pierwszego. Pojęcie elementu zerowego może także odnosić się do obiektu, który wprawdzie formalnie nie należy do danego ciągu, ale mógłby zostać logicznie uznany za jego poprzednik – element poprzedzający pierwszy wyraz.

Ciągi indeksowane od 0 są dość powszechne w notacji matematycznej, szczególnie w kombinatoryce, chociaż języki programowania matematycznego zwykle indeksują od 1[2][3][4]. W informatyce, w nowoczesnych językach programowania indeksy tablic zwykle zaczynają się od 0, więc programiści mogą mówić o zerowym elemencie w sytuacjach, w których inni użyliby słowa pierwszy, itd. W niektórych kontekstach matematycznych numerowanie od zera może być stosowane bez żadnych problemów, gdy liczebniki porządkowe mają ustalone znaczenie i istnieje oczywisty kandydat na miejsce przed pierwszym; na przykład pochodną zerową funkcji jest sama funkcja, uzyskana przez „zerokrotne” różniczkowanie. Jest to przykład sytuacji, gdy zerowy element nie należy właściwie do ciągu, ale go poprzedza: zerowa pochodna wcale nie jest tak naprawdę pochodną. Jednak tak jak pierwsza pochodna poprzedza drugą pochodną, tak też pochodna zerowa (lub sama funkcja pierwotna) poprzedza pierwszą pochodną.

Programowanie komputerowe

[edytuj | edytuj kod]

Pochodzenie

[edytuj | edytuj kod]

Martin Richards, twórca języka BCPL (prekursora języka C), zaprojektował tablice tak, aby zaczynały się od indeksu 0, ponieważ było to naturalne rozwiązanie z punktu widzenia sposobu adresowania w pamięci. Wskaźnik p wskazuje na początek tablicy, a selementy są dostępne poprzez dodawanie przesunięcia: p + 0 odnosi się do pierwszego elementu, p + 1 do drugiego, itd.[5][6].

W 1982 roku Edsger W. Dijkstra w tekście zatutułowanym Why numbering should start at zero[7] argumentował, że indeksy dolne tablic powinny zaczynać się od zera, ponieważ jest to „liczba najbardziej naturalna” do tego celu.

Zastosowanie w językach programowania

[edytuj | edytuj kod]

W wielu wpływowych językach programowania, w tym C (tablice), Java (tablice i listy) i Lisp (wektory) indeksowanie rozpoczyna się od zera. Szczególnie w języku C, gdzie tablice są ściśle powiązane z arytmetyką wskaźników, takie rozwiązanie pozwala na prostszą implementację: indeks dolny odnosi się do przesunięcia od pozycji początkowej tablicy, więc pierwszy element ma przesunięcie równe zero.

Rozwiązania sprzętowe zwykle umożliwiają odwoływanie się do pamięci za pomocą adresu i przesunięcia, zatem indeksowanie od zera ułatwia kompilację, kosztem może być zwiększone ryzyko błędów ludzkich. W przypadku innych języków programowania, takich jak Fortran czy COBOL, indeksy tablicowe zaczynają się od 1. Wynika to z faktu, że te języki były pomyślane jako języki programowania wysokiego poziomu i jako takie musiały odpowiadać zwykłemu, codziennemu wykorzystaniu liczb porządkowych.

Pascal pozwala na dowolne indeksowanie tablic. APL umożliwia ustawienie początku indeksu na 0 lub 1[8][9]. Niektóre nowsze języki, takie jak Lua i Visual Basic, przyjęły tę samą konwencję.

Inne zastosowania

[edytuj | edytuj kod]
  • Rok zerowy nie występuje w powszechnie używanym kalendarzu gregoriańskim ani w jego poprzedniku, kalendarzu juliańskim. W tych systemach po roku 1 p.n.e. następuje rok 1 n.e. Rok zerowy występuje jednak w astronomicznej numeracji lat, która wykorzystuje daty juliańskie) oraz w ISO 8601:2004 (gdzie pokrywa się z gregoriańskim rokiem 1 p.n.e.), a także we wszystkich kalendarzach buddyjskich i hinduistycznych.
  • W wielu krajach, w tym w Polsce, parter w budynkach jest uważany za piętro zerowe. Nie jest tak jednak w Stanach Zjednoczonych Ameryki, gdzie parter to „1st floor”.
  • Choć używanie zera w numeracji porządkowej jest stosowane głównie w matematyce, fizyce i informatyce, można je również spotkać w muzyce klasycznej. Jedna z symfoni Antona Brucknera nazywana jest Symfonią d-moll „numer 0”. Sam kompozytor uważał ją za niegodną włączenia do kanonu swoich dzieł i napisał gilt nicht („nie liczy się”) i oznaczył kółkiem z poprzeczką. Istnieje jeszcze wcześniejsza Symfonia f-moll Brucknera, która jest czasem nazywana Symfonią numer 00. Rosyjski kompozytor Alfred Schnittke napisał również Symfonię numer 0 .
  • Na niektórych uniwersytetach, w tym w Oksfordzie i Cambridge, „tydzień „0” lub czasami „tydzień zerowy” odnosi się do tygodnia poprzedzającego pierwszy tydzień wykładów w semestrze. W Australii niektóre uniwersytety określają to jako „O week”, co jest grą słów („tydzień orientacyjny”). Równocześnie tygodnie wprowadzające do studiów uniwersyteckich w Szwecji nazywane są zazwyczaj nollning (zerowe).
  • Podstawowe szkolenie w Siłach Powietrznych Stanów Zjednoczonych rozpoczyna się w każdą środę, a pierwszy tydzień (z ośmiu) rozpoczyna się w następną niedzielę. Cztery dni poprzedzające tę niedzielę są często nazywane „tygodniem zerowym”.
  • Obwodnica Brukseli ma numer R0. Zbudowano ją po wybudowaniu obwodnicy Antwerpii, ale Brukselę (będącą stolicą Belgii) uznano za zasługującą na numer symbolicznie odzwierciedlający jej status. Podobnie niedokończona obwodnica Budapesztu na Węgrzech nosi nazwę M0.
  • Isaac Asimov ostatecznie dodał Zerowe Prawo do swoich Trzech Praw Robotyki.
  • Cztery podstawowe wolności wolnego oprogramowania są ponumerowane począwszy od zera. Wynika to z przyczyn historycznych: lista pierwotnie zawierała tylko trzy swobody, a gdy dodano czwartą, umieszczono ją na pozycji zerowej, ponieważ uznano ją za bardziej podstawową.

Zobacz także

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Graham M. Seed: An Introduction to Object-Oriented Programming in C++ with Applications in Computer Graphics. Wyd. 2nd. British Library: Springer, 1965, s. 391. ISBN 1-85233-450-9.
  2. Steve Eddins and Loren Shure: Matrix Indexing in MATLAB. [dostęp 23 February 2021].
  3. How to : Get Elements of Lists. [dostęp 23 February 2021].
  4. Indexing Arrays, Matrices, and Vectors. [dostęp 23 February 2021].
  5. Martin Richards: The BCPL Reference Manual. Massachusetts Institute of Technology, 1967, s. 11.
  6. Tom Van Vleck: The IBM 7094 and CTSS. 1995. [dostęp 28 January 2014].
  7. Edsger Wybe Dijkstra: Why numbering should start at zero (EWD 831). E. W. Dijkstra Archive, May 2, 2008. [dostęp 2011-03-16].
  8. Jim Brown. In Defense of Index Origin 0. „ACM SIGAPL APL Quote Quad”. 9 (2), December 1978. DOI: 10.1145/586050.586053. 
  9. Roger Hui: Is Index Origin 0 a Hindrance?. jsoftware.com. [dostęp 19 January 2015].
  10. Albert Towle: Modern Biology. Holt McDougal, 1989, s. 35. ISBN 978-0-03-013927-7.