Struktogramme mit LaTeX: Unterschied zwischen den Versionen
Henn (Diskussion | Beiträge) |
Henn (Diskussion | Beiträge) |
||
Zeile 94: | Zeile 94: | ||
\task{Beschreibung n. Task} | \task{Beschreibung n. Task} | ||
\inparallelend | \inparallelend | ||
[[Datei:Strukto parallel.png|rahmenlos|393x393px]] | |||
=== Beispiel === | === Beispiel === | ||
Dieses Struktogramm | Dieses Struktogramm | ||
[[Datei: | [[Datei:Strukto Bsp.png|alternativtext=Beispieldarstellung eines Programmes mittels eines Struktorgramms|rahmenlos|397x397px]] | ||
sieht dann im Quelltext aus wie folgt: | sieht dann im Quelltext aus wie folgt: | ||
Zeile 104: | Zeile 105: | ||
\usepackage{struktex} | \usepackage{struktex} | ||
\begin{struktogramm}(100,50) | \begin{struktogramm}(100,50) | ||
\while{for | \while{for i:= n down to 2} | ||
\while{for | \while{for j:= 2 up to i} | ||
\ifthenelse[15]{2}{2}{$(A[j-1] \geq A[j]$}{yes}{no} | \ifthenelse[15]{2}{2}{$(A[j-1] \geq A[j]$}{yes}{no} | ||
\assign{tausche \(A[j-1]\) mit \(A[j]\)} | \assign{tausche \(A[j-1]\) mit \(A[j]\)} |
Version vom 9. Januar 2023, 12:06 Uhr
Aufbau
Die Struktur ist recht einfach gehalten. Umschlossen wird das Programm stets durch
\begin{struktogramm}(Breite(in mm),Höhe(in mm))[Überschrift]
und
\end{struktogramm}
Die Zahlenangaben in der runden Klammer gibt die Breite und die Höhe der Grafik in Millimetern an. Um sicher zu gehen, dass alles hineinpasst lässt sich hier auch immer mit großzügigen Angaben arbeiten, 150,150 ist für die meisten mehr als ausreichend. Die Überschrift in eckigen Klammern ist optional und muss nicht angegeben werden.
Kasten für Operationsbeschreibungen
Mit assign wird ein einfacher Kasten erzeugt. Der Text darin wird linksbündig gesetzt. Möchte man eine zentrierte Ausrichtung, so kann man dies mit der Ergänzung \mbox{}\hfil erreichen.
\assign{Inhalt}
Variablendeklarationen
Variablendeklinationen lassen sich mit in einen Kasten einfügen:
\assign{ \begin{declaration} \description{Variablenname}{Variablenbeschreibung} \description{Variablenname}{Variablenbeschreibung} \end{declaration} }
Eine weitere Spezifiziertung ist möglich (Parameter, lokale Variablen und globale Variablen), wer mehr dazu wissen möchte, kann dies in der Dokumentation Dokumentation des Paketes ab Seite 13 nachlesen.
Unterprogrammsprung
\sub{Inhalt}
Aussprung aus dem Programm
\return{Inhalt}
Hier ein Beispiel:
\begin{struktogramm}(95,20) \sub{Liste sortieren} \return{Listenkopf zurückgeben} \end{struktogramm}
While, Until und Forever - Schleifen
\while{Bedingung} \assign{Schleifeninhalt} \whileend
\until{Bedingung} \assign{Schleifeninhalt} \untilend
\forever \assign{Schleifeninhalt} \exit{Exit} \foreverend
\forallin{$\forall l \in L$} \assign{gib l) aus} \forallinend
If-Schleifen
\ifthenelse[30]{1}{1}{Wahrheitsprüfung}{\sTrue}{\sFalse} \assign{Wenn ja...} \change \assign{Wenn falsch, dann...} \ifend
Bei If-Schleifen ist der Wert in den eckigen Klammern hinter \ifthenelse etwas davon abhängig, wie viel Text in der Bedingung steckt. Hier wird ggf. visuelle Kontrolle benötigt. Die Angaben in den geschweiften Klammern bezeichnen das Verhältnis des Wahr und Falsch Dreiecks - hier wurde ein 1:1-Verhältnis gewählt, möchte man in einem der Bereiche noch weitere Subs oder ähnliches einfügen, kann eine Anpassung sinnvoll sein.
Case-Konstrukt
\begin{struktogramm}(95,50) \case{5}{3}{Fallprüfung}{0} \assign{Ausgabe: Fall 0} \switch{1} \assign{Ausgabe: Fall 1} \switch{2} \assign{Ausgabe: Fall 2} \caseend \end{struktogramm}
Hier ist nur der Fall dargestellt, dass eine Diagonale über die unterschiedlichen Fälle gezeichnet wird. Dabei bedeutet:
\case{Höhe}{Anzahl der Fälle}{Bedingung}{Text des 1. Falles} \switch{Text des 2. Falles} Unterstruktogramm ...
Parallele Algorithmen
Der Makro \inparallel und die zugehörigen Makros \task und \inparallelend ermöglichen die Darstellung paralleler Verarbeitung in einem Programm. Die Syntax lautet:
\inparallel{Anzahl paralleler Tasks}{Beschreibung 1. Task} \task{Beschreibung 2. Task} ... \task{Beschreibung n. Task} \inparallelend
Beispiel
Dieses Struktogramm
sieht dann im Quelltext aus wie folgt:
\documentclass{article} \usepackage{struktex} \begin{struktogramm}(100,50) \while{for i:= n down to 2} \while{for j:= 2 up to i} \ifthenelse[15]{2}{2}{$(A[j-1] \geq A[j]$}{yes}{no} \assign{tausche \(A[j-1]\) mit \(A[j]\)} \change \ifend \assign{\mbox{}\hfil print (A)} \whileend \whileend \end{struktogramm}