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