From e4676a601b208e9d4dfa926f93ea9a5c1ab5b3ed Mon Sep 17 00:00:00 2001
From: Jan Grewe <jan.grewe@g-node.org>
Date: Thu, 8 Oct 2015 18:33:49 +0200
Subject: [PATCH] [lecture] not yet finished version of control_structures

---
 programming/lectures/control_structures.tex | 312 ++++++++++++++++++++
 1 file changed, 312 insertions(+)
 create mode 100644 programming/lectures/control_structures.tex

diff --git a/programming/lectures/control_structures.tex b/programming/lectures/control_structures.tex
new file mode 100644
index 0000000..e256ebc
--- /dev/null
+++ b/programming/lectures/control_structures.tex
@@ -0,0 +1,312 @@
+\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}