Exkurs - 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
	anschließend 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.

Beispiel - Kara-Welt vorher / nachher

Kara und seine Welt - vorher Kara und seine Welt - nachher

Beispiel - Kara-Welt vorher / nachher

Kara und seine Welt - vorher Kara und seine Welt - 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. Findest du ihn?

Struktogramm mit Fehlern

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:

Fehlermeldung

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:

Fehlermeldung

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.

X

Fehler melden

X

Suche