language and code fixes

This commit is contained in:
Jan Grewe 2015-11-14 17:19:20 +01:00
parent 508b6bb5cc
commit 29c5e4d8ed
3 changed files with 86 additions and 84 deletions

View File

@ -1,6 +1,6 @@
n = 5;
x = 1;
for i = 1:n
x = x * i;
x = x * i;
end
fprintf('Faculty of %i is: %i\n', n, x)
fprintf('Faculty of %i is: %i\n', n, x)

View File

@ -7,7 +7,7 @@ figure()
hold on
for i = 1:length(amplitudes)
for j = i:length(frequencies)
for j = 1:length(frequencies)
[x_data, y_data] = calculate_sinewave(frequencies(j), ...
amplitudes(i), t_max, t_step);
plot_sinewave(x_data, y_data, sprintf('freq: %5.2f, ampl: %5.2f',...

View File

@ -600,7 +600,7 @@ Eine elementweise Multiplikation (\code{.*} Operator, Listing
Boolesche Ausdr\"ucke sind Anweisungen, die zu \codeterm{wahr} oder
\codeterm{falsch} ausgewertet werden. Man kennt sie z.B. aus der
Mengenlehre. In der Programmierung werdens sie eingesetzt, um z.B. die
Mengenlehre. In der Programmierung werden sie eingesetzt, um z.B. die
Beziehung zwischen Entit\"aten zu testen. Hierzu werden die
\codeterm{relationalen Operatoren} (\code{>}, \code{<}, \code{==},
\code{!}, gr\"o{\ss}er als, kleiner als, gleich und nicht)
@ -609,9 +609,9 @@ eingesetzt. Mehrere Ausdr\"ucke werden mittels der \codeterm{logischen
uns nicht nur wichtig um Codeabschnitte bedingt auszuf\"uhren
(Verzweigungen, \ref{controlstructsec}) sondern auch um aus Vektoren
und Matrizen bequem Elemente auszuw\"ahlen (logisches Indizieren,
\ref{logicalindexingsec}). Die folgenden Tabellen zeigen die
Wahrheitstabellen f\"ur das logische UND (\ref{logicalandor}, links)
aund das logische ODER (\ref{logicalandor}, rechts). Es werden die
\ref{logicalindexingsec}). Die Tabellen \ref{logicalandor} zeigen die
Wahrheitstabellen f\"ur das logische UND (Tabelle \ref{logicalandor}, links)
und das logische ODER (Tabelle \ref{logicalandor}, rechts). Es werden die
Aussagen A und B mit dem Operator verkn\"upft. Beim logischen UND ist
der gesamte Ausdruck nur dann wahr, wenn beide Ausdr\"ucke sich zu
wahr auswerten lassen.
@ -636,19 +636,18 @@ wahr auswerten lassen.
\end{minipage}
\end{table}
Anders ist das beim logischen ODER. Hier ist der gesamte
Ausdruck wahr, wenn sich der eine \emph{oder} der andere Ausdruck zu
wahr auswerten l\"a{\ss}t. Tabelle \ref{logicaloperators} zeigt die
Anders ist das beim logischen ODER. Hier ist der gesamte Ausdruck
wahr, wenn sich der eine \emph{oder} der andere Ausdruck zu wahr
auswerten l\"a{\ss}t. Tabelle \ref{logicaloperators} zeigt die
logischen Operatoren, die in \matlab{} definiert sind. Zu bemerken
sind hier noch die \code{\&\&} und \code{||} Operatoren. Man kann
beliebige Ausdr\"ucke verkn\"upfen und h\"aufig kann schon anhand des
ersten Ausdrucks entschieden werden, ob der gesamte Boolesche Ausdruck
zu wahr oder falsch ausgewertet werden wird. Wenn zwei Aussagen mit
einem UND verkn\"upft werden und der erste zu falsch ausgewerte wird,
dann muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung
der ``short-circuit'' Versionen spart Rechenzeit. Das auschliessende
ODER (XOR) ist in \matlab{} nur als Funktion \code{xor(A, B)}
verf\"ugbar.
einem UND verkn\"upft werden und der erste zu falsch ausgewertet wird,
muss der zweite gar nicht mehr gepr\"uft werden. Die Verwendung der
``short-circuit'' Versionen spart Rechenzeit. Das auschlie{\ss}ende ODER
(XOR) ist in \matlab{} nur als Funktion \code{xor(A, B)} verf\"ugbar.
\begin{table}[th]
\titlecaption{\label{logicaloperators}
@ -660,8 +659,8 @@ verf\"ugbar.
$\sim$ & logisches NOT\\
$\&$ & logisches UND\\
$|$ & logisches ODER\\
$\&\&$ & short-circuit logical UND\\
$\|$ & short-circuit logical ODER\\
$\&\&$ & short-circuit logisches UND\\
$\|$ & short-circuit logisches ODER\\
\hline
\end{tabular}
\end{center}
@ -669,7 +668,7 @@ verf\"ugbar.
Um Werte miteinander zu vergleichen gibt es die \codeterm{relationalen
Operatoren} (Tabelle \ref{relationaloperators}). Mit ihnen kann man
auf Dinge wie Gleicheit (\code{==}) gr\"o{\ss}er oder kleiner als
auf Dinge wie Gleichheit (\code{==}) gr\"o{\ss}er oder kleiner als
(\code{>}, \code{<}) testen.
\begin{table}[th]
@ -680,9 +679,9 @@ auf Dinge wie Gleicheit (\code{==}) gr\"o{\ss}er oder kleiner als
\hline
\textbf{Operator} & \textbf{Beschreibung} \\ \hline
$<$ & kleiner als\\
$>$ & gr\"osser als \\
$>$ & gr\"o{\ss}er als \\
$==$ & gleich \\
$>=$ & gr\"osser oder gleich \\
$>=$ & gr\"o{\ss}er oder gleich \\
$<=$ & kleiner oder gleich \\
$\sim=$ & ungleich\\
\hline
@ -697,10 +696,13 @@ werden von \matlab{} alle Werte, die nicht 0 sind als wahr
eingesch\"atzt. Listing \ref{booleanexpressions} zeigt einige
Beispiele. \matlab{} kennt die Schl\"usselworte \code{true} und
\code{false}. Diese sind jedoch nur Synonyme f\"ur die
\code{logical} Werte 1 und 0. Man beachte, dass der
Zuweisungsoperator \code{=} und der logische Operator \code{==} zwei
grundverschiedene Dinge sind. Da sie umgangsprachlich gleich sind kann
man sie leider leicht verwechseln.
\code{logical} Werte 1 und 0.
\begin{important}
Man beachte, dass der Zuweisungsoperator \code{=} und der logische
Operator \code{==} zwei grundverschiedene Dinge sind. Da sie
umgangsprachlich gleich sind kann man sie leider leicht verwechseln.
\end{important}
\begin{lstlisting}[caption={Boolesche Ausdr\"ucke.}, label=booleanexpressions]
>> true
@ -744,7 +746,7 @@ man sie leider leicht verwechseln.
\section{Logisches Indizieren}\label{logicalindexingsec}
Einer der wichtigsten Einsatzorte f\"ur Bollesche Ausdr\"ucke ist das
Einer der wichtigsten Einsatzorte f\"ur Boolesche Ausdr\"ucke ist das
logische Indizieren. Das logische Indizieren ist eines der
Schl\"usselkonzepte in \matlab{}. Nur mit diesem k\"onnen
Filteroperationen auf Vektoren und Matrizen effizient durchgef\"uhrt
@ -753,9 +755,9 @@ sehr intuitiv zu benuzten.
Das Grundkonzept hinter der logischen Indizierung ist, dass man durch
die Verwendung eines Booleschen Ausdrucks auf z.B. einen Vektor einen
logischen Vektor gleicher Gr\"o{\ss}e erh\"alt. Dieser wird nun
logischen Vektor gleicher Gr\"o{\ss}e erh\"alt. Dieser wird
benutzt um auf den urspr\"unglichen Vektor zuzugreifen. \matlab{} gibt
nun die Werte an den Stellen zur\"uck, an denen der logische Vektor
nur die Werte an den Stellen zur\"uck, an denen der logische Vektor
\codeterm{wahr} ist (Listing \ref{logicalindexing1}).
@ -777,7 +779,7 @@ nun die Werte an den Stellen zur\"uck, an denen der logische Vektor
\item Gibt alle Elemente aus x zur\"uck, die kleiner als 5 sind.
\end{enumerate}
Die letzte Zeile kann wie folgt gelesen werden: Gib mir die Elemente
Zeile 12 in der L\"osung kann wie folgt gelesen werden: Gib mir die Elemente
von (\code{x}) an den Stellen, an denen \code{x < 5} wahr ist.
\end{exercise}
@ -800,12 +802,12 @@ bestimmten Zeitraums ausw\"ahlen m\"ochte (Abbildung
\begin{exercise}{logicalIndexingTime.m}{}
Angenommen es werden \"uber einen bestimmten Zeitraum Messwerte
genommen. Bei solchen Messungen er\"alt man einen Vektor, der die
genommen. Bei solchen Messungen erh\"alt man einen Vektor, der die
Zeitpunkte der Messung speichert und einen zweiten mit den
jeweiligen Messwerten.
\begin{itemize}
\item Erstelle einen Vektor \code{t= 0:0.001:10;}, der z.B. die Zeit
\item Erstelle einen Vektor \code{t = 0:0.001:10;}, der z.B. die Zeit
repr\"asentiert.
\item Erstelle einen zweiten Vektor \code{x} mit Zufallszahlen der
die gleiche L\"ange hat wie \code{t}. Die Werte darin stellen
@ -820,8 +822,8 @@ bestimmten Zeitraums ausw\"ahlen m\"ochte (Abbildung
In der Regel wird ein Programm Zeile f\"ur Zeile von oben nach unten
ausgef\"uhrt. Manchmal muss der Kontrollfluss aber so gesteuert
werden, dass bestimmte Teile des Programmcodes wiederholt oder nur
unter bestimmten Bedingungen ausgef\"uhrt werden. Von gro{\ss}er
werden, dass bestimmte Teile wiederholt oder nur
unter bestimmten Bedingungen ausgef\"uhrt werden sollen. Von gro{\ss}er
Bedeutung sind hier zwei Strukturen:
\begin{enumerate}
@ -851,7 +853,7 @@ Im Prinzip ist das obige Programm v\"ollig in Ordnung. Es f\"allt
jedoch auf, dass die Zeilen 2 bis 5 sehr \"ahnlich sind; bis auf die
Multiplikation mit einer ansteigenden Zahl \"andert sich nichts. Die
Verwendung von mehr oder weniger exakten Klonen einzelner Zeilen oder
Abschnitte ist schlechter Prgrammierstil. Dabei geht es nicht nur um
ganzer Abschnitte ist schlechter Prgrammierstil. Dabei geht es nicht nur um
einen \"asthetischen Aspekt sondern vielmehr darum, dass es schwerwiegende Nachteile gibt.
\begin{enumerate}
\item Fehleranf\"alligkeit: Beim ``Copy-and-paste'' kann leicht
@ -861,12 +863,13 @@ einen \"asthetischen Aspekt sondern vielmehr darum, dass es schwerwiegende Nacht
Berechnung der Fakult\"at von f\"unf, gemacht und kann nichts
anderes.
\item Wartung: Wenn ich einen Fehler gemacht habe, dann muss ich den
Fehler in allen Klonen korrigieren (sehr wird dabei der ein oder
Fehler in allen Klonen korrigieren (sehr leicht wird dabei der ein oder
andere Klon \"ubersehen).
\item Verst\"andlichkeit: Solche Abschnitte sind schwerer zu lesen/zu
verstehen. Das liegt zum Teil daran, dass man dazu neigt \"uber sich
wiederholende Zeilen zu springen (ist ja eh das gleiche...) und dann
den entscheidenden Teil verpasst.
den entscheidenden Teil verpasst. Zum Anderen f\"uhrt
Codeduplication zu langen, un\"ubersichtlichen Programmen.
\end{enumerate}
Alle Programmiersprachen bieten zur L\"osung dieses Problems die
Schleifen. Eine Schleife wird immer dann eingesetzt, wenn man
@ -896,8 +899,8 @@ end
\begin{exercise}{facultyLoop.m}{facultyLoop.out}
Wie k\"onnte Fakult\"at mit einer Schleife implementiert werden?
Implementiere eine for Schleife, die die Fakul\"at von einer Zahl
\code{n} berechnet.
Implementiere eine \code{for} Schleife, die die Fakul\"at von einer
Zahl \code{n} berechnet.
\end{exercise}
@ -908,10 +911,10 @@ die \code{while}-Schleife. Auch sie hat ihre Entsprechungen in fast
allen Programmiersprachen. \"Ahnlich zur \code{for} Schleife wird
auch hier der in der Schleife definierte Programmcode iterativ
ausgef\"uhrt. Der Schleifenkopf beginnt mit dem Schl\"usselwort
\code{while} gefolgt von einem \underline{Booleschen
Ausdruck}. Solange dieser zu \code{true} ausgewertet werden kann,
wird der Code im Schleifenk\"orper ausgef\"uhrt. Die Schleife wird
mit dem Schl\"usselwort \code{end} beendet.
\code{while} gefolgt von einem Booleschen Ausdruck. Solange dieser zu
\code{true} ausgewertet werden kann, wird der Code im
Schleifenk\"orper ausgef\"uhrt. Die Schleife wird mit dem
Schl\"usselwort \code{end} beendet.
\begin{lstlisting}[caption={Grundstruktur einer \code{while} Schleife.}, label=whileloop]
@ -937,7 +940,7 @@ end
\begin{itemize}
\item Beide f\"uhren den Code im Schleifenk\"orper iterativ aus.
\item Der K\"orper einer \code{for} Schleife wird mindestens 1 mal
betreten. % XXX Nur wenn die Liste im Kopf nicht leer ist, oder ?
betreten (au{\ss}er wenn der Vektor im Schleifenkopf leer ist).
\item Der K\"orper einer \code{while} Schleife wird nur dann betreten,
wenn die Bedingung im Kopf \code{true} ist. \\$\rightarrow$ auch
``Oben-abweisende'' Schleife genannt.
@ -959,19 +962,19 @@ bestimmten Bedingungen ausgef\"uhrt wird.
\subsubsection{Die \code{if} -- Anweisung}
Am h\"aufigsten genutzter Vertreter ist die \code{if} -
Anweisung. Sie Wird genutzt um Programmcode nur unter bestimmten
Anweisung. Sie wird genutzt um Programmcode nur unter bestimmten
Bedingungen auszuf\"uhren.
Der Kopf der if - Anweisung beginnt mit dem Schl\"usselwort \code{if}
welches von einem \underline{Booleschen Ausdruck} gefolgt wird. Wenn
Der Kopf der \code{if} - Anweisung beginnt mit dem Schl\"usselwort \code{if}
welches von einem Booleschen Ausdruck gefolgt wird. Wenn
dieser zu \code{true} ausgewertet werden kann, wird der Code im
K\"orper der Anweisung ausgef\"uhrt. Optional k\"onnen weitere
Bedingungen mit dem Schl\"usselwort \code{elseif} folgen. Ebenfalls
optional ist die Verwendung eines finalen \code{else} Falls. Dieser
optional ist die Verwendung eines finalen \code{else} - Falls. Dieser
wird immer dann ausgef\"uhrt wenn alle vorherigen Bedingungen nicht
erf\"ullt werden. Die \code{if} Anweisung wird mit \code{end}
erf\"ullt wurden. Die \code{if} - Anweisung wird mit \code{end}
beendet. Listing \ref{ifelselisting} zeigt den Aufbau einer
if-Anweisung.
\code{if} - Anweisung.
\begin{lstlisting}[label=ifelselisting, caption={Grundger\"ust einer \code{if} Anweisung.}]
@ -980,32 +983,32 @@ if-Anweisung.
elseif x > y
% etwas anderes soll getan werden
else
% wenn x == y wieder etwas anderes
% wenn x == y, wieder etwas anderes
end
\end{lstlisting}
\begin{exercise}{ifelse.m}{}
Ziehe eine Zufallszahl und \"uberpr\"ufe mit einer geegnet \code{if} Anweisung, ob sie:
Ziehe eine Zufallszahl und \"uberpr\"ufe mit einer geeigneten \code{if} Anweisung, ob sie:
\begin{enumerate}
\item ... kleiner als 0.5 ist.
\item ... kleiner oder gr\"o{\ss}er-gleich 0.5 ist.
\item ... kleiner als 0.5, gr\"o{\ss}er oder gleich 0.5 aber kleiner
als 0.75 ist oder gr\"o{\ss}er oder gleich 0.75 ist.
\item ... 1. kleiner als 0.5, 2. gr\"o{\ss}er oder gleich 0.5 aber kleiner
als 0.75 oder 3. gr\"o{\ss}er oder gleich 0.75 ist.
\end{enumerate}
\end{exercise}
\subsubsection{Die \code{switch} -- Verzweigung}
Die \code{switch} Verzweigung Wird eingesetzt wenn mehrere F\"alle
Die \code{switch} Verzweigung wird eingesetzt wenn mehrere F\"alle
auftreten k\"onnen, die einer unterschiedlichen Behandlung bed\"urfen.
Wird mit dem Schl\"usselwort \code{switch} begonnen, gefolgt von der
\codeterm{switch Anweisung} (Zahl oder String). Jeder Fall auf den die
Anweisung \"uberpr\"ft werden soll wird mit dem Schl\"usselwort
\code{case} eingeleitet. Diese wird gefolgt von der \codeterm{case
Anweisung} welche definiert gegen welchen Fall auf
\underline{Gleichheit} getestet wird. F\"ur jeden Fall wird der
Programmcode angegeben, der ausgef\"uhrt werden soll Optional k\"onnen
Sie wird mit dem Schl\"usselwort \code{switch} begonnen, gefolgt von der
\codeterm{switch Anweisung} (Zahl oder String). Jeder Fall, auf den diese
Anweisung \"uberpr\"uft werden soll, wird mit dem Schl\"usselwort
\code{case} eingeleitet. Dieses wird gefolgt von der \codeterm{case
Anweisung}, die definiert gegen welchen Fall auf
Gleichheit getestet wird. F\"ur jeden Fall wird der
Programmcode angegeben, der ausgef\"uhrt werden soll. Optional k\"onnen
mit dem Schl\"usselwort \code{otherwise} alle nicht explizit genannten
F\"alle behandelt werden. Die \code{switch} Anweisung wird mit
\code{end} beendet (z.B. in Listing \ref{switchlisting}).
@ -1023,14 +1026,14 @@ switch mynumber
end
\end{lstlisting}
Wichtig ist hier, dass in jedem \code{case} auf \underline{Gleichheit} der
Wichtig ist hier, dass in jedem \code{case} auf Gleichheit der
switch-Anweisung und der case-Anweisung getestet wird.
\subsubsection{Vergleich \code{if} -- Anweisung und \code{switch} -- Verzweigung}
\begin{itemize}
\item Mit der \code{if} Anweisung k\"onnen beliebige F\"alle
unterschieden und entsprechender code ausgef\"uhrt werden.
unterschieden und entsprechender Code ausgef\"uhrt werden.
\item Die \code{switch} Anweisung leistet \"ahnliches allerdings wird in
jedem Fall auf Gleichheit getestet.
\item Die \code{switch} Anweisung ist etwas kompakter, wenn viele F\"alle
@ -1047,7 +1050,7 @@ werden, werden die Schl\"usselworte \code{break} und
\code{continue} eingesetzt (Listing \ref{breakcontinuelisting}
zeigt, wie sie eingesetzt werden k\"onnen).
\begin{lstlisting}[caption={Ensatz der \code{continue} und \code{break} Schl\"usselworte um die Ausf\"uhrung von Code-Abschnitten in Schleifen zu \"uberspringen oder abzubrechen.}, label=breakcontinuelisting]
\begin{lstlisting}[caption={Einsatz der \code{continue} und \code{break} Schl\"usselworte um die Ausf\"uhrung von Code-Abschnitten in Schleifen zu \"uberspringen oder abzubrechen.}, label=breakcontinuelisting]
for x = 1:10
if(x > 2 & x < 5)
continue;
@ -1101,7 +1104,7 @@ end
Ein Programm ist eine Sammlung von Anweisungen, die in einer Datei auf
dem Rechner abgelegt sind. Wenn es durch den Aufruf zum Leben erweckt
wird, dann wird es Zeile f\"Ur Zeile von oben nach unten ausgef\"uhrt.
wird, dann wird es Zeile f\"ur Zeile von oben nach unten ausgef\"uhrt.
\matlab{} kennt drei Arten von Programmen:
\begin{enumerate}
@ -1110,11 +1113,11 @@ wird, dann wird es Zeile f\"Ur Zeile von oben nach unten ausgef\"uhrt.
\item Objekte (werden wir ignorieren)
\end{enumerate}
Alle Programme werden in den sogenannten \codeterm{m-files} gespeichert
(z.B. \filename{meinProgramm.m}). Um sie zu benutzen werden sie von der
(z.B. \emph{meinProgramm.m}). Um sie zu benutzen werden sie von der
Kommandozeile aufgerufen oder in anderen Programmen
verwendet. Programme erh\"ohen die Wiederverwertbarkeit von
Programmcode. Bislang haben wir ausschlie{\ss}lich Skripte
verwendet. Dabei wurde jede Variable, die erzuegt wurde im
verwendet. Dabei wurde jede Variable, die erzeugt wurde im
\codeterm{Workspace} abgelegt und konnte wiederverwendet werden. Hierin
liegt allerdings auch eine Gefahr. In der Regel sind Datenanalysen auf
mehrere Skripte verteilt und alle teilen sich den gemeinsamen
@ -1166,7 +1169,7 @@ Das Folgende Beispiel (Listing \ref{badsinewavelisting}) zeigt eine
Funktion, die eine Reihe von Sinusschwingungen unterschiedlicher
Frequenzen berechnet und graphisch darstellt.
\begin{lstlisting}[caption={Eine Beispielfunktion, die eine Reihe Sinus plottet.},label=badsinewavelisting]
\begin{lstlisting}[caption={Eine Beispielfunktion, die eine Reihe Sinusse plottet.},label=badsinewavelisting]
function meine_erste_funktion() % Funktionskopf
t = (0:0.01:2); % hier faengt der Funktionskoerper an
frequenz = 1.0;
@ -1185,12 +1188,11 @@ Funktion. Sie hat folgende Probleme:
\item Die Funktion ist f\"ur genau einen Zweck geeignet.
\item Was sie tut, ist festgelegt und kann von au{\ss}en nicht
beeinflusst oder bestimmt werden.
\item Sie tut drei Dinge aus einmal: Sinus berechnen \emph{und}
\item Sie tut drei Dinge auf einmal: Sinus berechnen \emph{und}
Amplituden \"andern \emph{und} graphisch darstellen.
\item Es ist nicht (einfach) m\"oglich an die berechneten Daten zu
kommen.
\item Keinerlei Dokumentation. Man muss den code lesen um zu
rekonstruieren, was sie tut.
\item Keinerlei Dokumentation. Man muss den Code lesen und rekonstruieren, was sie tut.
\end{itemize}
Bevor wir anfangen die Funktion zu verbessern mu{\ss} definiert werden
@ -1217,9 +1219,9 @@ hei{\ss}en soll, (ii) welche Information sie ben\"otigt und (iii)
welche Daten sie zur\"uckliefern soll.
\begin{enumerate}
\item \codeterm{Name:} der Name sollte schon beschreiben, was die Funktion
\item \codeterm{Name:} der Name sollte beschreiben, was die Funktion
tut. In diesem Fall berechnet sie einen Sinus. Ein geeigneter Name
w\"are also \code{calculate\_sinwave}.
w\"are also \code{calculate\_sinewave}.
\item \codeterm{Argumente:} die zu brechnende Sinusschwingung sei durch
ihre Frequenz und die Amplitude bestimmt. Des Weiteren soll noch
festgelegt werden, wie lang der Sinus sein soll und mit welcher
@ -1249,7 +1251,7 @@ function [time, sine] = calculate_sinewave(frequency, amplitude, t_max, t_step)
\paragraph{II. Plotten einer einzelnen Schwingung}
Diese Aufage kann auch von einer Funktion \"ubernommen werden. Diese
Diese Aufgabe kann auch von einer Funktion \"ubernommen werden. Diese
Funktion hat keine andere Aufgabe, als die Daten zu plotten. Ihr Name
sollte sich an dieser Aufgabe orientieren
(z.B. \code{plot\_sinewave}). Um einen einzelnen Sinus zu plotten
@ -1270,15 +1272,15 @@ function plot_sinewave(x_data, y_data, name)
\paragraph{III. Erstellen eines Skriptes zur Koordinierung}
Die letzt Aufgabe ist die Koordinierung der Berechung und des Plottens
f\"ur mehrere Amplituden. Das ist die klassische Aufgabe f\"ur ein
Skript. Auch hier gilt es einen ausdrucksvollen Name zu finden. Da es
keine Argumente und R\"uckgabewerte gibt bleibt und nur, die
ben\"otigten Information direkt in dem Skript zu defninieren. Dies
sind: ein Vektor, f\"ur die Amplituden, je eine Variable f\"ur die
gew\"unschte Frequenz, die maximale Zeit auf der x-Achse und die
zeitliche Aufl\"osung. Das Skript \"offnet schlie{\ss}lich noch eine
neue Abbildung und setzt das \code{hold on} da nur das Skript
Die letzte Aufgabe ist die Koordinierung der Berechung und des
Plottens f\"ur mehrere Amplituden. Das ist die klassische Aufgabe
f\"ur ein Skript. Auch hier gilt es einen ausdrucksvollen Name zu
finden. Da es keine Argumente und R\"uckgabewerte gibt, m\"ussen die
ben\"otigten Informationen direkt in dem Skript defniniert werden. Es
werden ben\"otigt: ein Vektor f\"ur die Amplituden, je eine Variable
f\"ur die gew\"unschte Frequenz, die maximale Zeit auf der x-Achse und
die zeitliche Aufl\"osung. Das Skript \"offnet schlie{\ss}lich noch
eine neue Abbildung und setzt das \code{hold on} da nur das Skript
wei{\ss}, das mehr als ein Plot erzeugt werden soll. Das Skript ist in
Listing \ref{sinesskriptlisting} dargestellt.
@ -1307,7 +1309,7 @@ legend('show')
\subsection{Fazit}
Funktionen sind kleine Code Fragmente, die
Funktionen sind kleine Codefragmente, die
\begin{enumerate}
\item ... genau eine Aufgabe erledigen.
\item ... Argumente entgegennehmen k\"onnen.
@ -1318,7 +1320,7 @@ Funktionen sind kleine Code Fragmente, die
Die vorangegangene Aussagen klingen, als ob Skripte zu
verteufeln w\"aren und und vermieden werden sollten. Dem ist nicht
so. In Wahrheit sind sie daf\"ur gemacht, Hand in Hand mit den
Funktionen ein Probelm zu l\"osen. W\"ahrend die Funktionen relativ
Funktionen ein Problem zu l\"osen. W\"ahrend die Funktionen relativ
kleine ``verdauliche'' Teilprobleme l\"osen. Sind die Skripte daf\"ur
gemacht den Rahmen zu bilden und den Ablauf zu koordinieren (Abbildung
\ref{programlayoutfig}).