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

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