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.
Welcher Fehler wurde hier bei der Implementierung des Algorithmus gemacht?
Power-up suchen:
SOLANGE nicht auf einem Power-up, mache Folgendes:
WENN vor einem Asteroid, dann
den Asteroid / die Asteroidreihe umlaufen
anschließend einen Sektor weiterfliegen
das Power-up aufheben
Hier wurde nicht berücksichtigt, dass hinter einem Asteroiden sofort wieder ein weiterer Asteroid folgen kann, oder, dass das Power-up direkt hinter einer Asteroidreihe liegt.
Beispiel - Kara-Welt vorher / nachher
Beispiel - Kara-Welt vorher / nachher
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. Um welchen Fehler handelt es sich?
Die Anweisung 'Power-up aufheben' ist Teil der while - Schleife mit der Bedingung 'nicht auf einem Power-up'. Die Schleife wird beendet sobald die Argo auf einem Power-up ist, sodass die Anweisung 'Power-up aufheben' nicht mehr ausgeführt wird.
Fehler bei der Beschreibung in einer Programmiersprache
Bei der Übersetzung eines korrekten Algorithmus in ein lauffähiges Programm kann es zu weiteren Fehlern kommen.
Wo ist der Fehler?
while not argo.onPow():
if argo.rockFront()
argo.turnLeft()
argo.move()
argo.turnRight()
argo.move()
while argo.rockRight():
argo.move()
argo.turnRight()
argo.move()
argo.turnLeft()
else:
argo.move()
argo.removePow()
Hier fehlt der Doppelpunkt in der if-Anweisung in Zeile 2. Der Editor zeigt folgende Fehlermeldung:
Welcher Fehler wurde hier gemacht?
while not argo.onPow():
if argo.rockFront():
argo.turnLeft()
argo.move()
argo.turnRight()
argo.move()
while argo.rockRight():
argo.move()
argo.turnRight()
argo.move()
argo.turnLeft()
else:
argo.move()
argo.removePow()
Die Einrückung in Zeile 4 ist nicht korrekt. Alle Anweisungen, die zur Fahllunterscheidung in Zeile 2 gehören, müssen gleich (hier: 8 Leerzeichen bzw. 2x Tab) eingerückt sein. Der Editor zeigt folgende Fehlermeldung und zeigt die falsche Einrückung zusätzlich durch einen vorangestellten roten Strich in der betreffenden Zeile.
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.