Nassi-Shneiderman-Diagramm

Programmablaufplan
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 21. Januar 2006 um 12:19 Uhr durch 89.50.178.108 (Diskussion) (Exklusivität). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Ein Nassi-Shneiderman-Diagramm (NS-Diagramm) ist eine Entwurfsmethode für die strukturierte Programmierung. Es ist genormt nach DIN 66261. Benannt wurde es nach seinen Vätern, Dr. Ike Nassi und Dr. Ben Shneiderman. Da NS-Diagramme Programmstrukturen darstellen, werden sie auch als Struktogramme bezeichnet.

Die Methode zerlegt das Gesamtproblem, das man mit dem gewünschten Algorithmus lösen will, in immer kleinere Teilprobleme bis schließlich nur noch elementare Grundstrukturen wie Sequenzen und Kontrollstrukturen zur Lösung des Problems übrig bleiben. Diese können dann durch ein NS-Diagramm oder einen Programmablaufplan (PAP) visualisiert werden.

Die beiden Autoren konnten mit ihren Diagrammen nachweisen, dass in keinem Algorithmus ein unbedingter Sprung (Goto) benötigt wird.

Sinnbilder nach DIN66261

Die nachfolgenden Strukturblöcke können z.T. ineinander geschachtelt werden. Das aus den unterschiedlichen Strukturblöcken zusammengesetzte Struktogramm ist im Ganzen rechteckig, d.h. genauso breit wie sein breitester Strukturblock.

Linearer Ablauf

 
Anweisung

Jede Anweisung wird in einen rechteckigen Strukturblock geschrieben.

Die Strukturblöcke werden nacheinander von oben nach unten durchlaufen.

Leere Strukturblöcke sind nur in Verzweigungen zulässig.

Verzweigung (Alternative)

Einfache Auswahl

 
Einfache Auswahl

Nur wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen. Ein Anweisungsblock kann aus einer oder mehreren Anweisungen bestehen. Trifft die Bedingung nicht zu (falsch), wird der Durchlauf ohne eine weitere Anweisung fortgeführt (Austritt unten).

Zweifache Auswahl

 
Zweifache Auswahl

Wenn die Bedingung zutreffend (wahr) ist, wird der Anweisungsblock 1 durchlaufen. Trifft die Bedingung nicht zu (falsch), wird der Anweisungsblock 2 durchlaufen. Ein Anweisungsblock kann aus einer oder mehreren Anweisungen bestehen. Austritt unten nach Abarbeitung des jeweiligen Anweisungsblocks.

Mehrfachauswahl

 
Mehrfachauswahl

Auch "verschachtelte" Auswahl genannt, da eine weitere Bedingung folgt. Die Verschachtelung ist ebenso im Nein-Fall (noch) möglich.

Fallauswahl

 
Fallauswahl

Besonders bei mehr als drei abzuprüfenden Bedingungen geeignet. Der Wert von "Variable" kann bedingt auf Gleichheit wie auch auf Bereiche (größer/kleiner bei Zahlen) geprüft werden und der entsprechend zutreffende "Fall" mit dem zugehörigen Anweisungsblock wird durchlaufen.

Wiederholung (Iteration)

Zählergesteuerte Schleife

 
Zählergesteuerte Schleife

Wiederholungsstruktur, bei der die Anzahl der Durchläufe festgelegt ist. Als Bedingung muss eine Zählvariable angegeben und mit einem Startwert initialisiert werden. Ebenso muss ein Endwert und die (Zähl-)Schrittweite angegeben werden. Nach jedem Durchlauf des Schleifenkörpers (Anweisungsblock 1) wird die Zählvariable um die Schrittweite inkrementiert (bzw. bei negativer Schrittweite dekrementiert) und mit dem Endwert verglichen. Ist der Endwert überschritten, wird die Schleife verlassen.

Abweisende (kopfgesteuerte) Schleife

 
Abweisende (kopfgesteuerte) Schleife

Wiederholungsstruktur mit vorausgehender Bedingungsprüfung. Der Schleifenkörper (Anweisungsblock 1) wird nur durchlaufen, wenn (und solange) die Bedingung zutreffend (wahr) ist.

Diese Symbolik wird auch für die Zählschleife (Anzahl der Durchläufe bekannt) benutzt.

Nicht abweisende (fußgesteuerte) Schleife

 
Abweisende (fußgesteuerte) Schleife

Wiederholungsstruktur mit nachfolgender Bedingungsprüfung. Der Schleifenkörper (Anweisungsblock 1) wird mindestens einmal durchlaufen, auch wenn die Bedingung von Anfang an nicht zutreffend (falsch) war.

Endlos-Schleife

 
Endlos-Schleife

Kann allenfalls durch einen Aussprung (break) verlassen werden.

Aussprung

 
Aussprung

Der Aussprung (break) stellt das dar, was Nassi und Shneiderman mit den Struktogrammen eigentlich vermeiden wollten: Die Sprunganweisung (siehe oben: unbedingter Sprung Goto).

Aufruf

 
Aufruf

Symbolik zum Aufruf eines Unterprogramms bzw. einer Prozedur oder Funktion. Nach Durchlauf dieser wird genau zu der aufrufenden Stelle zurückgesprungen und der nächstfolgende Strukturblock durchlaufen.


Füllregeln

Allgemeingültigkeit

Struktogramme sollten keine programmiersprachenspezifische Befehlssyntax enthalten. Sie müssen so programmiersprachenunabhängig formuliert werden, dass die dargestellte Logik einfach zu verstehen und als Codiervorschrift in jede beliebige Programmiersprache umgesetzt werden kann.

Deklaration

Ursprünglich für prozedurale Programmiersprachen entwickelt, bildete man in Struktogrammen nur die Prozedur und keine Deklarationsbereiche von Variablen und Konstanten ab (einfaches Struktogramm). Dadurch ist jedoch nicht sofort deutlich, welcher Datentyp einer Variablen zugeordnet werden muss. Die Deklaration von Variablen und Konstanten ist im ersten Anweisungsblock vorzunehmen. Diese NS-Diagramme bezeichnet man als erweiterte Struktogramme.

Exklusivität

Jede Anweisung erhält einen eigenen Strukturblock (Sinnbilder nach DIN 66261). Selbst mehrere Anweisungen gleicher oder ähnlicher Art dürfen nicht in einem Strukturblock zusammengefasst werden.

Jede Anweisung muss mindestens aus einer Zuweisung bestehen (z.B. Zielvariable := Zielvariable * AndereVariable). Eine Zuweisung wird durch einen Doppelpunkt, gefolgt von einem Gleichheitszeichen dargestellt und ist von einem Vergleich mit einem Gleichheitszeichen in einer Kontrollstruktur zu unterscheiden. Das Ziel einer Anweisung steht immer links vom Zuweisungszeichen. Rechts davon steht die Quelle.

Über jedes Struktogramm gehört ein Name, um die Identifikation durch Ereignis- oder (Unter-)Programmaufrufe gewährleisten zu können.

Praxisrelevanz

Wirtschaft

In der Softwareentwicklung werden Nassi-Shneiderman-Diagramme sehr selten eingesetzt, da normaler Programmcode einfacher zu schreiben und zu verändern ist: Korrigiert man einen Fehler oder macht eine Ergänzung, muss man ein NS-Diagramm i.a. komplett neu zeichnen. Daher werden dort (falls es sich um Softwareentwicklung mit einer objektorientierten Sprache handelt) heutzutage zumeist UML-Diagramme eingesetzt, für die Editoren existieren, die Änderungen am Code unmittelbar im Diagramm abbilden können.

Bildung

Im Informatik-Unterricht der Sekundarstufe II werden Struktogramme dagegen verwendet, damit Schüler den Aufbau logischer Abläufe, die für die Programmierung nötig sind, trainieren können. Die Erstellung von Struktogrammen aufgrund von Beschreibungen betrieblicher Problemstellungen, die wegen wiederkehrender gleicher Vorgehensweise automatisiert werden können, ist immer noch Bestandteil vieler schulischer Abschlussprüfungen.

Beispieldiagramme

Einfaches Struktogramm

Das folgende Beispiel zeigt ein Diagramm für die Berechnung des größten gemeinsamen Teilers mit dem euklidischen Algorithmus.

als Nassi-Schneiderman-Diagramm ... ... und in Pascal:
 
Beispiel eines Nassi-Shneiderman Diagramms
PROGRAM GGT(Input,Output);
   VAR a,b: Integer;
BEGIN
   ReadLn(a,b);
   WHILE (a>0) AND (b>0) DO
      IF a>b THEN
         a:=a-b
      ELSE
         b:=b-a;
   IF b=0 THEN
      WriteLn(a)
   ELSE
      WriteLn(b)
END.

Erweitertes Struktogramm

 
Beispiel eines erweiterten N-S Diagramms

... und die Umsetzung in VBA:

 Option Explicit
 Private Sub btnZensur_Click()
   Dim intZensur As Integer, strZensur As String
   intZensur = InputBox("Geben Sie die Zensur als Zahl ein.")
   Select Case intZensur
      Case 1: strZensur = "sehr gut"
      Case 2: strZensur = "gut"
      Case 3: strZensur = "befriedigend"
      Case 4: strZensur = "ausreichend"
      Case 5: strZensur = "mangelhaft"
      Case 6: strZensur = "ungenügend"
      Case Else: strZensur = "ungültig"
   End Select
   MsgBox "Ihre eingegebene Zensur in Worten: " & strZensur
 End Sub

Siehe auch