Struktogramme (Nassi-Shneiderman-Diagrams) und das Latexpaket
Transcrição
Struktogramme (Nassi-Shneiderman-Diagrams) und das Latexpaket
Struktogramme (Nassi-Shneiderman-Diagrams) und das Latexpaket nassi.sty Herbert Voß 28.11.2000 Zusammenfassung Struktogramme sind eine mögliche Form zur Beschreibung eines Algorithmus. Ein Aufsatz oder ein Programmablaufplan (PAP) andere Möglichkeiten. Entwckelt von Nassi und Shneiderman sind Struktogramme eine elegante Form der strukturierten Programmierung um Algorithmen anschaulich darstellen zu können. 1.1 Sequenz Nassi-Shneiderman — Sequenz-Symbol Inhaltsverzeichnis 1 Darstellung 1.1 Sequenz . . . . . . . . . . . 1.2 If-Verzweigung . . . . . . . 1.3 While (For)-Schleife . . . . 1.4 Repeat (Do) - Until (While) 1.5 Case-Anweisung . . . . . . . Block (Anweisung) . . . . . . . . . . . . . . . . . . . . 2 Beispiele 2.1 Quadratische Gleichung . . . . . . 2.2 Bubble Sort . . . . . . . . . . . . . 1 1 Befehl: 1 1 1 \ ACTION { - Block - } 1 Jede Anweisung, die keine logische Bedingung dar2 stellt oder mit einem anderen Schlüsselwort be2 ginnt, muss in einen Action-Block geklammert werden. 2 2 1.2 If-Verzweigung 2 Nassi-Shneiderman — If-Verzweigung Darstellung Z Latex stellt mit dem Macro nassflow1 eine mehr oder weniger elegante Methode zum Erstellen derartiger Struktogramme zur Verfügung. Z J ZZ Then-Block Achtung: Die Bezeichnung Block steht für jede mögliche Kombination aus allen im folgenden angegebenen Struktogrammblöcke. Diese können beliebig kombiniert werden, müssen allerdings mit einem Schlüsselwort beginnen. Else-Block Befehl: 1 2 3 4 5 6 1 1 logische Bedingung \ IF { logische Bedingung } % \ THEN {\ ACTION { Then - Block } % } \ ELSE {\ ACTION { Else - Block } % }% \ ENDIF % N 1.3 While (For)-Schleife \ ACTION { statement 2 to do } % }% \ WHEN { condition 3}{ % \ ACTION { statement to do } % }% }\ ENDCASE % 7 8 9 Nassi-Shneiderman — While(Do)-Schleife 10 11 12 logische Bedingung 2 Beispiele Schleifen-Block 2.1 Befehlsfolge: \ STRUCT { Nassi - Shneiderman }{ While ( Do ) Schleife }{ % \ WHILE { logische Bedingung }{ % \ ACTION { Schleifen - Block } }\ ENDWHILE % 1 2 3 4 1.4 Repeat (Do) - Until (While) Quadratische Gleichung Als einführendes Beispiel sei die Lösung einer quadratischen Gleichung angegeben: Mathematische Algorithmen — pq-Formel Einlesen der Koeffizienten a, b, c der quadratischen Gleichung ax2 + bx + c = 0 Nassi-Shneiderman — Repeat (Do)-Until (While) 2 c b Schleife − Diskriminate bestimmen: D = 2a a (entspricht dem Radikanden) Schleifen-Block Z Z logische Bedingung J ZZ Befehlsfolge: x1/2 = − \ REPEAT { % \ ACTION { Schleifen - Block } }\ UNTIL {\ quad logische Bedingung } % 1 2 3 (D ≥ 0) ? √ b ± D 2a N keine Lösung in R Befehlsfolge: 1 \ nassiwidth =\ columnwidth \ setiftext { J }{ N } 2 1.5 Case-Anweisung 3 Aus praktischen Gründen weicht die Case-Anweisung 4 erheblich von den sonst allgemein üblichen Dar5 stellungen in Treppenform ab. Nassi-Shneiderman — Case-Anweisung 6 7 Z Z Z case item Z condition 1 condition 2 8 9 condition 3 10 11 statement to statement 1 do to do statement to do 12 \ STRUCT { Mathematische Algorithmen }{ pq Formel }{ \ ACTION { Einlesen der Koeffizienten $ a ,b , c $ der quadratischen Gleichung $ ax ^{2}+ bx + c =0$} \ ACTION { Diskriminate bestimmen : ${\ displaystyle D =\ left (\ frac { b }{2 a }\ right ) ^{2} -\ frac { c }{ a }}$\ qquad ( entspricht dem Radikanden ) } \ IF {($ D \ geq 0$) ?} \ THEN {\ ACTION {${\ displaystyle x _{1/2}= -\ frac { b }{2 a }\ pm \ sqrt { D }}$} } \ ELSE {\ ACTION { keine Lösung in $\ mathds { R }$ } }\ ENDIF } statement 2 to do Befehlsfolge: 1 2 3 4 5 6 \ CASE { case item }{ % \ WHEN { condition 1}{ % \ ACTION { statement to do } % }% \ WHEN { condition 2}{ % \ ACTION { statement 1 to do } % ∼voss/nassi.tex 2 2.2 Bubble Sort Sortierverfahren — Optimiertes Bubble Sort Feld mit n zufälligen Zahlen füllen sortiert = false ende = n-2 Solange wie "nicht sortiert" sortiert = true für i=0 bis ende Z Z feld[i] > feld[i+1] ? J ZZ N Tausche feld[i] mit feld[i+1] sortiert = false ende = ende-1 ∼voss/nassi.tex 3