From 70d3317e4341ce355351b4f777e63b44fbeb8932 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Thu, 9 Oct 2014 18:15:12 +0200 Subject: [PATCH] finished...? --- programming/lectures/scripts_functions.tex | 157 +++++++++++++++++++-- 1 file changed, 145 insertions(+), 12 deletions(-) diff --git a/programming/lectures/scripts_functions.tex b/programming/lectures/scripts_functions.tex index b325f0a..1596b2e 100644 --- a/programming/lectures/scripts_functions.tex +++ b/programming/lectures/scripts_functions.tex @@ -167,19 +167,80 @@ \end{frame} -\begin{frame} +\begin{frame}[fragile] \frametitle{Skripte und Funktionen} \framesubtitle{Skripte} - Achtung clash von variablen provozieren. Skript, das 2 Skripte aufruft. - Wettbewerb, wer findet den Fehler? + Beispiel: Plot von Sinusschwingungen + \footnotesize + \begin{lstlisting} +>> x = (0:0.01:2*pi); +>> frequenz_1 = 1; +>> frequenz_2 = 2; +>> y = sin(frequenz_1 * x); +>> y2 = sin(frequenz_2 * x); +>> plot(x, y); +>> hold on; +>> plot(x, y2); +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Skripte und Funktionen} + \framesubtitle{\"Ubungen} + \begin{enumerate} + \item \"Offnet den Editor und schreibt ein Skript, das f\"unf Sinus + mit den Amplituden \verb+amplitude = [0.25, 0.5, 1.0, 2.0]+ in + einen Graphen plottet. Benutzt eine \verb+for+ Schleife um die Amplituden abzuarbeiten. + \item Speichert das Skript und f\"uhrt es von der Kommandozeile aus. + \item Erzeuge ein zweites Skript, das nun die Frequenz setzt und das + erste aufruft. Benutzt eine \verb+for+ Schleife um folgende + Frequenzen abzuarbeiten \verb+frequenzen = [1.0, 2.0]+. + \item Speichert und ruft dieses Skript \"uber die Kommandozeile auf. + \item Was ist geplottet, passt es zu den Erwartungen? + \end{enumerate} \end{frame} \begin{frame} \frametitle{Skripte und Funktionen} \framesubtitle{Funktionen} - Funktionskopf - Schnittstelle - Funktionskoerper - Eingangs und Ausgangsargumente + Vorherige \"Ubung hat gezeigt, dass die Verwendung von globalen Variablen gef\"ahrlich ist. + Wie l\"ost man dieses Problem?\\ + \vspace{3em} + \huge{Funktionen!} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Funktionen} \framesubtitle{Funktionen} + Funktionen haben ihren eingenen G\"ultigkeitsbereich. Variablen im + \textit{Workspace} sind ohne Konsequenzen f\"ur die Funktion. + \footnotesize + \begin{lstlisting} +function plot_sinus_mit_amplituden() % Funktionskopf + x = (0:0.01:2*pi); % hier faengt der Funktionskoerper an + frequenz = 1.0; + amplituden = [0.25 0.5 0.75 1.0 1.25]; + + for i = 1:length(amplituden) + y = sin(frequenz * x) * amplituden(i); + plot(x, y) + hold on; + end +\end{lstlisting}\pause +Ist das eine gute Funktion? +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Funktionen} + \framesubtitle{Argumente und R\"uckgabewerte} + Grundlegende Idee ist $y = f(x)$.\\ + \"Ahnlich dazu kann man den Funktionskopf mit Argumenten und R\"uckgabewerten definieren + \footnotesize + \begin{lstlisting} +function y = plot_sinus(frequenz, amplitude) +% ^ ^ ^ +% Rueckgabewert Argument_1 Argument_2 +\end{lstlisting} \end{frame} \begin{frame}[fragile] @@ -194,6 +255,34 @@ \end{enumerate} \end{frame} +\begin{frame}[fragile] + \frametitle{Funktionen} + \framesubtitle{Zusammenfassung} + Funktionen sind kleine Code Fragmente, die + \begin{enumerate} + \item ... genau eine Aufgabe erledigen. + \item ... Argumente entgegennehmen k\"onnen. + \item ... R\"uckgabewerte haben k\"onnen. + \item ... ihren eigenen G\"ueltigkeitsbereich haben. + \item ... Skripten fast immer vorzuziehen sind. + \end{enumerate} +\end{frame} + +\begin{frame}[plain] +\huge{3. Programmierstil} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Programmierstil} + \framesubtitle{Was soll das?} + \begin{enumerate} + \item Die Namensgebung fuer Variablen und Konstanten. + \item Die Namensgebung von Skripten und Funktionen. + \item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im Code hervorzuheben. + \item Verwendung von Kommentaren und Hilfetexten. + \end{enumerate} +\end{frame} + \begin{frame}[fragile] \frametitle{Skripte und Funktionen} \framesubtitle{Programmierstil} @@ -225,21 +314,65 @@ \end{frame} \begin{frame}[fragile] - \frametitle{Skripte und Funktionen} \framesubtitle{Programmierstil} - Ihr d\"urft all das missachten aber:\\ - + \frametitle{Programmierstil} + Ihr d\"urft all das missachten und einen eingenen Stil entwickeln. Aber:\\ + \vspace{2.5cm} \centering \huge{Bleibt konsitent!}\pause - \vspace{4em} + \vspace{2.5cm} \normalsize + Es gibt dazu ganze B\"ucher. z.B. Robert C. Martin: \textit{Clean Code: A Handbook of Agile Software Craftmanship}, Prentice Hall \end{frame} + +\begin{frame}[fragile] + \frametitle{Funktionen} + \frametitle{\"Ubungen} + \begin{enumerate} + \item Schreibe eine Funktion \verb+plotSineWave+ die die amplitude + des Sinus als Argument entgegennimmt. + \item Erweitere die Funktion in der Weise, dass sie zus\"atzlich die + gew\"uenschte Frequnez \"ubernimmt. + \item Erweitere \verb+plotSineWave+ so, dass sie eine Schar von + Sinuswellen unterschiedlicher Frequenz plottet. + \item Erweitere \verb+plotSinWave+ so, dass auch die Amplitude als + Vektor \"ubergeben werden kann. Die Funktion soll alle m\"oglichen + Kombinationen darstellen. + \item Erweitere \verb+plotSinWave+ so, dass die berechnete Sinus in einer 2-D Matrize zurckgegeben werden. + \item Fuege zwei weitere R\"uckgabeparameter hinzu, die fuer jede + Berechnung die Amplitude und Frequenz zur\"uckgeben. + \end{enumerate} +\end{frame} + + +\begin{frame}[plain] + \huge{4. Vom Problem zum Algorithmus zum Programm}\\ + \begin{figure} + \centering + \includegraphics[height=0.6\textheight]{./images/turtur} + \end{figure} +\end{frame} + \begin{frame} - \frametitle{} - \framesubtitle{} + \frametitle{Vom Problem zum Algorithmus} + \framesubtitle{Uff, schwierig...} + \begin{enumerate} + \item Am besten faengt man mit einem weissen Blatt an. :-) \pause + \item Begr\"abt alle Angst vor Fehlern. \pause + \item Macht sich klar, was das die Ausgangsituation ist.\pause + \item Macht sich klar, was das Ziel ist.\pause + \item Zerlegt das Problem in kleinere Teile und wendet Schritte 1 - 5 auf jedes Teilproblem an. + \end{enumerate} +\end{frame} +\begin{frame} + \frametitle{Vom Problem zum Algorithmus} + \framesubtitle{Uff, schwierig...} + Wie w\"are es mit folgendem Problem:\\ + Ich habe die Aufnahme des Membranpotentials einer Nervenzelle und m\"ochte die + Anzahl und die Zeitpunkte der Aktionspotentiale ermitteln. \end{frame}