Ebenso wie es viele Sprachen gibt, in denen man ein Bier bestellen kann, oder mehrere Programmiersprachen um ein Programm zu erstellen, gibt es auch mehrere Möglichkeiten, einen Algorithmus zu formulieren.
Die wichtigsten sind:
Als Beispiel hier der Euklidsche Algorithmus2.4 aus [Knuth 1], S. 2,
mit dessen Hilfe der größte gemeinsame Teiler
(ggT) zweier gegebener positiver ganzer Zahlen und bestimmt
werden kann:
Dabei wird jeder Schritt eines Algorithmus in einem Rahmen dargestellt, wobei der Rahmen je nach Art des Schritts (auszuführende Anweisung, Fallunterscheidung etc.) unterschiedliche Formen annehmen kann. Die einzelnen Schritte werden sinnvoll in einem Bild angeordnet und entsprechend ihrer Ausführungsreihenfolge mit Linien oder besser Pfeilen verbunden.
Das obige Beispiel des Euklidschen Algorithmus sieht bei [Knuth 1]
so aus:
Mithilfe solcher Flußdiagramme (flow chart) lassen sich praktisch alle Algorithmen darstellen, weshalb sie aber auch inzwischen weitgehend verpönt sind; denn durch die freie Platzierung der einzelnen Elemente und die Möglichkeit, Pfeile beliebig zu ziehen, kann man einerseits sehr unübersichtliche Algorithmen darstellen, andererseits auch alleine die Darstellung eines vielleicht vernünftigen Algorithmus unübersichtlich gestalten (,,Spaghetticode``).
Welche Rahmen um die einzelnen Symbole gezeichnet werden, wird etwas uneinheitlich gehandhabt. Bei den Büchern von Knuth werden, wie in Abbildung 2.2 gezeigt, um die eigentlichen Anweisungen gerade Rechtecke gezeichnet, und Fallunterscheidungen stehen in einem zigarrenförmigen abgerundeten Rahmen.
Üblicher ist aber eine andere Kennzeichnung, nämlich ebenfalls Rechtecke um Anweisungen, aber auf einem Eck stehende Rauten für Fallunterscheidungen. Abgerundete Rahmen werden für den Start- und einen oder gegebenenfalls mehrere Endpunkte des Algorithmus verwendet. Der Euklidsche Algorithmus sieht dann so aus:
Bei solchen Flußdiagrammen gibt es für Schleifen keine besonderen Symbole; man muß Initialisierung, Schleifenbedingung, Schleifenrumpf und gegebenenfalls Reinitialisierung (Weitersetzen des Schleifenzählers beispielsweise) aus den gezeigten einzelnen Elementen zusammensetzen. Alleine dadurch wird die Darstellung schnell unübersichtlich.
Die Symbole sind in DIN 66001 genormt (mit weiteren Symbolen, die hier nicht erwähnt werden, beispielsweise zur Ein- und Ausgabe).
Hier werden rechteckige Grundelemente für jeweils eine Anweisung, eine Fallunterscheidung, eine Schleife etc. direkt so aneinandergefügt, daß sich für den dargestellten Algorithmus insgesamt ein rechteckiges Diagramm ergibt. Der Start eines Diagramms ist immer am oberen Rand; das Ende zumindest am unteren Rand (oder in einem besonderen Abbruchelement irgendwo innerhalb des Diagramms).
In einigen der Bauelemente kommen in der ,,normalen`` Darstellung schräge Linien vor. Da dies manchmal schlecht zu zeichnen ist (beispielsweise beim Zusammensetzen aus Buchstaben), gibt es jeweils eine Ersatzdarstellung ohne schräge Linien. Diese Ersatzdarstellung ist insbesondere auch geeignet, direkt im Quelltext als Kommentar angelegt zu werden!
Es gibt folgende Grundelemente (jeweils links in Normal- und rechts in Ersatzdarstellung):
Eine Anweisungsfolge kann überall eingesetzt werden, wo auch eine einfache Anweisung erlaubt ist.
Falls vorhanden, wird anschließend die Anweisung A3 ausgeführt.
Nach der Abarbeitung eines Elements wird das darunterliegende, gleich breite Element verwendet. Eine Ausnahme davon sind die einfache Fallunterscheidung und die Mehrfachauswahl. Hier wird jeweils nur einer der darunterliegenden Teilblöcke weiterverfolgt.
Mit einem Nassi-Shneiderman-Diagramm lassen sich nicht alle Algorithmen darstellen; es ist nämlich nicht möglich beliebige Sprünge von einer Stelle eines Algorithmus zu einer anderen Stelle auszudrücken.
Da dies aber ohnehin als sehr unelegant gilt, werden Struktogramme gerne verwendet: elegant formulierte Algorithmen (also solche ohne wilde Sprünge) lassen sich damit sehr gut lesbar darstellen. Zudem ist die Umsetzung einer solchen Darstellung in jede moderne Programmiersprache leicht und elegant.
www.wachtler.de