\documentclass{beamer}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{pgf}
%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade} 
%\usepackage{multimedia}

\usepackage[english]{babel}
\usepackage{movie15}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{amsmath}
\usepackage{bm} 
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{scalefnt}
\usepackage{tikz}
\usepackage{ textcomp }
\usepackage{soul}
\usepackage{hyperref}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0,1.,0}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mode<presentation>
{
  \usetheme{Singapore}
  \setbeamercovered{opaque}
  \usecolortheme{tuebingen}
  \setbeamertemplate{navigation symbols}{}
  \usefonttheme{default}
  \useoutertheme{infolines}
  % \useoutertheme{miniframes}
}

\AtBeginSection[]
{
  \begin{frame}<beamer>
    \begin{center}
      \Huge \insertsectionhead
    \end{center}
    % \frametitle{\insertsectionhead}
    % \tableofcontents[currentsection,hideothersubsections]
  \end{frame}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5

\setbeamertemplate{blocks}[rounded][shadow=true]

\title[]{Scientific Computing -- Grundlagen der Programmierung }
\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\
  Universit\"at T\"ubingen}

\institute[Wissenschaftliche Datenverarbeitung]{}
 \date{12.10.2015 - 06.11.2015}
 %\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}

\subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung}

\titlegraphic{
  \includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB}
}
%%%%%%%%%% configuration for code
\lstset{
 basicstyle=\ttfamily,
 numbers=left,
 showstringspaces=false,
 language=Matlab,
 commentstyle=\itshape\color{darkgray},
 keywordstyle=\color{blue},
 stringstyle=\color{green},
 backgroundcolor=\color{blue!10},
 breaklines=true,
 breakautoindent=true,
 columns=flexible,
 frame=single,
 captionpos=b,
 xleftmargin=1em,
 xrightmargin=1em,
 aboveskip=10pt
 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\mycite}[1]{
\begin{flushright}
\tiny \color{black!80} #1
\end{flushright}
}

\newcommand{\code}[1]{\texttt{#1}}

\input{../../latex/environments.tex}
\makeatother
 
\begin{document} 

\begin{frame}[plain]
  \frametitle{}
  \vspace{-1cm}
  \titlepage % erzeugt Titelseite
\end{frame}


\begin{frame}[plain]
  \huge{5. Kontrollstrukturen}
\end{frame}

\begin{frame}
  \frametitle{Kontrollstrukturen}
  \framesubtitle{Was ist das?}
  \begin{itemize}
  \item Regeln den Ablauf von Anweisungen.
  \item Was soll unter welchen Bedingungen wie h\"aufig ausgef\"uhrt werden?\vspace{0.5cm}\pause
  \item Im Wesentlichen zwei Arten von Kontrollstrukturen:
    \begin{enumerate}
    \item Schleifen (\code{for} und \code{while} Schleifen).\vspace{0.25cm}
    \item Bedingte Anweisungen und Verzweigungen.
    \end{enumerate}\vspace{0.5cm}\pause
  \item Geh\"oren nicht zu den Kontrollstrukturen, werden wir hier
    aber kurz ansprechen:
    \begin{enumerate}
    \item Ausnahmebehandlungen.
    \end{enumerate}
  \end{itemize}
\end{frame}



\begin{frame}[fragile]
  \frametitle{Kontrollstrukturen}
  \framesubtitle{Schleifen}
  
  Schleifen werden gebraucht um wiederholte Ausf\"uhrung desselben
  Codes zu vereinfachen.  Z.B. die Berechnung der Fakult\"at von
  gestern...

\tiny
  \begin{lstlisting}
>> x = 1;
>> x = x * 2;
>> x = x * 3;  
>> x = x * 4;
>> x = x * 5;
>> x
x =
    120
\end{lstlisting}
\normalsize
  \begin{itemize}
  \item Zeilen 2 bis 5 sind sehr \"ahnlich.
  \item Die Verwendung von solchen Codeklonen ist schlechter Programmierstil!
  \item Welche Nachteile hat es sonst noch?
  \end{itemize}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Kontrollstrukturen}
  \framesubtitle{for - Schleife}
  \tiny
  \begin{lstlisting}[label=loopListing2]
>> for x = 1:5
    ...   % etwas sinnvolles mit x ...
   end
>> disp(x);
    5
>>
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Kontrollstrukturen}
  \framesubtitle{while - Schleife}
  \tiny
  \begin{lstlisting}
>> x = 1;
>> while x <= 5 
      ...   % etwas sinnvolles mit x ...
      disp(x);
      x = x + 1;
   end
      1      
      2
      3
      4
      5
>> disp(x)
     6
>>
>> while true %never ending loop!
     disp(x);
     x = x + 1;
   end
     1
     2
    ...
\end{lstlisting}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Kontrollstrukturen}
  \framesubtitle{if - Anweisung (bedingte Anweisung)} 

  Wird eingesetzt um bestimmte Code Abschnitte
  nur unter bestimmten Umst\"anden auszuf\"uhren.
  
  \tiny
\begin{lstlisting}[label=loopListing4]
>> x = rand(1); % eine einzelne Zufallszahl
>> if x < 0.5
      disp('x is less than 0.5');
   end
>>
>> if x < 0.5
      disp('x is less than 0.5!');
   else
      disp('x is greater than or equal to 0.5!')
   end
>> 
>> if x < 0.5
      disp('x is less than 0.5!');
   elseif x < 0.75
      disp('x is greater than 0.5 but less than 0.75!');
   else
      disp('x is greater than or equal to 0.75!')
   end
>>
>> if x < 0.75
      disp('x is less than 0.75!');
   elseif x < 0.5
      disp('x is less than 0.5!');
   else
      disp('x is greater than or equal to 0.75!')
   end
\end{lstlisting}
\end{frame}


\begin{frame}[fragile]
 \frametitle{Kontrollstrukturen}
  \framesubtitle{break  unnd continue}
  \vspace{-0.5cm}
  \tiny
  \begin{lstlisting}
>> for x = 1:5 % using continue
     if(x > 2 & x < 5)
        continue;
     end
     disp(x);
   end
     1
     2
     5
>> 
>> for x = 1:5000 % using break
     if(x > 5)
        break;
     end
     disp(x);
   end
     1
     2
     3
     4
     5
>>
\end{lstlisting}
\end{frame}


\begin{frame}[fragile]
  \frametitle{Kontrollstrukturen}
  \framesubtitle{\"Ubungen}
  \begin{enumerate}
  \item Erzeuge einen Vektor 'x' mit z.B. 50 Zufallszahlen im Bereich 0 - 10.
    \begin{enumerate}
    \item Benutze eine Schleife um das arithmetische Mittel zu berechnen. Der Mittelwert ist definiert als:
      $\overline{x}=\frac{1}{n}\sum\limits_{i=0}^{n}x_i $.
    \item Benutze eine Schleife um die Standardabweichung zu bestimmen:
      $\sigma=\sqrt{\frac{1}{n}\sum\limits_{i=0}^{n}(x_i-\overline{x})^2}$).
    \item Suche in der MATLAB Hilfe nach Funktionen, die das fuer dich tuen :-).
    \end{enumerate}
  \item Erzeuge eine 5 x 5 x 5 Matrix mit Zufallszahlen.
    \begin{enumerate}
    \item Benutze eine for Schleife um nacheinander die Elemente jedes ``Blattes'' einzeln auszugeben.
    \item Das gleich mit einer while-Schleife.
    \end{enumerate}
  \end{enumerate}
\end{frame}

\begin{frame}[fragile]
  \frametitle{Kontrollstrukturen}
  \framesubtitle{\"Ubungen}
  \vspace{-0.5cm}
  \begin{enumerate}\setcounter{enumi}{2}
  \item Erstelle 'x' einen Vektor mit 10 Zufallszahlen im Bereich 0:10.
    \begin{enumerate}
    \item Benutze eine for-Schleife um all die Elemente zu loeschen,
      die (\verb+x(index) = [];+) kleiner als 5 sind.
    \item L\"osche alle Elemente die kleiner als  5 und groesser als  2 sind.
    \item Kann man das gleiche auch ohne eine Schleife erledigen?
    \end{enumerate}
  \item Teste den Zufallsgenerator! Dazu z\"ahle die Anzahl der
    Elemente, die durch folgende Grenzen getrennt werden [0.2 0.4 0.6
      0.8 1.0]. Speichere die Ergebnisse in einem passenden
    Vektor. Nutze eine Schleife um 1000 Zufallszahlen mit
    \verb+rand()+ (siehe Hilfe) zu ziehen. Was w\"are die Erwartung,
    was kommt heraus?
\end{enumerate}
\end{frame}


\end{document}
