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 +{ + \usetheme{Singapore} + \setbeamercovered{opaque} + \usecolortheme{tuebingen} + \setbeamertemplate{navigation symbols}{} + \usefonttheme{default} + \useoutertheme{infolines} + % \useoutertheme{miniframes} +} + +\AtBeginSection[] +{ + \begin{frame} + \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}