From 29c5e4d8ed10886916a222ec45ac89ad31bdd793 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sat, 14 Nov 2015 17:19:20 +0100 Subject: [PATCH] language and code fixes --- programming/code/facultyLoop.m | 4 +- programming/code/plotMultipleSinewaves.m | 2 +- programming/lecture/programming.tex | 164 ++++++++++++----------- 3 files changed, 86 insertions(+), 84 deletions(-) diff --git a/programming/code/facultyLoop.m b/programming/code/facultyLoop.m index ba14622..be0ed55 100644 --- a/programming/code/facultyLoop.m +++ b/programming/code/facultyLoop.m @@ -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) \ No newline at end of file +fprintf('Faculty of %i is: %i\n', n, x) diff --git a/programming/code/plotMultipleSinewaves.m b/programming/code/plotMultipleSinewaves.m index b0063f0..be9ca9f 100644 --- a/programming/code/plotMultipleSinewaves.m +++ b/programming/code/plotMultipleSinewaves.m @@ -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',... diff --git a/programming/lecture/programming.tex b/programming/lecture/programming.tex index 43b8bf9..4441e59 100644 --- a/programming/lecture/programming.tex +++ b/programming/lecture/programming.tex @@ -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}).