Zaunpfahlfehler

Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 10. Dezember 2006 um 19:38 Uhr durch 84.162.63.244 (Diskussion) (Beispiel). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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.

Beispiel:

Index           0   1   2   3   4
Element           1   2   3   4
  • 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:

Index           0   1   2   3   4
Element         1   2   3   4   5

Beispiel

 

Frage: Wenn man einen 30 m langen Zaun errichten will und die Zaunpfähle 3 m auseinander stehen sollen, wieviele Pfähle braucht man dafür?

Antwort: Viele würden fälschlicherweise 30 durch 3 teilen und "10 Pfähle" antworten. Richtig ist aber 11, denn wie die nebenstehende Illustration zeigt, brauchen Anfang und Ende des Zauns je einen Pfahl. Wäre es aber ein runder Zaun (dies wurde nicht ausgeschlossen), dann bräuchte man nur 10 Pfähle.

Zaunpfahlprobleme in der Informatik

In der Informatik, wo der Begriff des Zaunpfahlproblems am häufigsten Verwendung findet, treten ähnliche Probleme auf. Diese gehören zwei Hauptgruppen an:

  1. Wie werden Abstände gezählt - inklusive eines oder beider Grenzelemente? Wenn es um den Abstand von Elementen in einer Liste geht, muss sich der Softwareentwickler im Klaren darüber sein, ob eines oder beide Grenzelemente mitgezählt werden oder nicht.
  2. Zählung ab 0 oder ab 1: Im Alltag beginnen Menschen Aufzählungen meist bei 1, in vielen – vor allem durch C beeinflussten – 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. Dies kann zu einem um-eins-daneben-Fehler führen.

Beispiel: Welchen Abstand haben Element 20 und Element 30 in einer Liste?

  • Zählung einschließlich beider Grenzwerte ("Inklusivzählung"): 11
  • Zählung einschließlich 20, aber ohne 30: 10
  • Zählung ohne 20, aber einschließlich 30: 10
  • Zählung ohne beide Grenzwerte (die dazwischenliegenden Elemente): 9

Zaunpfahlprobleme im Alltag

In der Antike und in früheren Jahrhunderten wurden Abstände, Zeiträume usw. sehr oft nach der "Inklusivzählung" gezählt. Das bedeutet, dass die Werte um 1 größer als mathematisch korrekt waren. Das liegt daran, dass es früher üblich war, generell ab 1 zu zählen, selbst in solchen Fällen, wo es eigentlich korrekt wäre, ab 0 zu zählen. Das Konzept der Zahl Null wurde in Europa erst mit der Einführung der arabisch-indischen Zahlen ab dem 13. Jahrhundert bekannt (Leonardo Fibonacci).

Beispiele hierfür, die noch heute unseren Sprachgebrauch bestimmen und verwirren, sind:

Zählung von Tagen

Normalerweise gilt heute für Angaben wie "in x Tagen", dass der heutige Tag nicht mitgerechnet wird. Man sagt zum Beispiel nicht "in 2 Tagen" wenn "morgen" gemeint ist. Jedoch ist es im deutschen Sprachraum aus historischen Gründen weit verbreitet, „in acht Tagen“ zu sagen, wenn eine Woche (sieben Tage) gemeint ist. Eine Analogie existiert im Französischen mit „quinze jours“, zu deutsch „fünfzehn Tage“, als Bezeichnung für zwei Wochen.

Ein anderes bekanntes Beispiel findet sich in der Bibel. Jesus Christus ist "am dritten Tage auferstanden" - obwohl er am Freitag Nachmittag starb und am Samstag Abend (in der Nacht auf den Sonntag) auferstand. Auch dies ist ein Beispiel für die antike Inklusivzählung (die Samstagnacht zählt im Judentum zum Sonntag. Der Sonntag kommt zwei Tage nach dem Freitag - entsprechend der früher üblichen Inklusivzählung ist er somit der "dritte Tag".

Zählung von Jahrestagen

Jahrestage (z.B. Geburtstage) feiern die Vollendung und nicht den Beginn der angegebenen Jahre. Ein Mensch, der seinen 18. Geburtstag feiert, beginnt deshalb nicht sein 18. Lebensjahr - vielmehr hat er schon volle 18 Jahre gelebt und beginnt sein 19. Lebensjahr.

Wenn man den Tag seiner Geburt mitrechnet, feiert er an diesem Tag bereits den 19. Geburtstag.

Zählung der Jahrhunderte

Es gibt in unserem Kalender kein Jahr Null. Folglich sind die ersten 100 Jahre unseres Kalenders (das 1. Jahrhundert) die Jahre 1 bis einschließlich 100. 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.

Das Wort "bis"

Das Wort "bis" lässt unklar, ob der angegebene Grenzwert eingeschlossen ist oder nicht. Sagt beispielsweise ein Lehrer zu seinen Schülern „Lest bitte 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 Seite 34 vollendet werden soll (kleiner-gleich-Operator; <=).

Abhilfe schafft hier die Formulierung "bis einschließlich".

Intervalle in der Musik

Auch bei musikalischen Intervallen wird aus historischen Gründen - obwohl das lateinische Wort intervallum "Zwischenraum" bedeutet - der Anfangs- und Endeton bei der Benennung mitgezählt. Daher hat die Prime den Abstand 0 Töne, die Sekunde den Abstand 1 Ton, usw.

Dass der Name jedes Intervalls um 1 zu groß ist, sieht man unter anderem bei der Addition von Intervallen. Eine Quarte und eine Quinte ergeben zusammen eine Oktave. Aber 4 + 5 ist nicht 8 - vielmehr ist (4-1) + (5-1) = (8-1), also 3 + 4 = 7.

Verwandte Probleme

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.

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.

Trivia

"Bei drei oder auf drei?" ist ein berühmtes Zitat aus der Lethal Weapon Reihe. Hier ist das Problem, ob man die gemeinsam geplante, überraschende Aktion beginnen soll, nachdem man bis drei gezählt hat oder genau dann, wenn man drei sagt.