finished...?

This commit is contained in:
Jan Grewe 2014-10-09 18:15:12 +02:00
parent ed6a1037ef
commit 70d3317e43

View File

@ -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}