Struktogramme mit LaTeX: Unterschied zwischen den Versionen

Aus Augenbit

K
 
(28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieses Struktogramm
== Benötigte Programme ==
[[Datei:Struktogramm.png|alternativtext=Struktogramm mit einfacher Fallunterscheidung|rahmenlos|415x415px]]
Auch wenn wir in unserem Fachbereich LaTeX nur selten kompiliert nutzen, kann es bei diesem Thema sinnvoll sein, sich eine funktionsfähige Kompilierumgebung einzurichten. Für Windows kann wahlweise die MikTeX oder TexLive Distribution genutzt werden, welche heruntergeladen und installiert werden muss. Als Editor nutze ich selbst gerne den TeX-Maker, welcher auch mit Screenreader gut nutzbar ist (zumindest JAWS und NVDA). Einrückungen werden auf der Zeile angezeigt und über das Menü Benutzer/Wortvervollständigung lassen sich leicht neue Befehle mit Autovervollständigung hinzufügen.
sieht im Quelltext aus wie folgt:
 
\documentclass{article}
Das Kompilieren in PDF erfolgt über einen Befehlsaufruf und eine sehende Assistenz kann in einem zweiten Fenster direkt das Ergebnis überprüfen.
\usepackage{struktex}
 
\begin{struktogramm}(100,50)
In der Präambel muss das Paket struktex eingebunden werden. Dazu einfach nach dem Festlegen der Dokumentklasse \usepackage{struktex} hinzufügen. Im Beispiel am Seitenende ist dies genauer zu sehen.
  \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{täusche \(A[j-1]\) mit \(A[j]\)}
\change
\ifend
\assign{\mbox{}\hfil print (A)}
\whileend
  \whileend
\end{struktogramm}


== Aufbau ==
== Aufbau ==
Die Struktur ist recht einfach gehalten.
Die Struktur ist recht einfach gehalten. Umschlossen wird das Programm stets durch
 
Umschlossen wird das Programm durch
  \begin{struktogramm}(Breite(in mm),Höhe(in mm))[Überschrift]
  \begin{struktogramm}(Breite(in mm),Höhe(in mm))[Überschrift]
und  
und  
  \end{struktogramm}
  \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 ist optional und muss nicht angegeben werden.
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 ===
=== Kasten für Operationsbeschreibungen ===
Ein einfacher Kasten wird erzeugt mit assign. Der Text wird standardmäßg linksbündig gesetzt, möchte man eine zentrierte Ausrichtung, so kann man mit der Ergänzung \mbox{}\hfil dies erreichen.
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}
   \assign{Inhalt}
==== Variablendeklarationen ====
==== Variablendeklarationen ====
Zeile 32: Zeile 20:
   \assign{  
   \assign{  
     \begin{declaration}
     \begin{declaration}
    \description{Variablenname}{Variablenbeschreibung}
      \description{Variablenname}{Variablenbeschreibung}
    \description{Variablenname}{Variablenbeschreibung}
      \description{Variablenname}{Variablenbeschreibung}
  \end{declaration}
    \end{declaration}
   }
   }
[[Datei:Variablendeklaration.png|alternativtext=Variablendeklaration|rahmenlos|360x360px]]
[[Datei:Variablendeklaration.png|alternativtext=Variablendeklaration|rahmenlos|360x360px]]


Es ist möglichnoch weiter zu spezifizieren (Parametern, lokalen Variablen und globalen Variablen), wer mehr dazu wissen möchte, kann dies in der Dokumentation [https://tug.ctan.org/macros/latex/contrib/struktex/struktex.de.pdf Dokumentation des Paketes] ab Seite 13 nachlesen.
Eine weitere Spezifiziertung ist möglich (Parameter, lokale Variablen und globale Variablen), wer mehr dazu wissen möchte, kann dies in der Dokumentation [https://tug.ctan.org/macros/latex/contrib/struktex/struktex.de.pdf Dokumentation des Paketes] ab Seite 13 nachlesen.


[[Datei:VariablenDeklarationGenauer.png|alternativtext=Variablen Deklaration mit Parametern, lokalen Variablen....|rahmenlos|331x331px]]
[[Datei:VariablenDeklarationGenauer.png|alternativtext=Variablen Deklaration mit Parametern, lokalen Variablen....|rahmenlos|331x331px]]


=== Unterprogrammssprung ===
=== Unterprogrammsprung ===
   \sub{Inhalt}
   \sub{Inhalt}
[[Datei:Unterprogramm.png|alternativtext=Unterprogrammkasten (zusätzliche kleine Rechtecke links und rechts)|rahmenlos|397x397px]]
[[Datei:Unterprogramm.png|alternativtext=Unterprogrammkasten (zusätzliche kleine Rechtecke links und rechts)|rahmenlos|497x497px]]


=== Aussprung aus dem Programm ===
=== Aussprung aus dem Programm ===
   \return{Inhalt}
   \return{Inhalt}
Hier ein Beispiel:
Hier ein Beispiel:
  \begin{struktogramm}(95,20)
\begin{struktogramm}(95,20)
   \sub{Liste sortieren}
   \sub{Liste sortieren}
   \return{Listenkopf zurückgeben}
   \return{Listenkopf zurückgeben}
Zeile 55: Zeile 43:
[[Datei:SubandReturn.png|alternativtext=Sub und Return hintereinander, return hat innerhalb des Kastens links und rechts jeweils eine spitze Klammer|rahmenlos|475x475px]]
[[Datei:SubandReturn.png|alternativtext=Sub und Return hintereinander, return hat innerhalb des Kastens links und rechts jeweils eine spitze Klammer|rahmenlos|475x475px]]


=== Schleifen ===
=== While, Until und Forever - Schleifen ===
\while
\while{Bedingung}
  \assign{Schleifeninhalt}
\whileend
[[Datei:Strukto while.png|alternativtext=While Schleife Struktogramm|rahmenlos|628x628px]]
\until{Bedingung}
  \assign{Schleifeninhalt}
\untilend
[[Datei:Strukto until.png|alternativtext=Until Schleife Struktogramm|rahmenlos|632x632px]]
\forever
  \assign{Schleifeninhalt}
  \exit{Exit}
\foreverend
[[Datei:Strukto foreverexit.png|alternativtext=Forever Schleife mit Exit Struktogramm|rahmenlos|600x600px]]
\forallin{$\forall l \in L$}
  \assign{gib l) aus}
\forallinend
[[Datei:Forall Strukto.png|alternativtext=For all Schleife|rahmenlos|600x600px]]
 
=== If-Schleifen ===
  \ifthenelse[30]{1}{1}{Wahrheitsprüfung}{\sTrue}{\sFalse}
    \assign{Wenn ja...}
    \change
    \assign{Wenn falsch, dann...}
  \ifend
[[Datei:If Strukto.png|alternativtext=If-Schleife Struktogramm|rahmenlos|600x600px]]
 
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 ===


\whileend
  \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}


\until
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
...


\untilend
[[Datei:Strukto Case.png|alternativtext=Darstellung Fallunterscheidung (3 Fälle)|rahmenlos|573x573px]]


\forallin
=== 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:


\forallinend
  \inparallel{Anzahl paralleler Tasks}{Beschreibung 1. Task}
  \task{Beschreibung 2. Task}
  ...
  \task{Beschreibung n. Task}
  \inparallelend
[[Datei:Strukto parallel.png|rahmenlos|393x393px]]


\forever
=== Beispiel ===
Dieses Struktogramm


\foreverend
[[Datei:Strukto Bsp.png|alternativtext=Beispieldarstellung eines Programmes mittels eines Struktorgramms|rahmenlos|519x519px]]


\exit{}
sieht dann im Quelltext aus wie folgt:
\documentclass{article}
\usepackage{struktex}
\begin{document}
\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}
\end{document}

Aktuelle Version vom 9. Januar 2023, 13:17 Uhr

Benötigte Programme

Auch wenn wir in unserem Fachbereich LaTeX nur selten kompiliert nutzen, kann es bei diesem Thema sinnvoll sein, sich eine funktionsfähige Kompilierumgebung einzurichten. Für Windows kann wahlweise die MikTeX oder TexLive Distribution genutzt werden, welche heruntergeladen und installiert werden muss. Als Editor nutze ich selbst gerne den TeX-Maker, welcher auch mit Screenreader gut nutzbar ist (zumindest JAWS und NVDA). Einrückungen werden auf der Zeile angezeigt und über das Menü Benutzer/Wortvervollständigung lassen sich leicht neue Befehle mit Autovervollständigung hinzufügen.

Das Kompilieren in PDF erfolgt über einen Befehlsaufruf und eine sehende Assistenz kann in einem zweiten Fenster direkt das Ergebnis überprüfen.

In der Präambel muss das Paket struktex eingebunden werden. Dazu einfach nach dem Festlegen der Dokumentklasse \usepackage{struktex} hinzufügen. Im Beispiel am Seitenende ist dies genauer zu sehen.

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}
 }

Variablendeklaration

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.

Variablen Deklaration mit Parametern, lokalen Variablen....

Unterprogrammsprung

 \sub{Inhalt}

Unterprogrammkasten (zusätzliche kleine Rechtecke links und rechts)

Aussprung aus dem Programm

 \return{Inhalt}

Hier ein Beispiel:

\begin{struktogramm}(95,20)
  \sub{Liste sortieren}
  \return{Listenkopf zurückgeben}
\end{struktogramm}

Sub und Return hintereinander, return hat innerhalb des Kastens links und rechts jeweils eine spitze Klammer

While, Until und Forever - Schleifen

\while{Bedingung}
  \assign{Schleifeninhalt}
\whileend

While Schleife Struktogramm

\until{Bedingung}
  \assign{Schleifeninhalt}
\untilend

Until Schleife Struktogramm

\forever
  \assign{Schleifeninhalt}
  \exit{Exit}
\foreverend

Forever Schleife mit Exit Struktogramm

\forallin{$\forall l \in L$}
  \assign{gib l) aus}
\forallinend

For all Schleife

If-Schleifen

 \ifthenelse[30]{1}{1}{Wahrheitsprüfung}{\sTrue}{\sFalse}
   \assign{Wenn ja...}
   \change
   \assign{Wenn falsch, dann...}
 \ifend

If-Schleife Struktogramm

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
...

Darstellung Fallunterscheidung (3 Fälle)

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

Strukto parallel.png

Beispiel

Dieses Struktogramm

Beispieldarstellung eines Programmes mittels eines Struktorgramms

sieht dann im Quelltext aus wie folgt:

\documentclass{article}
\usepackage{struktex}
\begin{document}
\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}
\end{document}