Der Begriff Zaunpfahlproblem beschreibt ein Logikproblem der Indexierung und zeichnet sich durch eine Indexverschiebung von genau eins aus. Dieses Problem tritt häufig in der Datenverarbeitung auf.
Problematik
Zaunpfahlprobleme können auftreten, wenn
- es einen Index mehr als Elemente gibt. Das liegt daran, dass Anfangs- und Endelement kein Vorgänger- bzw. Nachfolge-Element haben. Das ist das ursprüngliche Zaunpfahlproblem. So hat beispielsweise ein Zentimetermaß zwar Zentimeter 0 und 1, aber nur einen ersten (von 0 bis 1 cm) und keinen nullten Zentimeter. Hier beschreibt die Verbindung von zwei Indizes ein Element, was manchmal zu Schwierigkeiten führen kann.
- es genausoviele Indizes wie Elemente gibt, diese aber um eins verschoben sind. Dabei wird die Nummerierung anders durchgeführt als dessen Auslesung. In der Datenverarbeitung kommt dieses Problem häufig vor, wenn Computer bei 0 zu zählen beginnen, Anwender aber bei 1.
Beispiel
Frage: Wieviele Pfähle braucht man, um zehn Zaunsegmente in gerader (nicht in sich geschlossener) Linie aufzustellen?
Antwort: Viele würden fälschlicherweise mit 10 antworten. Richtig ist aber 11, da Anfang und Ende des Zauns je einen Pfahl brauchen. Würde der Zaun eine geschlossene Fläche bilden, brauchte man (je nach Bautechnik) nur 10, da Anfangs- und Endstück einen gemeinsamen Pfahl benutzen könnten.
Zaunpfahlprobleme im Alltag
Finden der Mitte
Bei der Frage, wo die Mitte auf einer Skala von 1 bis 10 liegt, antworten viele Menschen intuitiv mit 5, da 5 die Hälfte von 10 ist. Tatsächlich liegt 5 aber unterhalb der Mitte, die sich bei 5,5 befindet. Zur Veranschaulichung:
1 2 3 4 5 6 7 8 9 10 ^Mitte
Die Hälfte des Maximalwertes ergibt nur dann die Mitte, wenn die Skala mit 0 statt mit 1 beginnt.
Informatik
In der Informatik treten ähnliche Probleme auf. Im Alltag beginnen Menschen Aufzählungen meist bei 1; in vielen - vor allem durch C beeinflusste - Programmiersprachen beginnen Aufzählungen hingegen bei 0. So hat beispielsweise in Java ein Array der Größe 5 Elemente mit den Indizes 0, 1, 2, 3 und 4. Ein typischer Anfängerfehler ist es, in einem solchen Array die Elemente 1 bis 5 auszulesen oder einen falschen Vergleichsoperator zu benutzen. Dort trägt es den Namen Um-eins-daneben-Fehler. Es muss aber nicht jeder Um-eins-daneben-Fehler ein Zaunpfahlproblem sein.
Stockwerke
In Deutschland ist der 1. Stock das erste aufgestockte Geschoss, im Gegensatz zum Erdgeschoss. In vielen Kulturen hat jedoch das Erdgeschoss die Nummer 1. Auch hier kommt es zum Zaunpfahlproblem: Stockwerk 3 oder drei Treppen hoch? Wenn in Deutschland statt Stockwerken Etagen durchnummeriert werden, dann wird oft im Erdgeschoss mit dem Zählen bei 1 angefangen.
Jahre
Ein Jahrhundert ist nach 100 Jahren vollendet, nicht bei Eintritt in das hundertste Jahr. Die ersten 100 Jahre unseres Kalenders sind die Jahre 1 bis 100 (ein Jahr Null gibt es in unserem Kalender nicht). Das 20. Jahrhundert lief folglich vom 1. Januar 1901 bis zum 31. Dezember 2000. Was Ende 1999 gefeiert wurde, war also weder das neue Jahrhundert noch das neue Jahrtausend, sondern der Wechsel der Tausender-Ziffer in der Jahreszahl.
Geburtstage feiern ebenfalls die Vollendung und nicht den Beginn der angegebenen Jahre. Ein Mensch, der seinen 18. Geburtstag feiert, hat also schon 18 Jahre gelebt und beginnt sein 19. Lebensjahr.
Linguistische Vergleichsoperatoren
Auch sprachliche Anweisungen können hin und wieder verwirrend sein. Sagt beispielsweise ein Lehrer zu seinen Schülern "Lest bitte zu morgen das Buch bis Seite 34", kann es für Außenstehende unklar sein, ob Seite 33 zu Ende gelesen und Seite 34 erreicht werden soll (kleiner-als-Operator; <) oder ob die 34. Seite vollendet werden soll (kleiner-gleich-Operator; ≤).
Entsprechendes gilt für Angaben wie "in x Tagen". Normalerweise wird bei solchen Aussagen der heutige Tag nicht mitgerechnet. Jedoch ist es im deutschen Sprachraum weit verbreitet, "in acht Tagen" zu sagen, wenn eine Woche (sieben Tage) gemeint ist.