\documentstyle[german]{article} \def\stat#1{$\langle${\em #1\/}$\rangle$} \def\bs{\tt\char'134} \def\lb{\tt\char'173} \def\rb{\tt\char'175} \def\ti{\tt\char'176} \def\exprleft{$\vcenter\bgroup\hsize=4.5cm} \def\exprmid{\egroup\Longrightarrow\vcenter\bgroup\hsize=6cm} \def\exprright{\egroup$} \input{fchart} \title{ {\tt floatchart}\\ Flu"sdiagramme in \TeX/\LaTeX } \author{M.~Schollmeyer} \begin{document} \maketitle {\tt floatchart} sind eine Sammlung von Definitionen, die das Erstellen von Struktogrammen in \TeX/\LaTeX\ erm"oglichen. Wenn man an \LaTeX\ und Struktogramme denkt, wird man geneigt sein, eine {\tt picture} Umgebung zu nehmen, eine Menge {\em counter} und {\em dimensions} zu definieren und\dots. \TeX\ bietet eine viel einfachere Art an, dieses Problem zu l"osen, und mich wundert es, da"s ich so etwas noch auf keinem SoftServer gesehen habe. Die Dateien {\tt fchart.tex} und {\tt fcdoc.tex} k"onnen "uber Anonymous Ftp vom SoftServer der Uni Stuttgart\hfill {\tt rusinfo.rus.uni-stuttgart.de}\hfill $[129.69.1.12]$\\ "uber {\em INTERNET\/} bezogen werden. Falls jemand da drau"sen Vorschl"age, Anmerkungen oder Probleme (mit diesen Definitionen) hat, mein Name ist Michael Schollmeyer und ich bin "uber {\tt nw@itlrsun1.luftfahrt.uni-stuttgart.de} zu erreichen. \section{Struktogramme} Ein Dokument, in das Sie Struktogramme einbinden m"ochten, mu"s die Definitionen f"ur Struktogramme einlesen. Dazu mu"s irgendwo vor dem ersten Struktogramm der Befehl \begin{verbatim} \input{fchart} \end{verbatim} \noindent stehen. Mit diesem Befehl werden die Definitionen eingelesen. Nat"urlich brauchen Sie die Datei {\tt fchart.tex} dazu. Sie k"onnen die Datei auch in {\tt fchart.sty} umbenennen und dann mit dem Befehl \verb|documentstyle| einbinden. Das ist schon alles was Sie brauchen, jetzt k"onnen Sie loslegen: Grunds"atzlich mu"s man zwischen Struktogrammen in \TeX\ und Struktogrammen in \LaTeX\ unterscheiden. Beide sehen nat"urlich genau gleich aus und sind auch gleich, nur die Bedienung ist etwas unterschiedlich. In \TeX\ sagen Sie, wenn sie ein Flu"sdiagramm beginnen m"ochten \begin{verbatim} \FLOATCHART(breite){titel}{ anweisungen } \end{verbatim} \stat{breite} ist die Breite, die das Struktogramm einnehmen soll. Breite ist etwas, das \TeX\ \stat{dimen} nennt, also eine Dimension. Man kann hier beispielsweise \verb|10cm| eingeben. \stat{titel} ist eine beliebige Zeichenkette, die in die erste Box des Struktogramms gesetzt wird. In dieser Zeichenkette k"onnen die Befehle \verb|\TITLE{|\stat{string}\verb|}| und \verb|\VAR{|\stat{string}\verb|}| gesetzt werden. bei \verb|\TITLE| wird vor die Zeichenkette \stat{string} automatisch \verb|Program| gesetzt, bei \verb|\VAR| wird \verb|var| gesetzt. Diese Zeichenketten k"onnen auch ver"andert werden. In \LaTeX\ sagen sie \begin{verbatim} \begin{floatchart}(breite){titel} anweisungen \end{floatchart} \end{verbatim} F"ur \stat{anweisungen} k"onnen mehrere der folgenden Befehle stehen. Es gibt f"ur jeden Schleifentyp eine Definition, mit der dieser Typ erzeugt werden kann. \begin{description} \item[{\bs S\{\stat{text}\}}] Das ist der einfachste Befehl. S $\equiv$ {\em Statement}. Der Text wird links\-b"un\-dig in eine Box gesetzt. \item[{\bs IF(\stat{text})\{\stat{anweisungen}\}\{\stat{anweisungen}\}}] Es wird eine Verzweigungsstruktur mit zwei "Asten erzeugt. Jeder Ast kann wieder beliebige Anweisungen enthalten. Das letzte Argument kann auch weggelassen werden, dann ist dieser Anweisungsblock leer. Der Text "uber den Verzweigungsbl"ocken kann mit \verb|\def\fnyes{...}| und \verb|\def\fnno{...}| eingestellt werden. \end{description} \exprleft \begin{verbatim} \IF(\stat{text}){ \S{\stat{anweisungen}} }{ \S{\stat{anweisungen}} } \end{verbatim} \exprmid \begin{floatchart}(6cm){\bs IF-Konstruktion} \IF(\stat{text}){ \S{\stat{anweisungen}} }{ \S{\stat{anweisungen}} } \end{floatchart} \exprright \begin{description} \item[{\bs WHILE(\stat{text})\{\stat{anweisungen}\}}] Es wird eine Schleifenstruktur erzeugt. Die Zeichenkette vor {\tt text} kann mit \verb|\def\fnwhile{...}| eingestellt werden. \end{description} \exprleft \begin{verbatim} \WHILE(\stat{text}){ \S{\stat{anweisungen}} } \end{verbatim} \exprmid \begin{floatchart}(6cm){\bs WHILE-Konstruktion} \WHILE(\stat{text}){ \S{\stat{anweisungen}} } \end{floatchart} \exprright \begin{description} \item[{\bs REPEAT\stat{anweisungen}\bs UNTIL(\stat{text})}] Das ist ebenfalls eine Schleifenstruktur. Die Zeichenkette vor {\tt text} kann mit \verb|\def\fnuntil{...}| eingestellt werden. \end{description} \exprleft \begin{verbatim} \REPEAT \S{\stat{anweisungen}} \UNTIL(\stat{text}) \end{verbatim} \exprmid \begin{floatchart}(6cm){\bs REPEAT-Konstruktion} \REPEAT \S{\stat{anweisungen}} \UNTIL(\stat{text}) \end{floatchart} \exprright \begin{description} \item[{\bs SWITCH(\stat{text})\{\stat{anweisungen}\}}] Das ist eine spezielle Verzweigungsstruktur. Nein, eigentlich ist das eine allgemeine Verweigungsstruktur, auf die z.B. die {\bs IF}-Konstruktion aufbaut. F"ur \stat{anweisungen} sollten nur die beiden Befehle {\bs CASE} und {\bs DEFAULT} verwendet werden. \end{description} \exprleft \begin{verbatim} \SWITCH(\stat{text}){ \CASE(\stat{first}){ \S{\stat{anw.}} } \CASE(\stat{second}){ \VOID } \DEFAULT(\stat{def}){ \S{\stat{anw.}} } } \end{verbatim} \exprmid \begin{floatchart}(6cm){\bs SWITCH-Konstruktion} \SWITCH(\stat{text}){ \CASE(\stat{first}){ \S{\stat{anw.}} } \CASE(\stat{second}){ \VOID } \DEFAULT(\stat{def}){ \S{\stat{anw.}} } } \end{floatchart} \exprright \begin{description} \item[{\bs FOR(\stat{first})\{\stat{upto}\}(\stat{last})\{\stat{anweisungen}\}}] Das ist eine Schleifenstruktur, in der irgendetwas von einem Zustand in einen Anderen ger"at und dabei evt.~das Abbruchkriterium beeinflu"st. Die Zeichenkette vor {\tt first} kann mit \verb|\def\fnfor{...}| eingestellt werden. \end{description} \exprleft \begin{verbatim} \FOR(\stat{first}) {\tt upto} (\stat{last}){ \S{\stat{anweisungen}} } \end{verbatim} \exprmid \begin{floatchart}(6cm){\bs FOR-Konstruktion} \FOR(\stat{first}){\tt upto}(\stat{last}){ \S{\stat{anweisungen}} } \end{floatchart} \exprright \begin{description} \item[{\bs FOREVER\{\stat{anweisungen}\}}] Das ist eine endlose Schleifenstruktur. \end{description} \exprleft \begin{verbatim} \FOREVER{ \S{\stat{anweisungen}} } \end{verbatim} \exprmid \begin{floatchart}(6cm){\bs FOREVER-Konstruktion} \FOREVER{ \S{\stat{anweisungen}} } \end{floatchart} \exprright \vskip10pt Es gibt eine ganze Reihe von Variablen, die das Aussehen der Flu"sdiagramme beeinflussen. Einige dieser Variablen sind \verb|\count|er und \verb|\dimen|sionen, k"onnen also einfach durch \verb|\variable=wert| ver"andert werden. Andere Variablen sind \verb|\def|initionen, die mit \verb|\def\variable{wert}| ver"andert werden k"onnen. Die hier angegebenen Werte sind die Voreinstellungen. \begin{description} \item[\tt\bs flnwidth=.5pt] Strichdicke f"ur horizontale und vertikale Linien \item[\tt\bs boxskip=8pt] Abstand des Textes von den Linien \item[\tt\bs boxindent=20pt] Einzug f"ur Verschachtelungen \item[\tt\bs quality=200] Qualit"at f"ur diagonale Linien (klein=schlecht) \item[\tt\bs def\bs fnname\{\bs tt Program \bs bf \}] Text f"ur Titelzeile \item[\tt\bs def\bs fnvar\{\bs tt VAR \bs it \}] Text f"ur Variablen-Definitionen \item[\tt\bs def\bs fnwhile\{\bs tt While \}] Text f"ur While-Schleife \item[\tt\bs def\bs fnuntil\{\bs tt Until \}] Text f"ur While-Until-Schleife \item[\tt\bs def\bs fnfor\{\bs tt For \}] Text f"ur For-Next-Schleife \item[\tt\bs def\bs fnyes\{Yes \}] Text f"ur If-Then-Konstruktion \item[\tt\bs def\bs fnno\{No \}] Text f"ur If-Then-Konstruktion \item[\tt\bs fnnotext] Kein Text f"ur obige Variablen \item[\tt\bs fndeftext] Default Text f"ur obige Variablen \end{description} \section{Baumstrukturen} Struktogramme sind eine brauchbare Art Abl"aufe schematisch darzustellen. F"ur Daten und Zusammenh"ange zwischen Daten k"onnen {\em Baumdiagramme} verwendet werden. Die Darstellung von Baumdiagrammen ist vielseitiger als die von Struktogrammen. Das hier verwendete Layout ist (noch) nicht weit verbreitet, aber es l"a"st sich gut in \TeX\ implementieren. Baumstrukturen basieren auf \stat{nodes}, die jeweils ein Datum darstellen. \stat{nodes}, die einger"uckt erscheinen, sind voneinander abh"angig. \stat{nodes}, die untereinander stehen, stehen in einer Verbindung zueinander. Wie stark diese Bindung ist, wird durch eine Linie angedeutet. \vskip10pt \node~{\bs node\it c\lb\it name\rb\it t\lb\it title\rb\lb\it subnodes\rb}- {Druckt eine \stat{node}. Das ist der einzige Befehl, der zur Verf"ugung gestellt wird. Alle anderen Sachen werden mit Optionen eingestellt.}{ \node!{\it c}-{Optionales Argument, da"s die Verbindungslinie oder eine Referenz angibt. }{ \node{\it c= \tt !}-{Durchgezogene Verbindungslinie} \node{\it c= \ti}-{Geschl"angelte Verbindungslinie} \node{\it c += \tt +}-{Diese \stat{node} ist eine Referenz. Es wird kein Name gedruckt, sondern ein Kreis mit einem automatisch generierten Buchstaben in der Mitte. Der Name kann sp"ater wieder verwendet werden, um den gleichen Buchstaben zu erhalten. Damit k"onnen Bez"uge hergestellt werden.} } \node{\lb\it name\rb}-{Der Name der \stat{node}, wird in Klammern '$\langle name\rangle$' gesetzt.} \node!{\it t}-{Optionales Zeichen, das angibt, ob diese \stat{node} einen Titel hat.}{ \node{\it t= \tt -}-{Es gibt einen Titel. Diese Option darf bei Referenzen nicht benutzt werden.} } \node{\lb\it title\rb}-{Titel f"ur diese \stat{node}, wird \bs hangindent\rm`ed gesetzt} \node{\lb subnode\rb}-{Optionales Argument, da"s weitere \stat{subnodes} enth"alt. Mit diesem Argument werden \stat{nodes} verschachtelt.} } \node~{\bs killnodes}-{Alle Referenzen l"oschen und mit der Buchstabierung neu beginnen.} \node{\bs nodemark\{name\}}-{Der Buchstabe f"ur {\tt name} wird an dieser Stelle gesetzt.} \vskip10pt \node~{Apfelstrudel}-{Rezept nach Hausmannsart}{ \node!{Strudelteig}-{Aus den angegebenen Zutaten einen Strudelteig herstellen ---Unter einem erhitzten Topf 30 Minuten ruhen lassen---}{ \node{$\mit 250\,\mbox{\it g}$ Mehl} \node{$\mit 1\,\mbox{\it Teel.}$ Butter} \node{$\mit 1\mbox{\it --}2$ Eier} \node{$\mit 1/4\,\mbox{\it Tasse}$ lauwarmes Wasser} \node{$\mit 1\,\mbox{\it Prise}$ Salz} \node{$\mit 1/2\,\mbox{\it Teel.}$ Essig} } \node~{F"ulle}-{Die gezuckerten "Apfel auf dem Teil verteilen und Zimt, die gehackten Mandeln und Sultaninen dar"uberstreuen.}{ \node{$\mit 2\,\mbox{\it kg}$ "Apfel} \node{$\mit 8\,\mbox{\it E"sl.}$ Zucker} \node{Zimt} \node{$\mit 1\,\mbox{\it Tasse}$ Mandeln oder N"usse} \node{$\mit 1\,1/2\,\mbox{\it Tassen}$ Sultaninen} \node{$\mit 6\,\mbox{\it E"sl.}$ Butter} \node{$\mit 4\,\mbox{\it E"sl.}$ Br"osel} } \node+{util} } \node~{Zwetschgennudeln}{ \node{\dots} } \node{\nodemark{util}$:=$Ger"ate}{ \node{R"uhrbesen} \node{\dots} } \killnodes \end{document}