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