Der Miniplan  (Mini-Ablaufplan):

ein  neuartiges,  einfaches  Flussdiagramm / Struktogramm
Inhalt: 1 Kurzbeschreibung 2 Beispiel 3 Aufbau eines Miniplans: 3.1 Zeichenvorrat 3.2 Baugruppen 3.3 Zusammenfügen von Baugruppen 3.4 Zusätzliche Symbole 4 Bewertung: 4.1 Optischer Vergleich von 3 Diagrammarten 4.2 Nachteile von Flußdiagramm und Struktogramm 4.3 Vorteile des Miniplans 5 Programm zur Ausgabe eines Miniplans 6 Dynamische Darstellung des Programmablaufs 7 Stilarten eines Miniplans 1 Kurzbeschreibung Der Miniplan ist eine neue Art von Flußdiagramm für Algorithmen der Strukturierten Programmierung [Prog. ohne GOTO]. Bei ihm sind grafische Darstellung und Programmtext nebeneinander angeordnet. Die lineare Anordnung der Programmzeilen bleibt erhalten. Das Diagramm ist leicht erfaßbar, platzsparend und sehr leicht automatisierbar. Zur Ausgabe auf Bildschirm oder Drucker ist kein Grafikmodus nötig. Damit bietet der Miniplan viele Vorteile gegenüber einem normalen Flußdiagramm oder Struktogramm. Auch eine bewegte Darstellung des Programmablaufs ist möglich, was besonders didaktisch interessant ist, sowie die Integration von Zählern ins Diagramm. 2 Beispiel Ein einfaches Beispiel zeigt alles Wesentliche eines Miniplans: | PROGRAM Beispiel | Datei öffnen .. | |---o WHILE NOT EOF | | Satz (8 Felder) von Datei lesen .. | | summe=0 | | | | CASE feld(1) | |--> IS 1: | | feld(2)=0 | | feld(3)=0 | |--> IS 2: | | feld(2)=1 | |--> IS 3: | | feld(3)=1 | v ENDCASE | | | | | |---o FOR i=4 TO 8 | | | 'Felder summieren: | | | summe=summe + feld(i) | |--- NEXT i | | | | PRINT summe |--- WEND | | END Obiges Beispielprogramm (teilweise in Pseudocode) tut folgendes: Von einer Datei werden in einer Schleife (WHILE - WEND) Sätze gelesen und gedruckt. Diese äußere Schleife enthält 2 weitere Kontrollstrukturen: Oben einen Verteiler (CASE - ENDCASE): je nach Inhalt von Feld 1 werden Feld 2 und Feld 3 des gerade gelesenen Satzes manipuliert. Unten eine Laufanweisung (FOR - NEXT): Die hinteren Felder des Satzes werden aufsummiert. Man sieht sofort: Der Programmtext ist nicht in die grafische Darstellung integriert (wie bei Flußdiagramm und Struktogramm), sondern steht rechts daneben: Jeder Programmzeile entspricht die links davon stehende Diagrammzeile. Die senkrechte Linie ganz links symbolisiert die oberste Programmebene. Rechts an sie angefügt ist ein hohes schmales Rechteck: Es symbolisiert die äußere Schleife. Sie enthält 2 weitere Kontrollstrukturen: Das kleine Rechteck symbolisiert die innere Schleife, die Pfeile den Verteiler. Geht man vom linken Rand des Miniplans, der Grundlinie, nach rechts und zählt die überquerten Kontrollstrukturen (Schleife / Auswahl), so erhält man die Tiefenschachtelung der Programmzeile. Man kann den Programmablauf als Weg im Miniplan nachvollziehen: Man beginnt oben und geht nach unten. In einer Schleife bewegt man sich im Uhrzeigersinn, nur an einem Kringel kann man zwischen erneutem Durchlauf oder Verlassen der Schleife wählen. Bei einer Auswahl werden v.o.n.u. alle Bedingungen (= Pfeile) geprüft. Ist eine Bedingung erfüllt, wird das folgende Progammstück (bis zum nächsten Pfeil) abgearbeitet, dann wird nach unten zum Ende des Verteilers gesprungen. 3 Der Aufbau eines Miniplans 3-1 Zeichenvorrat Zur Darstellung eines Miniplans auf einem Bildschirm oder Drucker benötigt man keinen Grafikmodus, sondern nur eine Festbreiten- schrift mit folgenden 6 Standard-Zeichen: Leerzeichen | senkrechter Strich - Minuszeichen o Kleinbuchstabe "o" v Kleinbuchstabe "v" > "größer"-Zeichen Man erzielt aber eine höhere Bildqualität (durchgehende Linien) des Miniplans, wenn auch grafische Sonderzeichen verfügbar sind: senkrechter Strich, waagrechter Strich, Ecken, Pfeil statt -> (Beispiel am Ende von Abschnitt 3.3) 3.2 Baugruppen Es gibt 3 Arten von Baugruppen: Grundlinie, Schleife, Auswahl. Sie alle werden senkrecht gedehnt auf die Länge des zugehörigen Programms bzw. Programmteils. Schleifen und Auswahlen gibt es in mehreren Variationen: | | Grundlinie des Programms oder Unterprogramms | ---o | | Schleife mit Test auf Verlassen am Anfang | | (Typ WHILE - DO oder FOR) | | --- --- Schleife mit Test auf Verlassen "mittendrin" | | (Typ DO -LOOP, Verlassen durch EXIT | o Anweisung; EXIT mehrfach möglich, | | auch in den anderen Schleifentypen) --- --- | | Schleife mit Test auf Verlassen am Ende | | (Typ REPEAT - UNTIL) | | ---o |--> | Auswahl Folge von Programmstücken (mindestens 1, | hier 3), von denen maximal 1 durchlaufen |--> wird. Jeder Pfeil markiert den Beginn | eines zur Wahl stehenden Programmstücks, |--> das v das Ende der Auswahl | v Die grafische Baugruppe "Auswahl" zeigt nur die Programmlogik, aber keine programmtechnischen Details: weder die Programmier- sprache noch die verwendeten Befehle (IF, IF - ELSE, CASE) sind daraus ersichtlich: Eine grafische Baugruppe "Auswahl" mit 1 Pfeil ist als Programm- text eine einfache IF - Anweisung, ohne ELSE. Oder ein Verteiler mit nur einem Ausgang, ohne ELSE. Eine Auswahl mit 2 Pfeilen ist als Programmtext eine zweiseitige IF - ELSE Anweisung oder ein Verteiler mit 2 Ausgängen (2 "normale", oder 1 "normaler" Ausgang und 1 ELSE - Ausgang). Eine Auswahl mit 3 oder mehr Ausgängen ist als Programmtext ein Verteiler mit ebensoviel Ausgängen (ELSE mitgezählt, falls vorh). Genauso zeigen die Schleifendarstellungen nur die Position des Tests auf Verlassen der Schleife, aber nicht immer den Typ des zugehörigen Programmbefehls: Eine Schleife mit Test am Anfang kann eine Zähl- oder Bedingungsschleife oder eine Kombination von beidem sein. 3.3 Zusammenfügen von Baugruppen | | | | |---o |--> | | | | | |--> |--- | | v | | Grundlinie + Schleife Grundlinie + Auswahl ---o ---o | | | | | | | |--> | |--- | | | | | | |--> | | | | | | |---o | v | | | | | | | | --- --- Schleife + Schleife Schleife + Auswahl Sich berührende Schleifen kann man mit sich berührenden Zahn- rädern vergleichen: Die kleinen laufen schneller und öfter um. |--> |--> | | | | |--> |--> | --- | |--> | | | | | | | | | |--> | ---o | v | | |--> |--> v v Auswahl + Schleife Auswahl + Auswahl Die Darstellungen von Schleife und Auswahl sind 5 Zeichen breit (Auswahl-Pfeilen folgt rechts 1 Leerzeichen). Jede Bau- gruppe überlappt die linke um 1 Zeichen, wobei aber Leerzeichen (linke Ecken von Schleifen) überlappte Zeichen nicht verdecken. Hier noch 3 kompliziertere Beispiele eines Miniplans: Links ein Miniplan mit maximaler Tiefe von 5 Strukturen; insgesamt enthält er 4 Schleifen und 3 Auswahlen. Die letzte "Auswahl" mit nur 1 Pfeil ist de facto eine einfache IF-Anweisung. In der Mitte das Beispiel vom Anfang dieses Artikels, ergänzt um eine Schleife im ersten Zweig der Auswahl. Rechts derselbe Plan in besserer Bildqualität (Grafik / grafischer Zeichensatz).

|
|
|
|
|--- 
|   |
|   |---
|   |   |
|   |   |
|   |---o
|   |
|   |
|   |
|   |
|   |---
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |-->
|   |   |
|   |   |    ---o
|   |   |   |   |
|   |   |   |   |
|   |   |   |   |-->            
|   |   |   |   |
|   |   |   |   |-->
|   |   |   |   v
|   |   |    ---
|   |   |
|   |   |-->
|   |   |
|   |   |
|   |   |
|   |   |
|   |   |   |-->
|   |   |   |
|   |   |   v
|   |   v   
|   |   |
|   |   |
|   |   |
|   |---o
|   |
|   |
|   |
|---o
|
|


|
|
|---o
|   |
|   |
|   |-->
|   |    ---o
|   |   |   |
|   |   |   |
|   |    ---
|   |-->
|   |
|   |-->
|   |
|   v
|   |
|   |---o
|   |   |
|   |   |
|   |---
|   |
|---
|
3.4 Zusätzliche Symbole Ein Miniplan zeigt die Struktur eines Programms, der Quellcode rechts daneben die Details. Es kann nützlich sein, Verbindungen zu anderen Programmteilen (Unterprogramme, Dateien) hervorzu- heben. Das kann man tun durch Symbole links neben der Miniplan- Grundlinie: | F | F markiert eine FILE-Operation | C | C markiert eine COMMON-Anweisung | + | + markiert einen UNTERPROGRAMM-Aufruf | |---o | | trotz nachgeordneter Kontrollstruktur: + | | Symbole liegen links der Grundlinie, |--- dann sind sie leicht zu finden | Wenn man solche Symbole verwendet, ist eine weise Beschränkung nötig, um den Miniplan nicht unübersichtlich zu machen. Am Bildschirm sollten solche Symbole ausblendbar sein. 4 Bewertung 4.1 Optischer Vergleich von 3 Diagrammarten Hier eine REPEAT - UNTIL Schleife als Flußdiagramm, Struktogramm und Miniplan: ______________| | | | ----------- | | Anweisung | Flußdiagramm ^ ----------- | | | _____|_____ |________/ Ende ? \ nein \___________/ | ja v _______________________ | | | | | Anweisung | Struktogramm | | | | ---------------------| | REPEAT UNTIL Ende | ----------------------- ___ REPEAT | | | | Anweisung Miniplan | | ---o UNTIL Ende Man sieht leicht: - Der Miniplan ist optisch am einfachsten und somit am schnellsten erfaßbar. - Nur beim Miniplan steht der Programmtext außerhalb des Diagramms, und seine lineare Anordnung bleibt erhalten. Beim Flußdiagramm wurde das Sonderzeichen ^ verwendet, das nicht in allen Zeichensätzen vorkommt. Das Sechseck um den Ausdruck sollte eigentlich eine Raute sein, aber die läßt sich schlecht mit den vorhandenen Zeichen darstellen. Unmöglich ist das bei den langen Schräglinien der hier nicht gezeigten IF- und CASE-Symbole eines Struktogramms, deren Neigungswinkel flach und variabel sind. 4.2 Nachteile von Flußdiagramm und Struktogramm Der große Vorteil von Ablaufdiagrammen: sie schaffen Übersicht. Das erleichtert den Programmentwurf, hilft Programmierfehler vermeiden und verringert die Einarbeitungszeit in fremde oder alte Programme. Aber die bekannten Flußdiagramme und Struktogramme haben viele Nachteile: - Die lineare Folge der Programmbefehle wird zerrissen. - Der grafische Aufwand ist hoch: Die vielen Linien und Kästchen sind bei Handskizzen lästig. Sie verschlechtern auch die optische Erfassbarkeit. - Der Platzbedarf ist zu hoch: Denn die Diagramme werden schon bei einfachen Programmen sehr breit. Deshalb werden die Kästchen für die Anweisungen zu schmal. - Eine automatische Erstellung der Diagramme ist aufwendig (Programmlogik; Grafikmodus zur Darstellung), entsprechende Programme deshalb selten. Handgemalte Diagramme aber sind arbeitsaufwendig, fehleranfällig, änderungsfeindlich und deshalb oft nicht auf dem neuesten Stand. - Aus diesen Gründen ist eine gleichzeitige Anzeige von Diagramm und Programmcode, z.B. bei der Programmerfassung, unmöglich. Diese Nachteile bewirken, daß Diagramme auf den unteren Stufen des Programmentwurfs meist nicht eingesetzt werden. 4.3 Die Vorteile des Miniplans Ein Miniplan weist keinen der oben erwähnten Nachteile auf: Die lineare Folge der Programmbefehle bleibt erhalten. (Hierin gleicht der Miniplan den wenig bekannten Strukturierten Ablauf- diagrammen von Schmitz und Hackstein [Zeitschrift ONLINE 10/1975], denen er auch sonst etwas ähnelt). Der grafische Aufwand ist gering: Das Beipiel am Anfang kann in 8 Sekunden von Hand gezeichnet werden (Striche durchgezogen). Die optische Erfaßbarkeit ist gut. Der Platzbedarf ist gering: Während z.B. ein Verteiler mit 8 Ausgängen ein Flußdiagramm oder Struktogramm sprengt, verbreitert er einen Miniplan nur um 4 Zeichen. Deshalb ist die parallele Anzeige von Miniplan und Programmtext auf einem Bildschirm oder DIN A5 - Blatt möglich. Ein Miniplan ist leicht automatisch darstellbar: Denn das Programm dafür ist kurz (siehe Kap. 5), und kein technischer Aufwand (Grafikmodus) ist nötig. Der Miniplan selbst wird nicht abgespeichert (wozu auch), sondern jedesmal neu aus dem Programmtext erzeugt und ist somit garantiert immer aktuell. Die sukzessive Darstellung eines Miniplans parallel zur Programmerfassung auf dem Bildschirm ist problemlos: Der Textcursor steht zu Beginn der Programmeingabe etwa in Spalte 10. Sobald eine Programmzeile eingetippt ist, wird links davon in derselben Zeile die zugehörige "Grafik" ausgegeben. Enthielt die Programmzeile Anfang (oder Ende) einer Kontrollstruktur, so steht der Textcursor in der nächsten Zeile anfangs 4 Spalten weiter rechts (oder links) als der Textanfang der Zeile darüber. Auch das Ändern eines Miniplans ist problemlos: Werden Programm- zeilen gelöscht, so entfallen einfach die zugehörigen Diagramm- teile in diesen Zeilen, der Miniplan wird vertikal verkürzt. Werden Programmzeilen hinzugefügt, so wird quasi das Diagramm an dieser Stelle waagrecht aufgetrennt und ergänzt. Weil Ändern problemlos ist, braucht man anfangs nur den Programm- rahmen entwerfen: Man gibt nur die Kontrollstrukturen und Kommentare ein. Später werden die Kommentare durch echte Anweisungen ergänzt oder ersetzt. Es ist wirklich ein großer Vorteil für programmierende Experten wie Laien, die Programmstruktur ständig vor Augen zu haben. Meiner Ansicht nach ist nur der Miniplan voll praxistauglich. Auch für die weiter unten beschriebene dynamische Darstellung des Programmablaufs ist ein Miniplan besser geeignet als sein direkter Konkurrent, das Struktogramm. 5 Programm zur Ausgabe eines Miniplans Es liest ein Programm von einer Datei und gibt den Programmtext und den zugehörigen Miniplan nebeneinander aus. Das Programm ist in der Sprache des Anfangsbeispiels geschrieben. (Die 3 Kommentare sind noch durch echte Anweisungen zu ersetzen). Auch das zu listende Programm muß in dieser Sprache geschrieben sein (sonst muß der Algorithmus entsprechend angepaßt werden, was aber meist einfach ist). In ihr beginnt und endet jede Kontrollstruktur mit einem eigenen Schlüsselwort. Und in einer Programmzeile beginnt oder endet höchstens 1 Kontrollstruktur. Deshalb ist der Analyse-Algorithmus besonders einfach. (Es wird unterstellt, daß das zu listende Programm syntaktisch richtig ist, daß z.B. zu jedem REPEAT ein UNTIL existiert). | PROGRAM Miniplan | STRING Wort1 | GLOBAL INT k, STRING Graf(20), Grafzeile, Programmzeile | k = 0 | 'öffne Datei, die den Programmtext enthält | |---o WHILE NOT EOF | | 'lies Programmzeile von Datei | | 'Wort1 = erstes Wort dieser Zeile | | | | CASE Wort1 | |--> IS "WHILE", "FOR": | | k = k + 1 | | Graf(k) = " ---o"; Zeile_aus | | Graf(k) = "| |" | |--> IS "REPEAT", "DO": | | k = k + 1 | | Graf(k) = " --- "; Zeile_aus | | Graf(k) = "| |" | |--> IS "EXIT": | | Graf(k) = "| o"; Zeile_aus | | Graf(k) = "| |" | |--> IS "WEND", "NEXT", "LOOP": | | Graf(k) = " --- "; Zeile_aus | | k = k - 1 | |--> IS "UNTIL": | | Graf(k) = " ---o"; Zeile_aus | | k = k - 1 | |--> IS "CASE", "IF": | | k = k + 1 | | Graf(k) = "| "; Zeile_aus | |--> IS "IS", "THEN", "ELSE": | | Graf(k) = "|--> "; Zeile_aus | | Graf(k) = "| " | |--> IS "ENDCASE", "ENDIF": | | Graf(k) = "v "; Zeile_aus | | k = k - 1; | |--> ELSE: Zeile_aus | v ENDCASE | | |--- WEND | END Das Unterprogramm "Zeile_aus" gibt eine Zeile aus: Zunächst linksbündig den Diagrammteil der Zeile, dann 8 Leerzeichen, dann den Programmtext dieser Zeile: | SUB Zeile_aus | | Grafzeile_zusammensetzen | PRINT Grafzeile;" ";Programmzeile | | END SUB Die Variable k gibt für die auszugebende Programmzeile die Anzahl der Kontrollstrukturen an. Deren grafische Darstellungen werden im String-Feld "Graf" gespeichert. Diese Grafikteile fügt das Unterprogramm "Grafzeile_zusammensetzen" zum String "Grafzeile" zusammen. Dabei überlappt jeder Grafikteil den linken um 1 Zeichen; aber ein Leerzeichen bleibt "durchsichtig", es verdeckt das darunterliegende Zeichen nicht (siehe Abschnitt 3.3). | SUB Grafzeile_zusammensetzen | STRING Hilf '5 Zeichen lang | | Grafzeile = "|" | |---o FOR i = 1 TO k | | Hilf = Graf(i) | | | | IF Left$(Hilf) = " " | |--> THEN | | Grafzeile = Grafzeile + RIGHT$(Hilf,4) | |--> ELSE | | L = LEN(Grafzeile) - 1 | | Grafzeile = LEFT$(Grafzeile,L) + Hilf | v ENDIF | | |--- NEXT i | END SUB 6 Dynamische Darstellung des Programmablaufs Ein Miniplan zeigt, genau wie andere Ablaufdiagramme, die Pro- grammstruktur. Doch in dieser Struktur sind an Wegen und Werten verschiedene Programmläufe möglich. Oft wäre es interessant, durchlaufene Programmteile hervorzuheben, oder gar den Programm- ablauf bewegt darzustellen. Auch das ist im Miniplan möglich:
Der Programmablauf kann durch einen
roten Punkt dargestellt werden, der
sich durch das Diagramm bewegt - in
Zeitlupe oder schrittweise

Die gerade aktiven Kontrollstrukturen
könnten farblich anders  (hier blau)  
dargestellt werden als der restliche
Miniplan.    In verschiedenen Farben
könnte man auch durchlaufene / nicht
durchlaufene Programmteile zeigen

Auch Zähler können eingebaut werden
Solche Darstellungen sind didaktisch wertvoll und auch zum Testen von Programmen nützlich. Sie benötigen aber Software - Aufwand: Einen Programminterpreter, der Einzelschritt (heute Standard) oder Zeitlupe ermöglicht, den Miniplan ausgibt und entsprechend dem Programmablauf farblich verändert, und ggf. Zähler anzeigt, wozu er Statistiken führen muß. Gemessen am Gesamtaufwand eines Interpreters wäre der Aufwand aber gering. Doch ist eine solche dynamische Darstellung nur eine Zusatzoption, die nicht den Blick dafür verstellen sollte, daß ein statischer Miniplan sehr einfach, übersichtlich und leicht zu erstellen ist. 7 Verschiedene Stilarten eines Miniplans Unten links ein Diagramm mit einer Auswahl und 3 Schleifen (Ausgang am Anfang, Mitte, Ende). Daneben einige optisch leicht verschiedene Diagramme, die aber per Definition dasselbe bedeuten.

|
|
|
|---o
|   |
|   |
|   |
|   |-->
|   |    ---
|   |   |   |
|   |    ---o
|   |-->
|   |
|   |-->
|   |
|   v
|   |
|   |
|   |---
|   |   |
|   |   o
|   |   |
|   |---
|   |
|   |
|---
|
|


|
|
|
|---o
|   |
|   |
|   |
|   |--
|   |    ---
|   |   |   |
|   |    ---o
|   |--
|   |
|   |--
|   |
|   +
|   |
|   |
|   |---
|   |   |
|   |   o
|   |   |
|   |---
|   |
|   |
|---
|
|


|
|
|
|---o
|   |
|   |
|   |
|   |--
|   |    ---
|   |   |   |
|   |    ---o
|   |--
|   |
|   |--
|   |
|   -
|   |
|   |
|   |---
|   |   |
|   |   o
|   |   |
|   |---
|   |
|   |
|---
|
|


|
|
|
|---o
|   |
|   |
|   :
|   :-->
|   :    ---
|   :   |   |
|   :    ---o
|   :-->
|   :
|   :-->
|   :
|   :
|   |
|   |
|   |---
|   |   |
|   |   o
|   |   |
|   |---
|   |
|   |
|---
|
|


|
|
|
|---o
|   |
|   |
|   |
|   |...
|   |  . ---
|   |  .|   |
|   |  . ---o
|   |...
|   |  .
|   |...
|   |  .
|   |...
|   |
|   |
|   |---
|   |   |
|   |   o
|   |   |
|   |---
|   |
|   |
|---
|
|

standard       
ohne Pfeilspitzen
minimal       
Auswahl punktiert
systematisch
Vor- und Nachteile der verschiedenen Lösungen: standard: gute optische Unterscheidung von Schleife und Auswahl ohne Pfeilspitzen: grafisch einfacher, schnell zu zeichnen, manchmal übersichtlicher minimal: benötigt nur die Zeichen - | o ,oder nur - | + Auswahl punktiert: die Auswahl-Grundlinie ist punktiert systematisch: alle Kontrollstrukturen (Schleife und Auswahl) sind als Kästchen dargestellt (Auswahl punktiert): unübersichtlich
Die Benutzung der der hier beschriebenen Dinge ist frei. Auch im Englischen gilt die Bezeichnung Miniplan (Aussprache leicht geändert) Man könnte den Miniplan auch Terassendiagramm nennen: wenn man ihn um 90 Grad nach links dreht (sinnvoll bei Schreibrichtung v.u.n.o.), ähnelt er Terassen. Autor und Erfinder: Leonhard Heinzmann Homepage Stand: 2.8.04