summaryrefslogtreecommitdiff
path: root/macros/latex209/contrib/fchart/fcdoc.tex
blob: dd185060dba85fe09d0512a04fa2bae0c7662498 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
\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}