Fachkonzept – Fehler in Algorithmen und Programmen
Jeder macht Fehler
Algorithmisches Problemlösen ist eine anspruchsvolle Tätigkeit. Es ist ganz natürlich, wenn du dabei Fehler machst. Das kommt selbst bei Profis immer wieder vor.
Im Folgenden sollen einige Fehlerquellen kurz beleuchtet werden.
Fehler bei der Ideensuche
Häufig kommt es bereits bei der Ideensuche zu Fehlern. Man glaubt, die entscheidende Idee gefunden zu haben, hat aber etwas Wichtiges übersehen.
Bei der folgenden Idee wurde leider übersehen, dass sie das Problem nur in bestimmten Spezialfällen löst.
Kleeblatt suchen: SOLANGE nicht auf einem Kleeblatt, mache Folgendes: WENN vor einem Baum, dann den Baum / die Baumreihe umlaufen einen Schritt weitergehen das Kleeblatt aufheben
Hier wurde nicht berücksichtigt, dass hinter einer Baumreihe sofort wieder eine weitere Baumreihe folgen kann, oder, dass das Kleeblatt direkt hinter einer Baumreihe liegt.
Das Programm funktioniert zwar in diesem Beispiel ...
... aber nicht in diesem Beispiel ...
... und auch nicht in diesem Beispiel:
Fehler bei der Ablaufmodellierung
Bei der Ablaufmodellierung mit Struktogrammen muss man darauf achten, die Bausteine korrekt zusammenzusetzen.
Im folgenden Struktogramm hat sich ein Fehler eingeschlichen:
Das Kleeblatt darf erst ganz am Ende, also außerhalb der SOLANGE-Anweisung (Wiederholungsanweisung), aufgehoben werden. Im vorliegenden Struktogramm würde Kara in jedem Durchlauf der Schleife versuchen, ein Kleeblatt aufzuheben, was ihr dann aber nicht gelingt.
Fehler bei der Beschreibung in einer Programmiersprache
Bei der Übersetzung eines korrekten Algorithmus in ein lauffähiges Programm kann es zu weiteren Fehlern kommen.
So kann man z.B. den Doppelpunkt in der if-Anweisung vergessen.
while not kara.onLeaf():
if kara.treeFront()
kara.turnLeft()
kara.move()
kara.turnRight()
kara.move()
while kara.treeRight():
kara.move()
kara.turnRight()
kara.move()
kara.turnLeft()
else:
kara.move()
kara.removeLeaf()
Das Kara-Ausführsystem meldet dann folgenden Fehler:
Oder, eine Anweisung ist nicht korrekt eingerückt.
while not kara.onLeaf():
if kara.treeFront():
kara.turnLeft()
kara.move()
kara.turnRight()
kara.move()
while kara.treeRight():
kara.move()
kara.turnRight()
kara.move()
kara.turnLeft()
else:
kara.move()
kara.removeLeaf()
In diesem Fall meldet das Kara-Ausführsystem den folgenden Fehler:
Fehlertypen
Grob unterscheiden lassen sich die folgenden beiden Fehlertypen:
Logische Fehler sind Fehler in Algorithmen, bei denen die Ablauflogik nicht korrekt festgelegt ist.
Syntaxfehler sind Fehler in Programmen, bei denen die Vorgaben der Programmiersprache nicht beachtet sind.
Syntaxfehler werden in der Regel durch Fehlermedungen vom Ausführsystem angezeigt. Die Schwierigkeit besteht meist nur darin, die Fehlermeldungen zu verstehen.
Schwieriger ist es, logische Fehler zu finden. Hier hilft es oft, den Algorithmus – für verschiedene Problemsituationen – Schritt für Schritt selbst auszuführen.